Поиск по сайту:

Как установить Linux, Nginx, MySQL, PHP (стек LEMP) в Ubuntu 16.04


Введение

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

В этом руководстве мы покажем, как установить стек LEMP на сервер Ubuntu 16.04. Операционная система Ubuntu отвечает первому требованию. Мы опишем, как настроить и запустить остальные компоненты.

Предпосылки

Прежде чем приступить к выполнению этого руководства, у вас должна быть обычная учетная запись пользователя без полномочий root на вашем сервере с привилегиями sudo. Вы можете узнать, как настроить этот тип учетной записи, выполнив начальную настройку сервера Ubuntu 16.04.

Как только ваш пользователь будет доступен, войдите на свой сервер с этим именем пользователя. Теперь вы готовы приступить к шагам, описанным в этом руководстве.

Шаг 1: Установите веб-сервер Nginx

Чтобы отображать веб-страницы для посетителей нашего сайта, мы собираемся использовать Nginx, современный и эффективный веб-сервер.

Все программное обеспечение, которое мы будем использовать для этой процедуры, будет получено непосредственно из репозиториев пакетов Ubuntu по умолчанию. Это означает, что мы можем использовать пакет управления пакетами apt для завершения установки.

Поскольку мы впервые используем apt для этого сеанса, мы должны начать с обновления нашего локального индекса пакетов. Затем мы можем установить сервер:

  1. sudo apt-get update
  2. sudo apt-get install nginx

В Ubuntu 16.04 Nginx настроен на запуск после установки.

Если у вас запущен брандмауэр ufw, как указано в нашем руководстве по начальной настройке, вам необходимо разрешить подключения к Nginx. Nginx регистрируется в ufw при установке, поэтому процедура довольно проста.

Рекомендуется включить наиболее строгий профиль, который по-прежнему будет разрешать нужный трафик. Поскольку мы еще не настроили SSL для нашего сервера, в этом руководстве нам нужно будет разрешить трафик только через порт 80.

Вы можете включить это, набрав:

  1. sudo ufw allow 'Nginx HTTP'

Вы можете проверить изменение, набрав:

  1. sudo ufw status

Вы должны увидеть разрешенный HTTP-трафик в отображаемом выводе:

Output
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-адрес вашего сервера, вы можете найти его, введя в терминал одно из следующих действий:

  1. ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Это распечатает несколько IP-адресов. Вы можете попробовать каждый из них по очереди в своем веб-браузере.

В качестве альтернативы вы можете проверить, какой IP-адрес доступен для просмотра из других мест в Интернете:

  1. curl -4 icanhazip.com

Введите один из полученных адресов в веб-браузере. Вы должны перейти на целевую страницу Nginx по умолчанию:

http://server_domain_or_IP

Если вы видите страницу выше, вы успешно установили Nginx.

Шаг 2: Установите MySQL для управления данными сайта

Теперь, когда у нас есть веб-сервер, нам нужно установить MySQL, систему управления базами данных, для хранения и управления данными нашего сайта.

Вы можете легко установить это, набрав:

  1. sudo apt-get install mysql-server

Вам будет предложено ввести пароль root (административный) для использования в системе MySQL.

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

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

  1. mysql_secure_installation

Вам будет предложено ввести пароль, который вы установили для корневой учетной записи MySQL. Далее вас спросят, хотите ли вы настроить ПЛАГИН ПРОВЕРКИ ПАРОЛЯ.

Предупреждение. Включение этой функции требует решения. Если этот параметр включен, пароли, не соответствующие указанным критериям, будут отклонены MySQL с ошибкой. Это вызовет проблемы, если вы используете слабый пароль в сочетании с программным обеспечением, которое автоматически настраивает учетные данные пользователя MySQL, таким как пакеты Ubuntu для 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 для обработки

Теперь у нас установлен Nginx для обслуживания наших страниц и MySQL для хранения и управления нашими данными. Однако у нас по-прежнему нет ничего, что могло бы генерировать динамический контент. Мы можем использовать PHP для этого.

