Краткая инструкция по быстрой установке и настройке веб-сервера в связке Debian GNU/Linux 10.10 или Ubuntu Server 21.04, Apache HTTP Server, PHP и MariaDB (MySQL).
Установка сервера баз данных
Для начала необходимо установить MariaDB (MySQL) сервер. В подавляющем большинстве веб-сайтов это — один из главных шагов, без которого нет смысла запускать проект.
Ниже приведены несколько команд, которые помогут запустить сервер БД на начальном этапе:
# apt install mariadb-client mariadb-server # /usr/bin/mysql_secure_installation # systemctl status mariadb
Состояние должно быть в активном режиме.
Более подробно об установке сервера БД MariaDB (MySQL) можно почитать здесь: https://dondub.com/2021/05/zapusk-subd-mariadb-na-debian-10-9-i-ubuntu-server-21-04/
Установка веб-сервера
Теперь необходимо установить Apache HTTP Server
# apt install apache2
Возможно, в Ubuntu Server понадобится ещё установить пакет apache2-ssl
Проверяем состояние
# sudo systemctl status apache2
Состояние должно быть в активном режиме.
На другой машине в сети открываем браузер и в адресной строке впишем адрес сервера:
http://IP-адрес-сервера
Должна отображаться страница по умолчанию.
Для активации SSL необходимо включить модуль ssl и активировать соответствующую страницу по умолчанию
# sudo /usr/sbin/a2enmod ssl # sudo /usr/sbin/a2ensite default-ssl
Далее перезапускаем службу apache2
# systemctl restart apache2
Возвращаемся на другую машину в сети в браузер и проверяем работу SSL
Должна отображаться такая же страница по умолчанию
Если страница отображается, значит всё сделано правильно.
Установка PHP
Пришло время установить интерпретатор PHP
# apt install php php-common php-gd php-mysql php-pgsql php-xml php-mbstring
После установки перезапускаем службу apache2
# systemctl restart apache2
Проверяем.
В директории /var/www/html создадим файл info.php и откроем его
# touch /var/www/html/info.php # nano /var/www/html/info.php
в него впишем:
<?php phpinfo(); ?>
Затем на другой машине в сети в адресной строке браузера откроем страницу http://IP-адрес-сервера/info.php или https://IP-адрес-сервера/info.php и должны увидеть страницу с отображением информации о PHP:
Настройка виртуальных хостов
Перед созданием виртуальных хостов необходимо убедиться в наличии соответствующих A или AAAA записей на DNS-сервере. Эти записи создаются в личном кабинете в панели управления регистратора доменных имён, или на собственном DNS-сервере https://dondub.com/tag/nameserver/.
Создадим директории для хранения файлов сайтов ws30.local и test.ws30.local
# mkdir /var/www/ws30.local /var/www/ws30.local/html /var/www/test.ws30.local /var/www/test.ws30.local/html
и создадим соответствующие файлы конфигураций для обычных сайтов и SSL
# cd /etc/apache2/sites-available/ # touch ws30.local.conf ws30.local.ssl.conf test.ws30.local.conf test.ws30.ssl.local
Теперь откроем файл для сайта ws30.local
# nano ws30.local.conf
и впишем в него:
<VirtualHost *:80> ServerName www.ws30.local ServerAlias ws30.local ServerAdmin webmaster@localhost DocumentRoot /var/www/ws30.local/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
затем SSL для него же:
# nano ws30.local.ssl.conf
<IfModule mod_ssl.c> <VirtualHost *:443> ServerAdmin webmaster@localhost ServerName www.ws30.local ServerAlias ws30.local DocumentRoot /var/www/ws30.local/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> </VirtualHost> </IfModule>
а также для test.ws30.local
# nano test.ws30.local.conf
<VirtualHost *:80> ServerName test.ws30.local ServerAlias test.ws30.local ServerAdmin webmaster@localhost DocumentRoot /var/www/test.ws30.local/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
# nano test.ws30.local.ssl.conf
<IfModule mod_ssl.c> <VirtualHost *:443> ServerAdmin webmaster@localhost ServerName test.ws30.local ServerAlias test.ws30.local DocumentRoot /var/www/test.ws30.local/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> </VirtualHost> </IfModule>
Затем включаем эти сайты
# /usr/sbin/a2ensite ws30.local # /usr/sbin/a2ensite ws30.local.ssl # /usr/sbin/a2ensite test.ws30.local # /usr/sbin/a2ensite test.ws30.local.ssl
и перезапускаем службу apache2
# systemctl reload apache2
Проверяем:
http://ws30.local
https://ws30.local
http://test.ws30.local
https://test.ws30.local
Подключение SSL сертификатов
Один из самых эффективных способов настройки SSL-сертификатов — это через специализированные сервисы. Например — Certbot. Там находится инструкция по установке и настройке сертификатов.
для Debian 10: https://certbot.eff.org/lets-encrypt/debianbuster-apache
для Ubuntu Server: https://certbot.eff.org/lets-encrypt/ubuntufocal-apache