Всякий раз, когда активный сайт на основе PHP, за которым я присматриваю, нуждается в срочном изменении кода, я изменяю код в автономном режиме, тестирую его на своем локальном сервере, а затем, когда доволен, загружаю обновленный файл на рабочий сервер через FTP.
Это, очевидно, работает, но я обнаружил, что когда я делаю это на загруженном сайте, если кто-то обращается к файлу в своем браузере в то же самое время, когда я загружаю, он получит ошибку синтаксического анализа PHP. Я предполагаю, что это потому, что загрузка через FTP не завершена в тот момент, когда они пытаются получить к нему доступ.
Я не могу дождаться тихого периода, чтобы загрузить мои новые файлы, так как сайт занят 24/7, так как я могу избежать этого? Некоторые серверы FTP обрабатывают это лучше, чем другие, или я собираюсь развернуть на производственном сервере неправильно?
CENTOS 6.6, Apache, ProFTPd / PureFTPd, PHP 5.3
Вы можете достичь этого, загрузив все приложения в другой каталог. Ваш общедоступный каталог может ссылаться на каталог с текущей версией вашего приложения. Когда вы загружаете все свои файлы приложений, вы можете просто переключить символическая.
Например, у вас есть хост 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) приложения и обновить его отдельно (с отключением текущего обновленного бэкенда).