Поскольку Nginx не содержит встроенной обработки PHP, как некоторые другие веб-серверы, нам нужно будет установить php-fpm, что означает «менеджер процессов fastCGI». Мы укажем Nginx передавать PHP-запросы этому софт для обработки.

Мы можем установить этот модуль, а также получить дополнительный вспомогательный пакет, который позволит PHP взаимодействовать с нашей базой данных. При установке будут загружены необходимые файлы ядра PHP. Сделайте это, набрав:

  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, что нужно попытаться выполнить ближайший файл, который он может найти, если запрошенный файл PHP не может быть найден. По сути, это позволит пользователям создавать PHP-запросы таким образом, чтобы они могли выполнять сценарии, выполнение которых им не должно быть разрешено.

Мы изменим оба этих условия, раскомментировав строку и установив для нее значение «0» следующим образом:

cgi.fix_pathinfo=0

Сохраните и закройте файл, когда закончите.

Теперь нам просто нужно перезапустить наш PHP-процессор, набрав:

  1. sudo systemctl restart php7.0-fpm

Это реализует сделанное нами изменение.

Шаг 4. Настройте Nginx для использования процессора PHP

Теперь у нас установлены все необходимые компоненты. Единственное изменение конфигурации, которое нам все еще нужно, — это указать Nginx использовать наш PHP-процессор для динамического контента.

Мы делаем это на уровне блоков серверов (блоки серверов аналогичны виртуальным хостам Apache). Откройте файл конфигурации блока сервера Nginx по умолчанию, набрав:

  1. 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.
  • Мы также раскомментируем блок местоположения, относящийся к файлам .htaccess, используя тот же метод. Nginx не обрабатывает эти файлы. Если какой-либо из этих файлов окажется в корневом каталоге документа, он не должен показываться посетителям.

Изменения, которые необходимо внести, выделены красным в тексте ниже:

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;
    }
}

Когда вы внесли вышеуказанные изменения, вы можете сохранить и закрыть файл.

Проверьте файл конфигурации на наличие синтаксических ошибок, набрав:

  1. sudo nginx -t

Если сообщается о каких-либо ошибках, вернитесь и перепроверьте файл, прежде чем продолжить.

Когда будете готовы, перезагрузите Nginx, чтобы внести необходимые изменения:

  1. sudo systemctl reload nginx

Шаг 5: Создайте файл PHP для проверки конфигурации

Теперь ваш стек LEMP должен быть полностью настроен. Мы можем протестировать его, чтобы убедиться, что Nginx может правильно передавать файлы .php нашему PHP-процессору.

Мы можем сделать это, создав тестовый файл PHP в корне нашего документа. Откройте новый файл с именем info.php в корне документа в текстовом редакторе:

  1. sudo nano /var/www/html/info.php

Введите или вставьте следующие строки в новый файл. Это корректный PHP-код, который вернет информацию о нашем сервере:

<?php
phpinfo();

Когда вы закончите, сохраните и закройте файл.

Теперь вы можете посетить эту страницу в своем веб-браузере, посетив доменное имя вашего сервера или общедоступный IP-адрес, а затем /info.php:

http://server_domain_or_IP/info.php

Вы должны увидеть сгенерированную PHP веб-страницу с информацией о вашем сервере:

Если вы видите страницу, которая выглядит так, вы успешно настроили обработку PHP с помощью Nginx.

Убедившись, что Nginx правильно отображает страницу, лучше всего удалить созданный вами файл, так как он фактически может дать неавторизованным пользователям некоторые подсказки о вашей конфигурации, которые могут помочь им попытаться взломать. Вы всегда можете восстановить этот файл, если он вам понадобится позже.

А пока удалите файл, набрав:

  1. sudo rm /var/www/html/info.php

Заключение

Теперь у вас должен быть настроен стек LEMP на вашем сервере Ubuntu 16.04. Это дает вам очень гибкую основу для предоставления веб-контента вашим посетителям.