Разворачиваем веб-сервер с поддержкой PHP и MySQL на Debian

Справочник системного администратора

В этом руководстве я расскажу как на операционной системе Debian или Ubuntu развернуть полноценный веб-сервер с поддержкой PHP и MySQL.

Вдаваться в тонкости установки операционной системы в данном руководстве мы не будем, полагаем у вас уже имеется установленный и рабочий экземпляр Debian или Ubuntu, далее приступаем к установке компонентов сервера.

Шаг 1. Установка веб-сервера Apache и утилит для его работы.

Выполняем в терминале команду:

sudo apt install apache2 apache2-utils

После установки Apache должен автоматически запуститься, проверим его работу командой:

systemctl status apache2

Мы должны будем получить следующий вывод:

● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2023-02-13 07:25:18 EST; 22h ago
Docs: https://httpd.apache.org/docs/2.4/
Process: 22151 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 22157 (/usr/sbin/apach)
Tasks: 10 (limit: 2294)
Memory: 108.8M
CPU: 7.113s
CGroup: /system.slice/apache2.service
├─22157 /usr/sbin/apache2 -k start
├─22160 /usr/sbin/apache2 -k start
├─22161 /usr/sbin/apache2 -k start
├─22162 /usr/sbin/apache2 -k start
├─22163 /usr/sbin/apache2 -k start
├─22164 /usr/sbin/apache2 -k start
├─22167 /usr/sbin/apache2 -k start
├─28899 /usr/sbin/apache2 -k start
├─28900 /usr/sbin/apache2 -k start
└─28901 /usr/sbin/apache2 -k start

Если Apache не запустился, инициируем его запуск вручную с помощью команды:

sudo systemctl start apache2

Сделаем запуск Apache автоматическим при загрузке Debian:

sudo systemctl enable apache2

Теперь можете проверить открывается ли стартовая страница Apache на 80 порту, для этого в браузере введите IP-адрес компьютера, на котором установлен Debian, должна открыться стандартная веб-страница Apache:

Далее сделаем пользователя www-data (пользователя Apache) владельцем корневой директории, в которой у нас будут лежать файлы сайта:

sudo chown www-data:www-data /var/www/html/ -R

Шаг 2. Установка сервера баз данных MardiaDB (ответвление от системы управления базами данных MySQL)

Выполняем команду:

sudo apt install mariadb-server mariadb-client

После установки проверим работоспособность SQL-сервера:

systemctl status mariadb

Мы должны получить следующий вывод:


● mariadb.service - MariaDB 10.5.18 database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2023-02-13 06:44:33 EST; 23h ago
Docs: man:mariadbd(8)
https://mariadb.com/kb/en/library/systemd/
Main PID: 14292 (mariadbd)
Status: "Taking your SQL requests now..."
Tasks: 25 (limit: 2294)
Memory: 264.8M
CPU: 2min 36.734s
CGroup: /system.slice/mariadb.service
└─14292 /usr/sbin/mariadbd

Если MariaDB не поднялась, запускаем вручную:

sudo systemctl start mariadb

Сделаем запуск MariaDB автоматическим при загрузке Debian:

sudo systemctl enable mariadb

Запустим мастер настройки безопасности:

mysql_secure_installation

MariaDB просит нас ввести пароль root:
Enter current password for root (enter for none):
Нажимаем Enter, так как текущий пароль root в MariaDB у нас пустой.

Далее вопрос:
Switch to unix_socket authentication [Y/n]
Вводим Y, если мы хотим оставить возможность аутентификации через unix-сокет — это нововведение появилось именно в 10.4, плагин позволяет использовать присутствующие в системе учётные записи для подключения к СУБД при помощи локального unix-сокета. Делайте так, как вам удобней, лично я выбрал N.

Далее вопрос:
Change the root password? [Y/n]
Вводим Y, да мы хотим поменять пароль root и далее придумываем СЛОЖНЫЙ пароль root.

Далее вопрос:
Remove anonymous users? [Y/n]
Вводим Y, мы хотим удалить анонимного пользователя.

Далее вопрос:
Disallow root login remotely? [Y/n]
Вводим Y, да мы хотим запретить подключаться под пользователем root с удаленных машин.

Далее вопрос:
Remove test database and access to it? [Y/n]
Вводим Y, да мы хотим удалить тестовую базу test.

И последний вопрос:
Reload privilege tables now? [Y/n]
Вводим Y, да мы хотим перезагрузить таблицу привилегий для вступления их в силу.

После этого мы выполнили минимальные меры по защите нашего экземпляра MariaDB.

Шаг 3. Устанавливаем поддержку компонентов PHP

Выполняем команду:

sudo apt install php libapache2-mod-php php-mysql php-common php-cli php-common php-json php-opcache php-readline

Узнаем версию установленного PHP:

php --version

В нашем случае установился PHP версии 7.4.

Далее включаем поддержку PHP в Apache: sudo a2enmod php7.4

После этого нам необходимо перезапустить Apache: sudo systemctl restart apache2

Далее проверим работу PHP, для этого создадим PHP файл в корневой директории Apache:

sudo nano /var/www/html/info.php

В данный файл необходимо вставить следующий код:

<?php phpinfo(); ?>

Сохраняем файл комбинацией Ctrl+X и выходим из редактора.

Перейдем по IP-адресу вашего Debian и укажем путь к файлу info.php, проверим работоспособность PHP.

Как видим Apache успешно обрабатывает PHP.

На этом установка веб-сервера считается завершенной, однако мы сделали лишь основные шаги не затронув настройку безопасности, но это уже тема для другой статьи.