Установка стека LEMP в Ubuntu 16.04
LEMP Stack, Ubuntu | Комментировать запись
Стек LEMP – это группа программ, предназначенная для обслуживания динамических веб-страниц и веб-приложений. Этот акроним расшифровывается как Linux (операционная система), Nginx (веб-сервер), MySQL (система управления базами данных) и PHP (серверный язык сценариев для обработки динамического контента).
Данное руководство научит устанавливать все компоненты стека LEMP на сервер Ubuntu 16.04. Поскольку сервер использует операционную систему Ubuntu, первый компонент уже установлен. Руководство поможет установить остальное.
Требования
- Предварительно настроенный сервер Ubuntu 16.04.
- Не-root пользователь с доступом к команде sudo (инструкции по созданию такого пользователя – здесь).
1: Установка Nginx
Для отображения веб-страниц используется производительный веб-сервер Nginx.
Все программное обеспечение, необходимое для установки веб-сервера, находится в стандартных репозиториях системы.
Поскольку это первое взаимодействие с системой пакетирования apt в текущей сессии, нужно обновить индекс пакетов. После этого можно установить Nginx.
sudo apt-get update
sudo apt-get install nginx
В системе Ubuntu 16.04 веб-сервер Nginx запускается автоматически после установки.
Если ране вы настроили брандмауэр, нужно разрешить соединения сервиса Nginx. Во время установки Nginx регистрируется как сервис в ufw, потому разрешить трафик веб-сервера очень просто.
Рекомендуется выбрать наиболее строгий профиль веб-сервера. Однако, поскольку на сервере ещё не настроен SSL, мы можем настроить только порт 80.
Чтобы включить этот профиль, введите:
sudo ufw allow 'Nginx HTTP'
Убедитесь в том, что профиль включен:
sudo ufw status
Команда должна сообщить, что трафик HTTP разрешен:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Добавив новое правило брандмауэра, можно проверить, работает ли сервер, открыв стандартную посадочную страницу в браузере. Эта страница доступна по доменному имени или IP-адресу.
Если вы не знаете своего IP-адреса, вы можете узнать его с помощью командной строки. Введите:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
Команда вернёт несколько строк. Проверьте каждый адрес в браузере.
Также можно узнать, как видят ваш IP-адрес другие точки в сети.
curl -4 icanhazip.com
Узнав вой IP, введите его в браузер, чтобы убедиться, что веб-сервер работает должным образом.
http://server_domain_or_IP
На экране должна появиться стандартная посадочная страница Nginx:
Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. Further configuration is required. ...
2: Установка MySQL
Теперь нужно установить MySQL, систему управления базами данных, которая будет хранить и систематизировать данные сайта.
Чтобы установить MySQL, введите:
sudo apt-get install mysql-server
Система запросит root пароль MySQL.
После установки MySQL нуждается в настройке.
Чтобы защитить установку, можно запустить простой скрипт безопасности, который удалит потенциально опасные настройки.
sudo mysql_secure_installation
Система предложит ввести root пароль MySQL.
Предупреждение: Позже система предложит включить параметр VALIDATE PASSWORD PLUGIN. Если этот параметр включен, пароли, которые не соответствуют указанным критериям, будет отклонены системой MySQL как ошибка. Это вызовет проблемы, если вы используете слабый пароль в программах, которые автоматически настраивают учетные данные пользователя MySQL (например PhpMyAdmin). Безопаснее отключить этот параметр и использовать надёжные уникальные пароли.
Чтобы принять настройки по умолчанию, нажмите y на остальные вопросы сценария.
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No:
Если вы включили валидацию паролей, программа предложит выбрать уровень. Уровень 2 – наивысший; при этом валидацию пройдут только пароли, содержащие цифры, буквы верхнего и нижнего регистра и специальные символы. Пароли, состоящие из обычных слов, будут отклонены.
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
Если валидация паролей включена, программа покажет надёжность текущего root пароля и предложит изменить его. Если вас устраивает ваш пароль, введите n.
Using existing password for root.
Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n
На остальные вопросы можно нажать Y и Enter. Это удалит анонимных пользователей и тестовые базы данных, отключит удалённый root логин и обновит текущие настройки MySQL.
3: Установка PHP
PHP – это серверный язык сценариев для создания динамических страниц.
Nginx не поставляется с поддержкой PHP, в отличие от других веб-серверов. Потому нужно установить php-fpm (fastCGI process manager). Так Nginx сможет передавать PHP-запросы на обработку.
Установите модуль и вспомогательный пакет, необходимый для взаимодействия PHP с БД.
sudo apt-get install php-fpm php-mysql
Настройка процессора PHP
Откройте главный конфигурационный файл php-fpm с привилегиями root.
sudo nano /etc/php/7.0/fpm/php.ini
Найдите в файле параметр cgi.fix_pathinfo; по умолчанию он закомментирован при помощи точки с запятой и имеет значение 1.
Это значение крайне опасно, поскольку в случае если запрашиваемый файл не найден, PHP будет пытаться выполнить ближайший к нему файл. Таким образом, злоумышленник может создать вредоносный запрос, который выполнит запрещённый сценарий.
Раскомментируйте параметр и измените его значение на 0.
cgi.fix_pathinfo=0
Сохраните и закройте файл. Перезапустите PHP:
sudo systemctl restart php7.0-fpm
4: Настройка Nginx для поддержки PHP
Все компоненты стека установлены. Теперь нужно настроить взаимодействие Nginx и PHP.
Для этого нужно отредактировать блок server (виртуальный хост).
sudo nano /etc/nginx/sites-available/default
Стандартный блок Nginx выглядит так (комментарии опущены):
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
Для начала добавьте index.php как первое значение директивы index, чтобы файлы index.php обслуживались первыми.
Затем отредактируйте значение директивы server_name. Укажите здесь доменное имя или IP.
Чтобы настроить обработку PHP, нужно просто раскомментировать сегмент файла, отвечающий за обслуживание запросов PHP. Это блок location ~\.php$, фрагмент fastcgi-php.conf и сокет для php-fpm.
Также нужно раскомментировать блок location для файлов .htaccess. Сервер Nginx не обрабатывает эти файлы; если один из этих файлов попадёт в document root, его нельзя отображать клиентам.
Учитывая внесенные изменения, файл имеет такой вид:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name server_domain_or_IP;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ /\.ht {
deny all;
}
Сохраните и закройте файл. Проверьте конфигурационный файл на наличие ошибок.
sudo nginx -t
Исправьте ошибки и перезагрузите Nginx:
sudo systemctl reload nginx
5: Тестирование установки
Теперь установка стека LEMP полностью завершена. Убедитесь, что веб-сервер успешно обслуживает файлы PHP.
Для этого нужно создать тестовый файл info.php в каталоге document root.
sudo nano /var/www/html/info.php
Вставьте в него следующий код:
<?php
phpinfo();
Сохраните и закройте файл.
Теперь попробуйте открыть его в браузере:
http://server_domain_or_IP/info.php
На экране появится веб-страница, содержащая информацию о сервере. Если такая страница появилась, Nginx обслуживает файлы PHP.
После проверки обязательно удалите этот файл, иначе любой пользователь сможет получить доступ к конфиденциальным данным о сервере.
sudo rm /var/www/html/info.php
Заключение
Теперь на сервере Ubuntu 16.04 установлен программный стек LEMP – надёжная и гибкая платформа для развёртывания сайта или приложения.
Tags: LEMP, Linux, MySQL, NGINX, PHP, Ubuntu 16.04