Библиотека сайта rus-linux.net
Установка стека LEMP (nginx, MariaDB/MySQL и php) в CentOS
Оригинал: How to install LEMP stack (nginx, MariaDB/MySQL and PHP) on CentOSАвтор: Dan Nanni
Дата публикации: 28 октября 2014 года
Перевод: А. Кривошей
Дата перевода: ноябрь 2014 г.
LEMP - это набирающий популярность стек веб-сервисов. Как можно понять из его названия, LEMP включает Linux, nginx, MariaDB/MySQL и PHP. nginx - это высокопроизводительная и легковесная замена медленному и трудно масштабируемому HTTP-серверу Apache, используемому в традиционном стеке LAMP. MariaDB - это развиваемый сообществом форк MySQL с хорошими возможностями и лучшей производительностью. PHP - язык программирования на стороне сервера для генерирования динамического контента, представлен PHP-FPM - расширенной реализацией PHP FastCGI.
В этом руководстве я продемонстрирую, как установить стек LEMP на платформе CentOS 7. Я буду ориентироваться как на CentOS 6, так и на CentOS 7, обращая ваше внимание на встречающиеся различия в процедуре установки.
Этап первый: Nginx
Сначала давайте установим nginx и сделаем его базовую настройку, активировав его автозагрузку, и настроим брандмауэр.
Установка Nginx
Устанавливать будем уже собранную стабильную версию nginx из официального источника RPM.
В CentOS 7:
$ sudo rpm --import http://nginx.org/keys/nginx_signing.key $ sudo rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm $ sudo yum install nginx
В CentOS 6:
$ sudo rpm --import http://nginx.org/keys/nginx_signing.key $ sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm $ sudo yum install nginx
Обратите внимание, что если вы предварительно не импортируете официальный GPG-ключ для nginx, то получите предупреждение:
warning: /var/tmp/rpm-tmp.KttVHD: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY
Запуск Nginx
После установки nginx не будет запускаться автоматически. Для этого необходимо настроить его автозагрузку. Также нам необходимо открыть порт TCP/80 в брандмауэре, чтобы обеспечить удаленный доступ к веб-серверу. Все это делается с помощью следующих команд:
В CentOS 7:
$ sudo systemctl start nginx $ sudo systemctl enable nginx $ sudo firewall-cmd --zone=public --add-port=80/tcp --permanent $ sudo firewall-cmd --reload
В CentOS 6:
$ sudo service nginx start $ sudo chkconfig nginx on $ sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT $ sudo service iptables save
Тестирование Nginx
По умолчанию корневая директория nginx - это /usr/share/nginx/html. Файл index.html должен уже быть в этой директории. Давайте посмотрим, получится ли увас открыть эту тестовую страницу. Введите в браузере: http://nginx-ip-address/
Если вы видите эту страницу, значит nginx установлен правильно.
Этап второй: MariaDB/MySQL
Далее нам необходимо установить компонент базы данных стека LEMP. Хотя в CentOS/RHEL 6 и более ранних версиях есть пакеты для клиента и сервера MySQL, в CentOS/RHEL 7 в качестве реализации MySQL по умолчанию принята MariaDB, которая обеспечивает максимальную совместимость с MySQL в части API и команд.
В CentOS 7:
Установка пакетов клиента и сервера MariaDB и запуск сервера MariaDB:
$ sudo yum install mariadb-server $ sudo systemctl start mariadb $ sudo systemctl enable mariadb
В CentOS 6:
Установка пакетов клиента и сервера MySQL и запуск сервера MySQL:
$ sudo yum install mysql-server $ sudo service mysqld start $ sudo chkconfig mysqld on
После успешного запуска сервера MariaDB/MySQL выполните приведенный ниже скрипт, который входит в состав пакета сервера MariaDB/MySQL. Его однократный запуск позволяет закрыть некоторые потенциальные дыры в безопасности сервера баз данных - установить непустой пароль root, удалить анонимного пользователя и заблокировать удаленный доступ.
$ sudo mysql_secure_installation
С базой данных мы разобрались. Теперь перейдем к следующему этапу.
Этап третий: PHP
PHP- это очень важный компонент стека LEMP, который отвечает за генерацию динамического контента из данных, хранящихся в MariaDB/MySQL. Для LEMP вам необходимо, по крайней мере установить PHP-FPM и PHP-MySQL. PHP-FPM (FastCGI Process Manager) реализует интерфейс между nginx и PHP-приложениями, которые генерируют динамический контент. Модуль PHP-MySQL позволяет PHP-программам получать доступ к MariaDB/MySQL.
Установка модулей PHP
В CentOS 7:
$ sudo yum php php-fpm php-mysql
В CentOS 6:
Сначала вам необходимо установить репозиторий REMI (можно воспользоваться этим руководством), и установить пакеты из репозитория.
$ sudo yum --enablerepo=remi install php php-fpm php-mysql
При установке PHP необходимо учесть два момента:
В CentOS 6 пакеты клиента и сервера MySQL будут автоматически обновлены как часть зависимостей последней версии php-mysql в REMI.
Как в CentOS 6, так и в CentOS 7 при установке пакета php также устанавливается веб-сервер Apache (т.е. httpd) как часть его зависимостей. Это может привести к конфликтам с веб-сервером nginx. В следующем разделе мы узнаем, как решить эту проблему.
В зависимости от ваших потребностей вы можете установить пакеты дополнительных модулей PHP с помощью команды yum.
php-cli: интерфейс командной строки для PHP. Полезен для тестирования PHP в командной строке.
php-gd: поддержка обработки изображений для PHP.
php-bcmath: поддержка математических функций для PHP.
php-mcrypt: поддержка алгоритмов шифрования для PHP (DES, Blowfish, CBC, CFB, ECB).
php-xml: поддержка XML-парсинга для PHP.
php-dba: поддержка слоя абстракции баз данных для PHP.
php-pecl-apc: ускорение кэширования для PHP.
Чтобы просмотреть список всех доступных модулей PHP, введите:
$ sudo yum search php- (CentOS 7) $ sudo yum --enablerepo=remi search php- (CentOS 6)
Запуск PHP-FPM
Вам необходимо запустить PHP-FPM и добавить его в список автозагрузки.
В CentOS 7:
$ sudo systemctl start php-fpm $ sudo systemctl enable php-fpm
В CentOS 6:
$ sudo chkconfig php-fpm on $ sudo service php-fpm start
Этап четвертый: настройка стека LEMP
Последний этап руководства - настройка стека LEMP.
Отключение Httpd
Сначала отключите httpd, который был установлен с пакетами PHP.
В CentOS 7:
$ sudo systemctl disable httpd
В CentOS 6:
$ sudo chkconfig httpd off
Настройка Nginx
Далее, давайте настроим виртуальные хосты nginx, чтобы nginx мог работать с PHP посредством PHP-FPM. Для этого откройте в текстовом редакторе файл /etc/nginx/conf.d/default.conf и внесите в него следующие изменения:
$ sudo vi /etc/nginx/conf.d/default.conf server { listen 80; server_name www.server_domain.com; root /usr/share/nginx/html; index index.php index.html index.htm; location / { } # redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { } # nginx passes PHP scripts to FastCGI server via a TCP/9000 socket # this setting much be consistent with /etc/php-fpm.d/www.conf # try_files prevents nginx from passing bad scripts to FastCGI server location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
Также, давайте увеличим количество рабочих потоков nginx с 1 до 4, отредактировав конфигурационный файл nginx.
$ sudo vi /etc/nginx/nginx.conf worker_processes 4;
Настройка PHP
Далее, давайте изменим настройки PHP в файле /etc/php.ini. В частности, добавьте в /etc/php.ini следующие строки.
cgi.fix_pathinfo=0 date.timezone = "America/New York"
Для повышения безопасности мы хотим разрешить интерпретатору PHP обрабатывать только пути к существующим файлам. Для этого предназначена первая из приведенных выше строк.
Вторая строка задает часовой пояс, используемый работающими со временем и датой функциями PHP.
Тест PHP
И в конце давайте проверим, как nginx обрабатывает страницу с кодом PHP. Перед тестированием перезапустите nginx и PHP-FPM.
В CentOS 7:
$ sudo systemctl restart nginx $ sudo systemctl restart php-fpm
В CentOS 6:
$ sudo service nginx restart $ sudo service php-fpm restart
Создайте файл PHP с названием test.php и приведенным ниже содержимым, поместите его в /var/www/html/.
<?php phpinfo(); ?>
Откройте веб-браузер и перейдите по адресу http://nginx-ip-address/test.php.
Если вы видите приведенную выше страницу, значит вы все сделали правильно.