Запуск LEMP-сервера на Ubuntu Server

Краткое руководство по быстрой установке и настройке веб-сервера в связке Ubuntu Server 21.04, HTTP-сервер nginx, PHP и MariaDB (MySQL).

Установка сервера баз данных

Для начала необходимо установить MariaDB (MySQL) сервер. В подавляющем большинстве веб-сайтов это — один из главных шагов, без которого нет смысла запускать проект.

Ниже приведены несколько команд, которые помогут запустить сервер БД на начальном этапе:

# sudo apt install mariadb-client mariadb-server 
# sudo /usr/bin/mysql_secure_installation
# sudo systemctl status mariadb

Состояние должно быть в активном режиме.

Более подробно об установке сервера БД MariaDB (MySQL) можно почитать здесь: https://dondub.com/2021/05/zapusk-subd-mariadb-na-debian-10-9-i-ubuntu-server-21-04/

Установка HTTP-сервера nginx, PHP и php-fpm

Устанавливаем nginx и проверяем его статус

# sudo apt install nginx
# sudo systemctl status nginx

Состояние должно быть в активном режиме.

Проверяем.

На другой машине в сети в адресной строке браузера вводим http://IP-адрес-сервера

Должна появиться страница по умолчанию Apache…

Страница по умолчанию nginx спрятана по адресу http://IP-адрес-сервера/index.nginx-debian.html 🙂

Теперь устанавливаем PHP 7.4 с расширениями и php-fpm

# sudo apt install php php-common php-gd php-mysql php-xml php-mbstring php-fpm

Проверяем статус службы php7.4-fpm

# sudo systemctl status php7.4-fpm

Служба должна быть активна и работать.

В Ubuntu Server вместе с PHP обычно подтягивается и Apache. Проверим, не запущена ли служба apache2

# sudo systemctl status apache2

если запущена, то останавливаем её и удаляем с автозагрузки

# sudo systemctl stop apache2
# sudo systemctl disable apache2

Настройка виртуальных хостов nginx

Перед созданием виртуальных хостов необходимо убедиться в наличии соответствующих A или AAAA записей на DNS-сервере. Эти записи создаются в личном кабинете в панели управления регистратора доменных имён, или на собственном DNS-сервере https://dondub.com/tag/nameserver/

Далее создадим необходимые каталоги для хранения файлов сайтов

# sudo mkdir /var/www/{ws40.local,test.ws40.local}/

После этого создадим файлы конфигураций сайтов ws40.local и test.ws40.local и в них впишем:

# sudo touch /etc/nginx/sites-available/ws40.local
# sudo nano /etc/nginx/sites-available/ws40.local
server {
        listen 80;
        root /var/www/ws40.local/;
        server_name ws40.local;

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                try_files $uri =404;
                include /etc/nginx/fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_pass unix:/run/php/php7.4-fpm.sock;
                fastcgi_index index.php;
        }

}
# sudo touch /etc/nginx/sites-available/test.ws40.local
# sudo nano /etc/nginx/sites-available/test.ws40.local
server {
        listen 80;
        root /var/www/test.ws40.local/;
        server_name test.ws40.local;

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                try_files $uri =404;
                include /etc/nginx/fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_pass unix:/run/php/php7.4-fpm.sock;
                fastcgi_index index.php;
        }

}

Для активации сайтов создадим символические ссылки в каталоге /etc/nginx/sites-enabled/

# sudo ln -s /etc/nginx/sites-available/ws40.local /etc/nginx/sites-enabled/
# sudo ln -s /etc/nginx/sites-available/test.ws40.local /etc/nginx/sites-enabled/

Проверяем конфиг

# sudo /usr/sbin/nginx -t

если всё нормально, то перезапускаем службу nginx

# sudo systemctl restart nginx

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

# sudo touch /var/www/ws40.local/index.html
# sudo nano /var/www/ws40.local/index.html
<html>
<head>
        <title>ws40.local start page</title>
</head>
<body>
        <p align="center">Welcome to ws40.local</p>
</body>
</html>
# sudo touch /var/www/test.ws40.local/index.html
# sudo nano /var/www/test.ws40.local/index.html
<html>
<head>
        <title>test.ws40.local start page</title>
</head>
<body>
        <p align="center">Welcome to test.ws40.local</p>
</body>
</html>

Настройка PHP 7.4 и php-fpm

Открываем файл /etc/php/7.4/fpm/php.ini

# sudo nano /etc/php/7.4/fpm/php.ini

и после закомментированной строки

;cgi.fix_pathinfo=1

запишем такую:

cgi.fix_pathinfo=0

Перезапускаем службу php7.4-fpm

# sudo systemctl restart php7.4-fpm

и на всякий случай nginx

# sudo systemctl restart nginx

Теперь проверим работу PHP на сайте test.ws40.local. Для этого создадим файл /var/www/test.ws40.local/info.php

# sudo touch /var/www/test.ws40.local/info.php

откроем его

# sudo nano /var/www/test.ws40.local/info.php

и впишем такие строчки:

<?php
	phpinfo();
?>

Проверяем. На другой машине в сети в адресной строке браузера введём:

http://test.ws40.local/info.php

Должна появиться страница с информацией о настройках PHP на сервере:

Подключение SSL-сертификатов

Один из самых эффективных способов настройки SSL-сертификатов — это через специализированные сервисы. Например — Certbot — https://certbot.eff.org/lets-encrypt/ubuntufocal-nginx

Там находится инструкция по установке и настройке сертификатов для Ubuntu Server 20.04, но для версии 21.04 тоже подойдёт.

В файлах виртуальных хостов в секции server необходимо будет вписать прослушивание 443 порта:

listen 443;

а также пути к сертификатам сайтов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *