Краткое руководство по быстрой установке и настройке веб-сервера в связке 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;
а также пути к сертификатам сайтов.