Ищете безопасный способ развертывания кода PHP - PullRequest
6 голосов
/ 16 декабря 2011

Как мы делаем вещи сейчас

У нас есть файловый сервер (с использованием NFS), который монтируется несколькими веб-серверами, и используем эти подключения в качестве корневого веб-сервера. При развертывании нашей кодовой базы мы отправляем архив (tar.gz) на NFS-сервер и разархивируем данные непосредственно в «веб-каталоге» файлового сервера.

Выпуск

В процессе развертывания мы видим некоторые ошибки ввода-вывода, в основном, когда запрошенный файл не может быть прочитан: Smarty error: unable to read resource: "header.tpl" Эти ошибки, похоже, исчезают после завершения развертывания, поэтому мы предполагаем, что это происходит из-за разархивирования данных напрямую в веб-каталог не самый безопасный из вещей. Я предполагаю, что нам нужно что-то атомное.

Мой вопрос

Как мы можем атомарно копировать новые файлы в существующий каталог (корневой каталог веб-сервера)?

EDIT

Файлы, которые мы бескомпромиссны в веб-каталоге, не являются единственными файлами в каталоге. Мы добавляем файлы в каталог, в котором уже есть файлы. Поэтому копирование каталога или использование символической ссылки - это не вариант (я знаю о нем).

Ответы [ 5 ]

1 голос
/ 08 октября 2015

Я думаю, rsync - лучший выбор вместо scp, только измененные файлы будут синхронизированы.но развертывание кода по сценарию неудобно для развития в команде, и ошибки при развертывании не гуманизированы.

Вы можете думать о Capistrano, Magallanes, Deployer, но они также являются сценариями.Я могу порекомендовать вам попробовать walle-web , инструмент для развертывания, написанный на PHP с yii2 из коробки.Я провел его в нашей компании в течение нескольких месяцев, он работает без сбоев при развертывании тестов, симуляций, производственной среды.

это зависит от групп инструментов bash, rsync, git, link, но веб-интерфейс, как правило, хорошо работает, попробуйте:)

1 голос
/ 16 декабря 2011

Вот что я делаю.

DocumentRoot, например, /var/www/sites/www.example.com/public_html/:

cd /var/www/sites/www.example.com/
svn export http://svn/path/to/tags/1.2.3 1.2.3
ln -snf 1.2.3 public_html

Вы можете легко изменить эторасширить свой .tar.gz перед изменением символической ссылки вместо экспорта из SVN.Важной частью является то, что изменение является атомным применением символической ссылки.

0 голосов
/ 21 декабря 2013

Мне нравится идея NFS.Мы внедряем наш код на NFS-сервер, который используется на наших интерфейсах.Фактически мы запускаем скрипт оболочки, когда хотим выпустить новую версию.Мы используем текущую символическую ссылку на последний выпуск dir, например:

/fasmounts/website/current -> /fasmounts/website/releases/2013120301/

И корень документа apache:

/fasmounts/website/current/public 

(на самом деле корнем документа apache является / var/ www, который является символической ссылкой на / fasmounts / website / current / public)

Сценарий оболочки обновляет текущую символическую ссылку до новой версии ПОСЛЕ того, как все было загружено правильно.

0 голосов
/ 16 декабря 2011

RSync был рожден для того, чтобы бежать ... э-э ... Я имею в виду именно это

RSync работает через локальные файловые системы и ssh - это очень надежный и быстрый - отправка / копирование только измененных файлов.

Он может быть настроен на удаление любых файлов, которые были удалены (или просто отсутствуют в источнике), или он может быть настроен, чтобы оставить их в покое. Вы можете настроить списки исключений для исключения определенных файлов / каталогов при синхронизации.

Вот ссылка на учебник .

Re: atomic - ссылка на другой вопрос по SO

0 голосов
/ 16 декабря 2011

Почему бы вам не иметь 2 каталога с 2 разными версиями сайта. Поэтому, когда вы закончили развертывание в site_2, вы просто переключили dir сайта в конфигурации вашего веб-сервера (например, apache) и скопировали все файлы в site_1 dir. Затем вы можете выполнить развертывание в каталоге site_1 и переключиться на него с site_2 тем же способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...