Как загрузить основной файл 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) приложения и обновить его отдельно (с отключением текущего обновленного бэкенда).