Установка LEMP Stack (Nginx, MariaDB, PHP) на Ubuntu 18.04 LTS

В этой статье описано как установить Nginx, MariaDB, PHP (стек LEMP) в минимальной версии сервера Ubuntu 18.04 LTS. LEMP является акронимом Linux, Engine, MariaDB/MySQL, PHP/Perl/Python. Я буду использовать следующий тестовый компьютер:

  • Операционная система : Ubuntu 18.04 LTS Server
  • IP-адрес : 172.16.10.5/27

Приступим:

Установка LEMP Stack (Nginx, MariaDB, PHP) на Ubuntu 18.04 LTS

1. Установка Nginx

Откройте терминал и выполните следующую команду для установки веб-сервера Nginx:

$ sudo apt install nginx

После установки Nginx проверьте, работает ли служба Nginx или нет, используя команду:

$ sudo systemctl status nginx

Пример вывода:

● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2018-09-23 00:01:09 MSK; 1 day 16h ago
     Docs: man:nginx(8)
  Process: 1108 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=
  Process: 989 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited,
 Main PID: 1114 (nginx)
    Tasks: 5 (limit: 4915)
   CGroup: /system.slice/nginx.service
           ├─1114 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           ├─1115 nginx: worker process
           ├─1116 nginx: worker process
           ├─1117 nginx: worker process
           └─1118 nginx: worker process

Если вы видите такой вывод, как описано выше, служба Nginx запущена.

Если Nginx не запущен, вы можете запустить его с помощью команды:

sudo systemctl start nginx

1.1. Настройка firewall для работы веб-сервера Nginx.

По умолчанию веб-сервер Nginx недоступен из вне, если у вас включён брандмауэр UFW в Ubuntu 18.04 LTS. Вы должны разрешить трафик http и https через UFW, выполнив следующие шаги.

Сначала давайте посмотрим, какие профили приложений есть в UFW с помощью команды:

$ sudo ufw app list
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH

Как вы можете видеть, профили приложений Nginx и OpenSSH имеются в UFW.

Если посмотреть профиль «Nginx Full», то можно увидеть, что он обеспечивает трафик для портов 80 и 443:

$ sudo ufw app info "Nginx Full"
Profile: Nginx Full
Title: Web Server (Nginx, HTTP + HTTPS)
Description: Small, but very powerful and efficient web server

Ports:
80,443/tcp

Запустите следующую команду, чтобы разрешить входящий трафик HTTP и HTTPS для этого профиля:

$ sudo ufw allow in "Nginx Full"
Rules updated
Rules updated (v6)

Если вы хотите разрешить только трафик http (80), выполните:

$ sudo ufw app info "Nginx HTTP"

Давайте продолжим и запустим тестовую страницу Nginx.

Для этого откройте свой веб-браузер и перейдите по адресу http://localhost/ или http://IP-адрес/

Вы увидите страницу, как показано ниже.

Сервер Nginx работает!

2. Установка MariaDB

MariaDB является заменой сервера базы данных MySQL.

Для того чтобы установить его, запустите:

$ sudo apt install mariadb-server mariadb-client

Версия MariaDB в официальных репозиториях Ubuntu может быть устаревшей. Если вы хотите установить последнюю версию MariaDB, добавьте официальный репозиторий MariaDB для Ubuntu и установите его.

Сначала добавьте репозиторий MariaDB и импортируйте ключ, как показано ниже.

$ sudo apt-get install software-properties-common
$ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8 
$ sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://sgp1.mirrors.digitalocean.com/mariadb/repo/10.3/ubuntu bionic main'

После добавления репозитория запустите следующие команды для установки MariaDB.

  $ sudo apt update
  $ sudo apt install mariadb-server 

Проверьте, работает ли служба MariaDB или нет, используя команду:

$ sudo systemctl status mysql

Пример вывода:

