Установка LEMP стека (Linux, Nginx, MySQL, PHP) на Ubuntu 16.04

В статье рассмотрен процесс настройки LEMP-стека на VPS под управлением операционной системы Ubuntu 16.04.

Что такое LЕMP

LEMP - это аналог популярного стека LAMP, используемого для разработки и развертывания веб-приложений. Традиционно LAMP состоит из Linux, Apache, MySQL и PHP. Благодаря своей модульной природе компоненты легко могут быть заменены. В LEMP Apache заменяется легким, но мощным Nginx, который может обеспечить более предсказуемую производительность при высоких нагрузках.

Apache vs Nginx

Apache:

  • Разрабатывается с 1995 года, к нынешнему моменту имеет много пользователей, существует большое количество модулей (в основном с открытым исходным кодом), написанных для расширения его функциональности;
  • Процессы или поточно-ориентированный подход замедляют работу веб-сервера при большой нагрузке, необходимо создавать новые процессы и потреблять больше ОЗУ, а также создавать новые потоки, которые должны конкурировать за ресурсы ЦП и ОЗУ;
  • Должен быть установлен предел для обеспечения того, чтобы ресурсы не перегружались, когда предел достигнут, дополнительные соединения будут отклонены.

Nginx:

  • Веб-сервер с открытым исходным кодом, написанный для решения проблем производительности и масштабируемости, связанных с Apache;
  • Механизм nginx, управляемый событиями, асинхронный и неблокирующий, не создает новые процессы для каждого веб-запроса;

Установка Nginx

Чтобы поставить Nginx для LEMP вам необходимо подключиться к VPS с ОС Ubuntu и исполнить следующие команды:

sudo apt-get update
sudo apt-get install nginx

Чтобы проверить установку сервера nginx, перейдите в любом браузере по следующей ссылке, указав IP-адрес вашего VDS:

http://<ip-адрес_сервера>/
Например: http://5.101.77.24/

Примечание: если у вас не получается подключиться, проверьте настройки FireWall, веб-сервер Nginx по умолчанию работает на порту 80, чтобы добавить правило выполните следующую пару команд:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables-save

Welcome to nginx!


Как узнать IP-адрес сервера

Адрес сервера можно найти на вкладке «Состояние» страницы «Серверы» в панели управления.

Установка MySQL(MariaDB) на Ubuntu

MySQL — это система управления базами данных (СУБД), которая используется для организации и получения контента.

Сегодня в LEMP стеке MySQL заменяется на популярный аналог - MariaDB. MariaDB имеет те же возможности, что и MySQL, и при этом является полностью бесплатной.

Примечание: если вы предпочитаете использовать базу данных MySQL в Ubuntu или ваш проект работает именно с ней, вам нужно будет добавить необходимые репозитории и установить БД с помощью инструкции.

Установите пакеты из главного репозитория Ubuntu с помощью менеджера пакетов:

sudo apt-get install mariadb-server mariadb-client

После успешной установки выполните настройки безопасности и удалите некоторые значения по умолчанию. Приведите в действие скрипт:

sudo mysql_secure_installation

Здесь MariaDB попросит вас задать пароль супер-пользователя БД. Затем система попросит ответить на несколько вопросов (они служебные и на каждый из них без лишних проблем можно ответить Yes).

После этого конфигурирование базы данных завершено, и можно переходить к следующему шагу настройки LEMP стека — установке PHP.

Установка PHP на Ubuntu

Для установки компонента обработки программного кода PHP установите пакеты из главного репозитория с помощью менеджера пакетов:

sudo apt-get install php7.0-mysql php7.0-curl php7.0-json php7.0-cgi php7.0 libapache2-mod-php7.0 php7.0-xml

В процессе установки потребуется 1 или 2 раза ответить ‘Yes’ на вопросы системы.

Модули PHP

Для повышения функциональности LEMP вы можете дополнительно поставить некоторые модули php. Посмотреть список доступных библиотек можно с помощью команды:

apt-cache search php7

После этого система выдаст список, начало которого выглядит похожим образом:

libapache2-mod-php7.0 - server-side, HTML-embedded scripting language (Apache 2 module)
php-all-dev - package depending on all supported PHP development packages
php7.0 - server-side, HTML-embedded scripting language (metapackage)
php7.0-cgi - server-side, HTML-embedded scripting language (CGI binary)
php7.0-cli - command-line interpreter for the PHP scripting language
php7.0-common - documentation, examples and common module for PHP
php7.0-curl - CURL module for PHP
php7.0-dev - Files for PHP7.0 module development
php7.0-gd - GD module for PHP
php7.0-gmp - GMP module for PHP

Если вы решите установить какой-либо из модулей, то это можно сделать с помощью специальной команды:

sudo apt-get install <имя пакета>
Например: sudo apt-get install php7.0-gmp

Настройка Nginx для работы с PHP и MySQL

Для настройки связи между PHP и MySQL в LEMP стеке для nginx необходимо установить дополнительные модули и внести изменения в конфигурационный файл:

sudo apt-get install php-fpm php-mysql

С помощью текстового редактора, например vi, откройте файл конфигурации на редактирование:

sudo vi /etc/php/7.0/fpm/php.ini

Раскомментируйте (уберите символ “;” в начале строки) следующую переменную и присвойте ей значение 0:

cgi.fix_pathinfo = 0

Сохраните изменения и выйдите из текстового редактора.
Перезапустите модуль:

sudo systemctl restart php7.0-fpm

Настройка Nginx

С помощью текстового редактора, например vi, откройте файл конфигурации веб-сервера nginx:

sudo vi /etc/nginx/sites-available/default Добавьте значение index.php к параметру index в начало, чтобы в первую очередь искались файлы с расширением php: index index.php index.html index.htm index.nginx-debian.html;

В качестве значения параметра server_name укажите доменное имя или ip-адрес сервера:

server_name домен_или_IP_адрес;
Например: server_name 125.221.12.11

Раскомментируйте следующие строки, которые отвечают за обработку PHP-запросов в nginx:

location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.0-fpm.sock; } location ~ /\.ht { deny all; }

В итоге, содержимое должно выглядеть следующим образом:

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 домен_или_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:

service nginx restart

Запуск

Чтобы удостовериться в том, что LEMP поставлен без ошибок, можно создать test-page на VPS.

Создаем файл с нужным расширением:

vi /var/www/html/info.php

Внесите в него следующую строку и сохраните:

<?php phpinfo();?>

Затем сохранить и выйти.

Затем перейдите в браузере по следующей ссылке, указав IP-адрес вашего сервера: http://<IP-адрес_сервера>/info.php
Например: http://5.101.77.24/info.php

Ожидаемый результат:


PHP




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