Как загрузить основной файл PHP через FTP, не отвлекая посетителя на ваш сайт?

Всякий раз, когда активный сайт на основе PHP, за которым я присматриваю, нуждается в срочном изменении кода, я изменяю код в автономном режиме, проверяю его на своем локальном сервере, а затем, когда доволен, загружаю обновленный файл на рабочий сервер через FTP.

Это, очевидно, работает, но я обнаружил, что когда я делаю это на загруженном сайте, если кто-то получает доступ к файлу в своем браузере в то же самое время, когда я загружаю, он получит ошибку синтаксического анализа PHP. Я предполагаю, что это потому, что загрузка через FTP не завершена в тот момент, когда они пытаются получить к нему доступ.

Я не могу дождаться тихого периода, чтобы загрузить мои новые файлы, так как сайт занят 24/7, так как я могу избежать этого? Некоторые серверы FTP обрабатывают это лучше, чем другие, или я собираюсь развернуть на производственном сервере неправильно?

CENTOS 6.6, Apache, ProFTPd / PureFTPd, PHP 5.3

2 ответа

Решение

Вы можете достичь этого, загрузив все приложения в другой каталог. Ваш общедоступный каталог может ссылаться на каталог с текущей версией вашего приложения. Когда вы загружаете все файлы приложения, вы можете просто переключить символическую ссылку.

Например, у вас есть хост apache / nginx, настроенный на

/var/awesome-app/public_html

Храните ваше приложение в другом месте, например, в вашем домашнем каталоге. Загрузите ваше приложение в отдельный каталог релизов, например так:

~/awesome-app/releases/1
~/awesome-app/releases/2
~/awesome-app/releases/3
...
~/awesome-app/releases/<RELEASE_NUMBER>

Создайте символическую ссылку из вашего приложения на путь, на который указывает хост. Эта команда должна вызываться один раз - при настройке среды:

ln -s ~/awesome-app/current /var/awesome-app/public_html

После загрузки приложения создайте (замените) символическую ссылку на текущий выпуск. Эта команда должна вызываться с каждым выпуском.

ln -sf ~/awesome-app/releases/4 ~/awesome-app/current

Вы также можете посмотреть на развертывание программного обеспечения.

Вы можете сделать два бэкэнда (копии, например, nginx upstream) приложения и обновить его отдельно (с отключением текущего обновленного бэкенда).

Другие вопросы по тегам