Как установить LEMP-стек (Linux, nginx, MySQL, PHP) на CentOS 6

Что такое LEMP

Стек LEMP — это набор открытых программных продуктов для запуска веб-серверов. Сокращение LEMP образовано по первых буквам названий входящих в пакет продуктов Linux, nginx (произносится как Engine x), MySQL, PHP. Поскольку в нашем руководстве речь идет о сервере под управлением CentOS, то этап с установкой операционной системы будет пропущен. Разберемся с установкой остальных компонентов стека.

Шаг #1: Установка нужных репозиториев

Установку необходимого программного обеспечения будем проводить с помощью менеджера пакетов Yum. Однако, поскольку nginx недоступен напрямую из CentOS, нам придется дополнительно установить репозиторий epel.

sudo yum install epel-release

Шаг #2: Установка MySQL

На следующем шаге необходимо начать установку серверного программного обеспечения. Начнем с MySQL и нужных зависимостей.

sudo yum install mysql-server

По завершению установки нужно перезапустить MySQL:

sudo /etc/init.d/mysqld restart

Произвести настройку базы данных можно с помощью следующей команды:

sudo /usr/bin/mysql_secure_installation

Затем система попросит ввести root-пароль (поскольку мы только установили MySQL, его еще нет, поэтому можно ничего не вводить и нажать Enter):

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Далее система попросит выбрать root-пароль. Здесь следует нажать Y и следовать инструкциям — процесс довольно простой, нужно будет лишь отвечать на вопросы yes/no и вводить требуемые данные. Самый простой вариант — ответить yes на все вопросы.

By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y
... Success!

Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
... Success!

By default, MySQL comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
... Success!

Cleaning up...

All done! If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!

Шаг #3: Установка nginx

Как и в случае с MySQL, мы будем устанавливать nginx с помощью yum:

sudo yum install nginx

Веб-сервер сам по себе не запускается, поэтому нужно активировать его специальной командой:

sudo /etc/init.d/nginx start

Шаг #4: Установка PHP

Пакет php-fpm содержится в репозитории REMI, который на данном этапе отключен. Поэтому, прежде всего нужно его активировать и установить php и php-fpm:

sudo yum install php-fpm php-mysql

Шаг #5: Настройка PHP

На этапе настройки нужно кое-что изменить в конфигурационном файле PHP. Открываем php.ini:

sudo vi /etc/php.ini

В нем нужно найти строку cgi.fix_pathinfo=1 и заменить единицу на ноль:

cgi.fix_pathinfo=0

Затем сохраняем и выходим из файла.

Шаг #6: Настройка nginx

Открываем конфигурационный файл nginx:

sudo vi /etc/nginx/nginx.conf

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

Теперь займемся конфигурацией виртуальных хостов nginx. Чтобы облегчить файл настроек, информация о хостах хранится в другом файле. Здесь мы приводим уже измененный текст файла:

#
# The default server
#
server {
listen 80;
server_name example.com;


location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}

error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

Ниже описаны изменения, которые нужно осуществить:

  • В строке с индексами, вписать файл index.php;
  • Сменить Server_name на доменное имя или IP-адрес вашего сервера (в примере указан example.com);
  • Изменить в строках root путь на /usr/share/nginx/html;
  • Раскомментировать (убрать символ #) секцию, начинающуюся со строки "location ~ \.php$ {";
  • Изменить строку fastcgi_param, чтобы интерпретатор смог найти PHP-скрипт, который мы храним в домашней директории пользователя root.

Сохраняем файл и выходим из него.

Теперь открываем конфигурационный файл php-fpm:

sudo vi /etc/php-fpm.d/www.conf

Здесь надо заменить пользователя и группу apache на nginx:

[...]
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
; RPM: apache Choosed to be able to access some dir as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
[...]

Затем перезапускаем php-fpm:

sudo service php-fpm restart

Кроме того, нужно разрешить соединения с сервером — для этого необходимо создать соответствующее правило для файрвола:

sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
sudo service iptables save

Шаг #7: Создание информационной страницы PHP

Стек LEMP установлен, но для того, чтобы проверить его работоспособность, можно создать информационную страницу PHP. Для этого, создаем новый файл:

sudo vi /usr/share/nginx/html/info.php

В нем пишем вот такой текст:

<?php
phpinfo(); ?>

Затем нужно сохранить файл и выйти из него.

Чтобы изменения вступили в силу, следует перезапустить nginx.

sudo service nginx restart

Теперь можно вбить в адресную строку браузера http://XXX.XXX.XX.XXX/info.php (IP-адрес нужно заменить собственным). Если все настроено верно, отобразится информационная страница PHP:

Информационная страница PHP

Шаг #8: Настройка автозапуска

Остается только настроить автозапуск всех установленных программ — тогда они будут стартовать при запуске виртуального сервера:

sudo chkconfig --levels 235 mysqld on
sudo chkconfig --levels 235 nginx on
sudo chkconfig --levels 235 php-fpm on

Средняя оценка: 5,0, всего оценок: 1