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

Вступление

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

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

Предпосылки

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

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

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

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

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

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

sudo apt-get update
sudo apt-get install nginx

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

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

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

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

sudo ufw allow 'Nginx HTTP'

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

sudo ufw status

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

OutputStatus: 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-адресов. Вы можете попробовать каждый из них по очереди в вашем веб-браузере.

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

curl -4 icanhazip.com

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

http://server_domain_or_IP

Nginx default page

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

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

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

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

sudo apt-get install mysql-server

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

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

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

mysql_secure_installation

Вам будет предложено ввести пароль, установленный для учетной записи root MySQL. Затем вас спросят, хотите ли вы настроитьVALIDATE PASSWORD PLUGIN.

[.warning] #Warning: Включение этой функции - это своего рода вызов для суждения. Если этот параметр включен, пароли, не соответствующие указанным критериям, будут отклоняться 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

Если вы включили проверку пароля, вам покажут надежность пароля для существующего корневого пароля и спросят, хотите ли вы изменить этот пароль. Если вас устраивает текущий пароль, введите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. Сделайте это, набрав:

sudo apt-get install php-fpm php-mysql

Настройте процессор PHP

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

Откройте основной файл конфигурацииphp-fpm с правами root:

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

В этом файле мы ищем параметр, устанавливающийcgi.fix_pathinfo. Это будет закомментировано точкой с запятой (;) и будет установлено в «1» по умолчанию.

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

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

/etc/php/7.0/fpm/php.ini

cgi.fix_pathinfo=0

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

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

sudo systemctl restart php7.0-fpm

Это осуществит изменение, которое мы сделали.

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

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

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

sudo nano /etc/nginx/sites-available/default

В настоящее время с удаленными комментариями файл блока сервера Nginx по умолчанию выглядит следующим образом:

/etc/nginx/sites-available/default

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

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

/etc/nginx/sites-available/default

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. Создание файла PHP для проверки конфигурации

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

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

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

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

/var/www/html/info.php

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

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

http://server_domain_or_IP/info.php

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

PHP page info

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

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

Сейчас удалите файл, набрав:

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

Заключение

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

Related