Что такое 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.
Шаг №8: Настройка автозапуска
Остается только настроить автозапуск всех установленных программ — тогда они будут стартовать при запуске виртуального сервера:
sudo chkconfig --levels 235 mysqld on
sudo chkconfig --levels 235 nginx on
sudo chkconfig --levels 235 php-fpm on