Запуск LAMP-сервера на Debian 10.10 и Ubuntu Server 21.04

Краткая инструкция по быстрой установке и настройке веб-сервера в связке 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

https://IP-адрес-сервера

Должна отображаться такая же страница по умолчанию

Если страница отображается, значит всё сделано правильно.

Установка 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

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

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