Статьи

CMS Showdown: Nginx, Ghost, PHP и Phalcon

Еще в январе я принял одно из своих новогодних решений — пройти 4000 километров ради фитнеса. Я документировал это виртуальное путешествие (которое происходит на беговой дорожке DIY) в блоге Ghost .

Срок действия моей подписки Ghost истек, и из-за серьезного отсутствия даже самых основных функций CMS и отсутствия поддержки PayPal я перенес свой собственный экземпляр в DigitalOcean . Возможно, вы удивляетесь, почему я пишу о Ghost на ориентированном на PHP канале — эта серия будет демонстрацией всех различных CMS на основе PHP, которые я могу найти, сопоставленных друг с другом и с Ghost , поскольку я ищу следующий лучший альтернатива.

Настройка

Поскольку моя дроплет DigitalOcean уже запускает Nginx в качестве обратного прокси-сервера для блога, я также буду развертывать все CMS ‘на той же самой установке, каждый на своем собственном поддомене. Если я, например, попробую WordPress (я не буду — WP — единственный, который я не буду тестировать), он будет доступен в прямом эфире на wp.4kk.me. Субдомен www умолчанию все еще будет обслуживать блог на основе Ghost.

На сервере также будет включен TLS, потому что это имеет смысл . Я позабочусь о том, чтобы оптимизировать все установки, насколько мне известно, и приму информацию от всех, что еще нужно сделать, чтобы доить приложения для всего, что у них есть. Использование мониторов производительности приложений, таких как NewRelic и AppDynamics, также не может быть и речи, и все законченные интеграции будут проверяться на производительность . Я намерен приложить усилия сообщества и хотел бы получить советы и комментарии из максимально возможного числа источников.

Я буду использовать Nginx в Ubuntu 12.04 с PHP 5.5. Обратите внимание, что как только PHP обновится до 5.6, среда будет обновлена ​​- нет смысла использовать устаревшее программное обеспечение. Аналогичным образом, как только Ubuntu 14.04 будет выпущен и будет должным образом проверен людьми, способными правильно его проверить, мы перейдем к этой версии LTS вместо 12.04. Процедура обновления будет тщательно задокументирована, когда придет время.

Фактический бенчмаркинг будет происходить на моей локальной машине с SSD, в отдельном экземпляре идентичной Vagrant box для каждой установки. Таким образом, тесты могут выполняться каждый раз на одном и том же сервере в одинаковых условиях. Apache Benchmark будет использоваться как приложение для бомбардировки. Первые тесты произойдут, когда у нас будет установлено и запущено как минимум 5 CMS как в режиме реального времени, так и локально.

Я также напишу собственный импортер данных для всех моих сообщений 4kk для каждой CMS, так что полные данные есть и их не нужно подделывать. Эти импортеры будут с открытым исходным кодом, и вы сможете использовать их для экспорта данных Ghost в любую CMS, которую мы рассмотрим здесь.

Если вы хотите полностью следовать своей собственной капле DigitalOcean, не стесняйтесь открыть счет по моей реферальной ссылке . Затем выберите базовый сервер с Ubuntu 12.04. Я выбрал каплю 2-го уровня, одну с 1 ГБ ОЗУ, исключительно из-за того, что мы будем запускать так много приложений на одном сервере. Если вы не собираетесь следовать каждой CMS, смело выбирайте самую маленькую.

Если вы также хотите установить Ghost, вы должны следовать этому руководству . Примените его к самой последней версии Ghost, все остальное остается прежним.

Установка PHP на Nginx

В Ubuntu мы используем PPA-компонент ondrej для установки последней версии PHP без необходимости сборки из исходного кода. Версии Ондрея всегда не более одной минорной версии от последней (например, 5.5.9 против 5.5.10) и гораздо проще в установке, чем полностью ручная процедура.

 sudo add - apt - repository ppa : ondrej / php5 sudo apt - get update sudo apt - get upgrade sudo apt - get install php5 - fpm php5 - dev 

Измените свой файл php.ini для часового пояса, настроек размера загружаемого файла и т. Д. Не забудьте активировать OpCache в конце INI-файла, если вы используете PHP 5.5+, как я. Это делает мир различий в производительности.

Давайте определим поддомен для тестирования нашего PHP сейчас. Мы убедимся, что URL dev.4kk.me выводит phpinfo(); , Естественно, вы должны заменить все последующие экземпляры 4kk своим собственным доменным именем или IP-адресом вашей капли, если это то, что вы используете для тестирования.

