Наши партнеры

UnixForum





Библиотека сайта 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

Если вы видите эту страницу, значит 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

При установке 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.

тест php

Если вы видите приведенную выше страницу, значит вы все сделали правильно.