● mariadb.service - MariaDB database server
   Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2018-09-23 00:01:14 MSK; 1 day 17h ago
  Process: 1427 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code
  Process: 1410 ExecStartPost=/etc/mysql/debian-start (code=exited, status=0/SUCCESS)
  Process: 1207 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`/usr
  Process: 1109 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=
  Process: 990 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=ex
 Main PID: 1323 (mysqld)
   Status: "Taking your SQL requests now..."
    Tasks: 31 (limit: 4915)
   CGroup: /system.slice/mariadb.service
           └─1323 /usr/sbin/mysqld

Mysql работает!

2.1. Установка пароля административного пользователя (root).

Во время установки MariaDB он установит пароль для учетной записи администратора (root).

При попытке настроить пароль вручную, используя команду:

$ mysql_secure_installation

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

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
 SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Enter current password for root (enter for none):

Чтобы устранить эту проблему, войдите в систему как администратор базы данных MySQL, используя команду:

$ sudo mysql -u root

После входа в MySQL запустите следующие команды одну за другой:

use mysql;

update user set plugin='' where User='root';

flush privileges;

\q

И теперь вы можете установить пароль администратора базы данных root с помощью команды:

$ mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
 SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): # Нажмите ENTER
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] # Нажмите ENTER
New password: # Введите пароль
Re-enter new password: # Повторите пароль
Password updated successfully!
Reloading privilege tables..
 ... Success!

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB 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? [Y/n] # Нажмите ENTER
 ... Success!

Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] # Нажмите ENTER
 ... Success!

By default, MariaDB 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? [Y/n] # Нажмите ENTER
 - Dropping test database...
ERROR 1008 (HY000) at line 1: Can't drop database 'test'; database doesn't exist
 ... Failed! Not critical, keep moving...
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] # Нажмите ENTER
 ... Success!

Cleaning up...

All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.

Вот и все. Пароль для учетной записи администратора базы данных root установлен.

3. Установка PHP

Чтобы установить PHP, запустите:

$ sudo apt-get install php-fpm php-mysql

После установки PHP нам нужно внести некоторые изменения в конфиг.

Для этого отредактируйте файл php.ini:

$ sudo nano /etc/php/7.2/fpm/php.ini

Найдите следующую строку:

;cgi.fix_pathinfo=1

Раскомментируйте её и измените значение 1 на 0 (ноль) .

cgi.fix_pathinfo=0

Сохраните и закройте файл. Затем перезапустите службу PHP-FPM, чтобы применить изменения.

$ sudo systemctl restart php7.2-fpm

Проверьте, работает ли служба PHP-FPM или нет:

$ sudo systemctl status php7.2-fpm

Пример вывода:

● php7.2-fpm.service - The PHP 7.2 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php7.2-fpm.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2018-09-23 00:01:09 MSK; 1 day 18h ago
     Docs: man:php-fpm7.2(8)
 Main PID: 1051 (php-fpm7.2)
   Status: "Processes active: 0, idle: 3, Requests: 2609, slow: 0, Traffic: 0.1req/sec"
    Tasks: 4 (limit: 4915)
   CGroup: /system.slice/php7.2-fpm.service
           ├─ 1051 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
           ├─ 3219 php-fpm: pool www
           ├─ 4851 php-fpm: pool www
           └─10952 php-fpm: pool www

3.1 Настройка Nginx для использования PHP-FPM

Нам нужно настроить Nginx на использование PHP-FPM.

Для этого отредактируйте /etc/nginx/sites-available/default:

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

Найдите раздел «server» и укажите полное доменное имя или IP-адрес сервера Ubuntu, как показано ниже. Кроме того, дважды проверьте, добавлен ​​ли index.php в параметр index:

[...]
server {
 listen 80 default_server;
 listen [::]:80 default_server;

[...]

root /var/www/html;

 # Add index.php to the list if you are using PHP
 index index.php index.html index.htm index.nginx-debian.html;

 server_name 172.16.10.5;
[...]

Давайте посмотрим, что означает каждая строка.

  • listen 80; — слушать ipv4 на 80 порту
  • listen [::]:80 default_server ; –> слушать ipv6 на 80 порту
  • root /var/www/html; –> Корневой каталог сайта Nginx
  • server_name 172.16.10.5; –> Полное доменное имя сервера Ubuntu или его IP адрес.

Затем найдите секцию #location ~ \.php$

Замените строки этой секции, как показано ниже.

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

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

Обратите особое внимание при изменении директивы fastcgi_pass в блоке ~ \ .php $ . Вы должны указать правильный файл, который фактически хранится в каталоге /run/php на вашем сервере. Чтобы проверить его, запустите:

$ ls /run/php/
php7.2-fpm.pid php7.2-fpm.sock

Как вы можете видеть, имя файла php7.2-fpm.sock , а не php7.0-fpm.sock , и это то, что указано в директиве ~ \ .php$ . Убедитесь, что вы указали правильное имя в этой директиве.

Проверьте конфигурационный файл Nginx на наличие синтаксических ошибок с помощью команды:

$ sudo nginx -t

Пример вывода:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Если ошибок нет, перезапустите службу nginx, чтобы изменения вступили в силу.

Для этого запустите:

$ sudo systemctl restart nginx

Теперь создадим PHP-файл для проверки конфигурации PHP через браузер.

Для этого создайте файл с именем info.php в корневой папке сайта Nginx.

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

Добавьте следующие строки:

<?php
phpinfo();
?>

Сохраните и закройте файл. Перезапустите службу nginx, чтобы применить изменения.

Затем откройте веб-браузер и перейдите по адресу http://IP-адрес/info.php

Вы увидите страницу с информацией о PHP.

Поздравляем! PHP работает!

3.2. Установка модулей PHP

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

Чтобы просмотреть доступные модули PHP, запустите:

$ sudo apt-cache search php- | less

Пример вывода:

Используйте и стрелки для перемещения вверх и вниз. Чтобы выйти из просмотра, нажмите q.

Чтобы посмотреть сведения о конкретном модуле php, например php-gd , выполните:

$ sudo apt-cache show php-gd

Чтобы установить модуль php:

$ sudo apt-get install php-gd

А для того чтобы установить все модули (не обязательно), запустите:

$ sudo apt-get install php*

Не забудьте перезапустить службу Nginx после установки любого php-модуля.

Поздравляем! Мы успешно установили LEMP-stack на сервере Ubuntu 18.04 LTS. Начните развертывание веб-сайтов и веб-приложений в новом веб-стеке LEMP.

На этом всё !

Оставьте комментарий