Настройка виртуального хоста на поддомене

Я создал пользователя без полномочий root для моей капли. DigitalOcean использует root по умолчанию, но я склонен отключать как root, так и все пароли при использовании SSH, и вместо этого создать пользователя только с ключом, с помощью которого я затем смогу выполнять команды sudo на моем сервере. Я предполагаю, что вы сделаете то же самое — ради безопасности, вы должны. Создайте нового пользователя на своем сервере и следуйте этому руководству, но для этого пользователя — не для пользователя root. Вы никогда не хотите удаленно входить в систему как root.

В моем случае этот пользователь называется «swader», поэтому я буду помещать все PHP-приложения, которые мы будем создавать в этой серии, в родительскую папку /home/swader/apps/php . Создайте его, если он не существует, и добавьте еще одну подпапку: dev . Примените свое собственное имя пользователя к пути во всех примерах ниже.

mkdir -p ~/apps/php/dev

В этой папке создайте стандартный phpinfo() . Назовите это index.php :

 <? php phpinfo (); 

Теперь нам нужно создать новый виртуальный хост для Nginx, который ищет файлы PHP в этой папке. Это просто копия стандартного шаблона Nginx Vhost, позже мы будем настраивать Nginx.

 server { listen dev . 4kk . me : 80 ;   ## listen for ipv4; this line is default and implied listen [::]: 80  default_server ipv6only = on ;   ## listen for ipv6 root / home / swader / apps / php / dev ; index index . php index . html index . htm ; 

         # Make site accessible from dev.4kk.me server_name dev . 4kk . me ; location /   { 
                 # First attempt to serve request as file, then 
                 # as directory, then fall back to displaying a 404. try_files $uri $uri / / index . html ; 
                 # Uncomment to enable naxsi on this location 
                 # include / etc / nginx / naxsi . rules } 

         #error_page 404 /404.html; 

         # redirect server error pages to the static page /50x.html 
         # error_page 500   502   503   504   / 50x . html ; location =   /50x.html { root / home / swader / apps / php / dev ; 
         } 

         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 
         # location ~  \.php$ { try_files $uri = 404 ; fastcgi_split_path_info ^(.+ \.php )(/.+) $ ; 
                 # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini 

                 # With php5-cgi alone: 
                 #fastcgi_pass 127.0.0.1:9000; 
                 # With php5-fpm: fastcgi_pass unix : /var/ run / php5 - fpm . sock ; fastcgi_index index . php ; include fastcgi_params ; 
         } 

         # deny access to .htaccess files, if Apache's document root 
         # concurs with nginx's one 
         # location ~   / \.ht { deny all ; 
         } 
 } 

Доступ к http://dev.4kk.me теперь phpinfo() экран phpinfo() :

Наш основной домен теперь отображает Ghost, а наш поддомен отображает содержимое PHP папки этого субдомена.

Phalcon

Поскольку одной из CMS, которую мы будем тестировать, будет PhalconEye , нам также потребуется установить Phalcon. Лучше убери это с дороги немедленно. Мы создадим директорию с tools в домашней папке нашего пользователя, загрузим и установим оттуда:

 mkdir ~ /tools cd ~/ tools 

Затем мы следуем стандартной процедуре установки.

 git clone -- depth = 1  git :// github . com / phalcon / cphalcon . git cd cphalcon / build sudo ./ install 

После добавления строки extension=phalcon.so в файл (ы) php.ini не забудьте перезапустить php5-fpm, поскольку он работает как отдельный процесс в случае Nginx, а не как подмодуль Apache, который перезапускает каждый раз, когда это делает Apache:

 sudo service php5 - fpm restart sudo service nginx restart 

Теперь Phalcon должен быть установлен, и вы сможете найти его в предыдущем phpinfo .

Вывод

В этой части мы сконфигурировали нашу дроплет DigitalOcean, связали ее с некоторыми руководствами по установке Ghost и установили PHP и Phalcon. Мы также настроили поддомен, на котором нужно тестировать наш исходный PHP-файл, чтобы убедиться, что все работает так, как задумано. Если вы хотите более подробно взглянуть на настройку HTTPS, пожалуйста, прокомментируйте ниже — я был бы рад написать специальное руководство по запуску HTTPS на Nginx. В следующей части мы рассмотрим нашего первого кандидата в CMS.