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

Установите Nginx, MariaDB, PHP (стек LEMP) на сервер Ubuntu 18.04 LTS.

В нашем предыдущем руководстве мы обсуждали, как установить стек LAMP на сервере Ubuntu 18.04 LTS. В этом руководстве мы увидим, как установить Nginx, MariaDB, PHP (стек LEMP) в минимальной серверной версии Ubuntu 18.04 LTS. Как я упоминал в предыдущем уроке, LEMP — это аббревиатура Linux, Engine-x, MariaDB/M. ySQL, PHP/Perl/Python. Для целей этого урока я буду использовать следующую тестовую машину:

  • Операционная система: сервер Ubuntu 18.04 LTS.
  • IP-адрес: 192.168.225.22/24

Давайте начнем.

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

1. Установите Нгинкс

Откройте терминал и выполните следующую команду, чтобы установить веб-сервер 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 Sat 2018-07-07 12:10:05 UTC; 57s ago
Docs: man:nginx(8)
Process: 1846 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Process: 1833 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 1849 (nginx)
Tasks: 2 (limit: 2322)
CGroup: /system.slice/nginx.service
├─1849 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─1851 nginx: worker process

Jul 07 12:10:05 ubuntuserver systemd[1]: Starting A high performance web server and a reverse proxy server...
Jul 07 12:10:05 ubuntuserver systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Jul 07 12:10:05 ubuntuserver systemd[1]: Started A high performance web server and a reverse proxy server.

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

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

sudo systemctl start nginx

1.1 Настройте брандмауэр, чтобы разрешить веб-сервер Nginx

По умолчанию доступ к веб-браузеру Nginx из удаленных систем невозможен, если вы включили брандмауэр UFW в Ubuntu 18.04 LTS. Вы должны разрешить трафик http и https через 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)

Если вы хотите разрешить трафик https, но только трафик 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.linux-console.net/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 Sat 2018-07-07 12:15:13 UTC; 2min 57s ago
Main PID: 3428 (mysqld)
Status: "Taking your SQL requests now..."
Tasks: 27 (limit: 2322)
CGroup: /system.slice/mariadb.service
└─3428 /usr/sbin/mysqld

Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: mysql
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: performance_schema
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: Phase 6/7: Checking and upgrading tables
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: Processing databases
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: information_schema
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: performance_schema
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: Phase 7/7: Running 'FLUSH PRIVILEGES'
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3465]: OK
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3534]: Checking for insecure root accounts.
Jul 07 12:15:14 ubuntuserver /etc/mysql/debian-start[3538]: Triggering myisam-recover for all MyISAM tables and aria-recover for all Aria tables

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

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

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): # Press 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] # Press ENTER
New password: # Enter password
Re-enter new password: # Re-enter 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] # Press 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] # Press 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] # Press 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] # Press ENTER
 ... Success!

Cleaning up...

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

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

3. Установите PHP

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

sudo apt-get install php-fpm php-mysql

После установки PHP нам нужно защитить его, выполнив простое изменение.

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

sudo vi /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 Sat 2018-07-07 12:23:46 UTC; 7s ago
Docs: man:php-fpm7.2(8)
Main PID: 11005 (php-fpm7.2)
Status: "Ready to handle connections"
Tasks: 3 (limit: 2322)
CGroup: /system.slice/php7.2-fpm.service
├─11005 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
├─11018 php-fpm: pool www
└─11019 php-fpm: pool www

Jul 07 12:23:46 ubuntuserver systemd[1]: Starting The PHP 7.2 FastCGI Process Manager...
Jul 07 12:23:46 ubuntuserver systemd[1]: Started The PHP 7.2 FastCGI Process Manager.

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

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

Для этого отредактируйте файл виртуального хоста Nginx по умолчанию (блок сервера) /etc/nginx/sites-available/default :

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

Найдите раздел «Сервер» и установите полное доменное имя или IP-адрес вашего сервера Ubuntu, как показано ниже. А также дважды проверьте, добавили ли вы строку index.php. Все изменения показаны жирным шрифтом.

[...]
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 192.168.225.22;
[...]

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

  • слушать 80; –> слушать ipv4.
  • слушать [::]:80 default_server ; –> слушать ipv6.
  • корневой каталог /var/www/html; –> корневой каталог документа Nginx.
  • имя_сервера 192.168.225.22; –> IP-адрес нашего сервера Ubuntu.

Затем прокрутите немного вниз и найдите раздел #location ~ \.php$.

Раскомментируйте и измените следующие строки, как показано ниже.

location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
# With php-cgi (or other tcp sockets):
fastcgi_pass 127.0.0.1:9000;
}
deny access to .htaccess files, if Apache's document root
 # concurs with nginx's one
 #
 location ~ /\.ht {
 deny all;
 }
}

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

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

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

Как видите, имя файла — php7.2-fpm.sock, а не php7.0-fpm.sock, как указано в в разделе < Strong>location ~ \.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 vi /var/www/html/info.php

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

<?php
phpinfo();
?>

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

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

Вы увидите подробную информацию о PHP.

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

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

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

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

sudo apt-cache search php- | less

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

Поиск модулей PHP

Используйте стрелки и для перемещения вверх и вниз между результатами. Чтобы выйти из результата, введите 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 на сервере Ubuntu 18.04 LTS. Начните развертывать веб-сайты и веб-приложения в своем новом веб-стеке LEMP.

Ваше здоровье!

Статьи по данной тематике