Предотвращение простоев с помощью зеркала lftp

Я использую lftp для развертывания веб-сайта через Travis CI. Перед развертыванием выполняется процесс сборки, поэтому каталог сборки присутствует и помещается в корень ftp-сервера.

lftp $FTP_URL -e "glob -d mirror build . --reverse --delete-first --parallel=10 && exit"

Это работает довольно хорошо, но мне не нравятся простои / временные ошибки разбора PHP из-за отсутствующих файлов на моем веб-сайте. Каков наилучший способ обойти эту проблему?


Моим первым подходом была возможность установить временный каталог, но на странице руководства lftp говорится, что есть только параметры для временных файлов. Я все еще пробовал вариант, но это не помогло.


Мой второй подход состоял в том, чтобы использовать «временную сборку зеркала», чтобы использовать временную папку, а затем заменить ею корень. Проблема здесь в том, что я не могу исключить временную папку при удалении старых файлов и папок, таких как rm -rf *.


person redaxmedia    schedule 26.11.2016    source источник
comment
Вы пробовали настройку xfer:use-temp-file?   -  person lav    schedule 27.11.2016
comment
Есть ли у вас доступ к родительскому каталогу корневого веб-узла?   -  person lav    schedule 27.11.2016
comment
Настройка временного файла не работает для каталога. У меня нет доступа к родительскому каталогу, идея заключалась в том, чтобы иметь отдельный доступ для каждого задания cron — предоставление доступа к родительскому каталогу может решить мою проблему, но тогда пользователь ftp имеет доступ к другим проектам.   -  person redaxmedia    schedule 04.12.2016


Ответы (2)


Для небольших изменений, не связанных с добавлением/удалением файлов php, должно быть достаточно set xfer:use-temp-file. Также не используйте --remove-first, так как это заставляет lftp удалять устаревшие файлы перед загрузкой.

Для больших изменений я бы создал отдельный каталог для каждой версии сайта и перенаправил веб-сервер в каталог, используя .htaccess mod_rewrite или любой другой файл конфигурации. Этот метод позволит атомарно переключиться на новую версию (и обратно, если это необходимо). Кроме того, вы сможете провести финальное предпродакшн-тестирование новой версии, если переадресуете на новую версию условно по вашему IP-адресу или по какому-то другому правилу.

Если вы не хотите повторно загружать весь сайт для каждой новой версии, а FTP-сервер поддерживает FXP с самим собой, то вы можете скопировать старую версию в новый каталог, используя mirror old_directory ftp://[email protected]/new_directory, а затем обновить новый каталог, используя mirror -eR local_dir new_directory.

person lav    schedule 28.11.2016

Окончательно,

Я написал крошечный плагин для Grunt, который довольно хорошо справляется с операциями lftp и помогает обрабатывать файлы и каталоги. .

Это шаблон нулевого центра города — каждый заполнитель будет автоматически заменен:

command:
[
    'mirror {SOURCE} {TARGET}-new-{TIMESTAMP} --reverse --delete-first',
    'mv {TARGET} {TARGET}-old-{TIMESTAMP}',
    'mv {TARGET}-new-{TIMESTAMP} {TARGET}',
    'rm -rf {TARGET}-old-{TIMESTAMP}',
    'exit'
]

Это будет команда Vanilla lftp — не забудьте вручную заменить каждый заполнитель:

lftp $FTP_URL -e "mirror {SOURCE} {TARGET}-new-{TIMESTAMP} --reverse --delete-first; mv {TARGET} {TARGET}-old-{TIMESTAMP}; mv {TARGET}-new-{TIMESTAMP} {TARGET}; rm -rf {TARGET}-old-{TIMESTAMP}; exit"
person redaxmedia    schedule 27.09.2018