LEMP — это набор программ предназначенный для работы веб сайтов (динамических веб-страниц и веб-приложений). Этот акроним расшифровывается как Linux (операционная система), Nginx (веб-сервер), MySQL (система управления базами данных) и PHP (серверный язык сценариев для обработки динамического контента).
Перед тем как продолжить работу, у нас должен быть сервер, виртуальный сервер или VPS с установленным дистрибутивом Ubuntu 16.04 Server, а также возможность подключения к серверу по SSH для пользователя с административными (sudo) привилегиями. Собственно сам пользователь с правами sudo. Для тестового сервера подойдет и пользователь root.
Инструкция по настройке LEMP стек (linux, nginx, mysql, php) на Ubuntu 16.04 server
Шаг № 1 Установка веб-сервера Nginx
Что бы пользователи увидели ваш сайт необходимо установить веб-сервер nginx.
Все программное обеспечение включено в репозиторий Ubuntu и будет установлено из него.
Начиная с Ubuntu 16 команда можно использовать не полную команду apt-get, а просто apt
Перед первым использованием apt нужно обновить все индексы в системе выполнив команду:
1 |
sudo apt update |
Если система только установлена, можно обновить все ее компоненты и пакеты безопасности до последних версий, командой ( будет запрошен пароль пользователя для выполнения команды sudo):
1 |
sudo apt upgrade -y |
Устанавливаем веб сервер Nginx:
1 |
sudo apt install nginx |
В Ubuntu 16.04 после установки веб сервера nginx он будет сразу работать с базовыми настройками.
Если у вас нету домена привязанного к этому серверу или вы не знаете публичный ip адрес сервера, его можно узнать выполнив следующую команду
1 |
ifconfig |
Вам нужна строка вида inet addr. Например для тестового сервера она может быть вида inet addr:192.168.1.101 если вы экспериментируете в своей локальной сети.
В браузере вводим этот ip адрес и если все сделано правильно видим стандартную страницу приветствия nginx
Шаг № 2 Устанавливаем MySQL (базы данных)
У нас уже есть веб сервер, теперь нужно установить MySQL, систему управления базами данных, для сохранения и управления данными веб сайта.
Выполняем следующую команду в консоле (терминале) сервера:
1 |
sudo apt install mysql-server |
В процессе установки нужно будет создать пароль для пользователя root (администратора) для управления всей системой MySQL. Забегая на перед, для каждого веб сайта нужно будет создавать отдельного пользователя с паролем отличающимся от администратора в целях безопасности.
После установки MySQL выполним настройки безопасности следующей командой:
1 |
sudo mysql_secure_installation |
Система запросит пароль root (администратора) MySQL. И предложит включит модуль валидации
1 2 3 4 |
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? |
Нажимаем No и пропускаем этот шаг.
Если выбрать Yes пароли, которые не соответствуют указанным критериям, будет отклонены системой MySQL как ошибка. Это вызовет проблемы, если вы используете слабый пароль в программах, которые автоматически настраивают учетные данные пользователя MySQL (например PhpMyAdmin). Безопаснее отключить этот параметр и использовать надёжные уникальные пароли.
Следующим шагом удаляем возможность создания баз данных анонимным пользователем (используется в тестовых средах для продакшин не подходит)
1 2 3 4 5 6 7 8 |
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? (Press y|Y for Yes, any other key for No) : |
Нажимаем Yes
Отключаем возможность подключатся к MySQL пользователем root удаленно.
1 |
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : |
Нажимаем Yes
Удаляем тестовые базы
1 2 3 4 5 6 |
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? (Press y|Y for Yes, any other key for No) : |
Нажимаем Yes
MySQL установлен и выполнены общие настройки безопасности.
Шаг № 3 Установка PHP
PHP в LEMP стеке отвечает за генерацию динамического контента, выполнение скриптов и обработку бизнес-логики веб-приложения.
В упрощенном виде, внешние запросы от посетителей веб-сайта «приходят» на веб-сервер (Nginx), который затем передаёт их в PHP-скрипты. PHP-скрипты выполняют обработку запроса, соединяются с MySQL сервером для записи или получения необходимой информации, а затем передают результат своей работы назад к веб-серверу.
Для установки PHP (вместе с необходимым для работы с MySQL компонентом) воспользуемся следующей командой:
1 |
sudo apt-get install php-fpm php-mysql |
Настройка PHP
PHP компоненты установлены, теперь произведем настройки для большей безопасности
Открываем конфигурацию php-fpm с правами root:
1 |
sudo nano /etc/php/7.0/fpm/php.ini |
в открывшемся окне ищем параметр cgi.fix_pathinfo
. Он закоментирован символом (;) и у него установлен параметр «1» по умолчанию.
Это очень не безопасная настройка PHP, поэтому находим этот параметр и делаем два изменения убираем символ коментирования (;) и меняем значение параметра на «0». Как показано ниже:
1 |
cgi.fix_pathinfo=0 |
Сохраняем изменения и закрываем файл, когда все готово.
После этого нам нужно перезапустить php выполнив следующую команду:
1 |
sudo service php7.0-fpm restart |
Изменения будут применены.
Шаг № 4 Настраиваем Nginx на использование PHP
Все нужные компоненты установлены. Настраиваем Nginx на использование динамического контента PHP
Вносим изменения в группу по умолчанию сервер блока(директива server) Nginx:
1 |
sudo nano /etc/nginx/sites-available/default |
По умолчанию server блок Nginx выглядит следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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
после первого значения. - Изменяем значение
server_name
на домен сервера или публичный IP address. - Для PHP, раскоментируем сегмент для PHP запросов. Это будут
location ~\.php$
location block, the includedfastcgi-php.conf
snippet, и сокеты связаные сphp-fpm
. - Также нужно раскомментировать блок location для файлов .htaccess. Сервер Nginx не обрабатывает эти файлы; если один из этих файлов попадёт в document root, его нельзя отображать пользователям.
Внесенные изменения выделены красным цветом:
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;
}
}
После внесения всех изменений сохраняем и закрываем файл.
Проверяем настройки nginx на синтаксические ошибки командой:
1 |
nginx -t |
Если ошибок нету, то увидим результат:
1 2 |
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful |
Перезапускаем Nginx:
1 |
sudo service nginx restart |
Шаг № 5 Создание PHP файла для проверки конфигурации
LEMP стек настрое ни готов к работе. Проверим Nginx на корректную работу с PHP.
Для этого создадим файл test.php в корневом каталоге веб сервера:
1 |
sudo nano /var/www/html/test.php |
Добавим в файл следующий php код:
1 2 3 4 5 |
<?php phpinfo(); ?> |
Сохраняем и закрываем файл.
В браузере вводим:
1 |
http://server_domain_or_IP/test.php |
Если все сделано правильно, мы увидим страницу созданную php с информацией о сервер:
Если вы увидели страницу похожую на эту, значит ваш LEMP стек готов и PHP c Nginx работают нормально. Удалите файл с сервера командой:
1 |
sudo rm /var/www/html/test.php |
В итоге мы получили настроенный LEMP стек на Ubuntu 16.04 server. Это дает огромные возможности для размещения своих веб ресурсов в интернете и предоставления информации пользователям.