Назад | Перейти на главную страницу

Лучшая практика для развертывания PHP на нескольких серверах

В настоящее время я развертываю некоторые приложения PHP Zend на своих серверах, и это то, что у меня есть.

1-й уровень - балансировщик нагрузки + Http-cache.

2-й уровень - веб-сервер (здесь будет гораздо больше веб-серверов, поэтому балансировщик нагрузки).

3-й уровень - MySql (будет иметь репликацию, подчиненный мастер, возможно сегментирование для каждого клиента или группы клиентов).

Вопрос в том, что в настоящее время я запускаю nginx + php-fpm на веб-сервере, весь код php остается в соответствующей домашней папке пользователя. Когда пройдет время, я захочу увеличить количество серверов, экземпляров php-fpm и nginx.

Куда мне поместить php, потому что я не могу дублировать его между серверами, иначе обновления испортят согласованность;)

Я думаю, что, возможно, NFS будет содержать весь PHP-код, и серверы просто укажут на это.

Какой здесь правильный подход?

Я новичок в серверной архитектуре.

Ценю вашу помощь.

Родриго из []

Вы действительно не должны ставить его на NFS. Это сделает ваш NFS-сервер единственной точкой отказа. Если ваш NFS недоступен (возможно, он дает сбой, возможно, возникла проблема с сетью ...), то весь ваш сайт отключен.

Вместо этого храните свой PHP в каком-нибудь центральном месте - где угодно. Неважно где. Затем, когда вам нужно отправить файлы на новый сервер, просто скопируйте их на новый сервер.

Вам нужно будет убедиться, что ваши пользователи не обновляют PHP напрямую на веб-серверах. Они должны обновлять их в центральном месте.

Например, допустим, у вас есть web1 и web2 как ваши веб-серверы, а ваши файлы PHP хранятся в /home/foo/php и /home/bar/php. В настоящее время это ваше официальное местоположение и, вероятно, его нужно изменить.
Настройте что-то вроде /var/code/foo/php и /var/code/bar/php, и попросите своих пользователей обновиться там. Когда они сделают обновление, запустите сценарий, который копирует файлы в /home/foo/php и / home / bar / php` на каждом веб-сервере.

Отчасти сложность, с которой вы сталкиваетесь сейчас и будет продолжать, заключается в том, что вы храните данные в домашних каталогах пользователей.
Вам следует подумать о переходе на подходящую систему контроля версий, такую ​​как Mercurial, Git или SVN. Храните все данные в одном месте, а затем просматривайте их где угодно.

Пример этого:
Используйте сервер (назовем его dev1) и установите SVN. Создайте новый проект в SVN (назовем его php_project1). Попросите своих пользователей проверить svn://dev1/php_project1/userN, а также для редактирования и передачи файлов в SVN.
Затем на своих веб-серверах вы можете сделать что-то вроде:

cd /home/user1/php
svn checkout svn://dev1/php_project1/user1

И каждый раз, когда вам нужно обновить свои веб-серверы, вы просто запускаете svn update в домашнем каталоге.

Я мог бы пойти еще дальше. Добро пожаловать в управление веб-фермой.

  • 1-й уровень - только балансировщик нагрузки
  • 2-й уровень - статический / графический / видео веб-сервер (nginx); общий веб-сервер (nginx + php-fpm); скриптовый сервер (nginx + php-fpm или cpp; запускать «тяжелый» скрипт); сервер memcached
  • 3-й уровень - шардинг master-slave сервера MySQL

и мониторинг (Zabbix) и почтовый сервер. Пинба сервер мониторинга / статистики в реальном времени для PHP с использованием MySQL.

Я думаю, может быть, NFS будет содержать весь php-код, и серверы просто укажут на это.

плохая идея, используйте систему контроля версий (git, svn, mercurial, ...) и сценарий развертывания