Установка LAMP на Debian 13 и Debian 12: Apache2, PHP 8, MariaDB и phpMyAdmin
Apache2, PHP 8, MariaDB и phpMyAdmin на Debian 13 или Debian 12: полная настройка шаг за шагом, включая защиту сервера и разбор частых ошибок.
Вы хотите установить Apache2, PHP 8, базу данных MySQL и phpMyAdmin, то есть полный стек LAMP, на своём сервере с Debian 13 (Trixie) или Debian 12 (Bookworm)? Это руководство шаг за шагом проведёт вас через всю настройку, от веб-сервера до защищённого доступа к базе данных.
Важно о сервере баз данных: в Debian нет пакета mysql-server, ни в одной актуальной версии. Под Debian вы всегда устанавливаете MariaDB. MariaDB выросла из MySQL, использует тот же протокол и тот же язык запросов, а инструменты вроде phpMyAdmin или PHP-расширение php-mysql работают с ней без изменений. Поэтому, когда в этом руководстве речь идёт о базах данных MySQL, под ними работает MariaDB.
Требования
Вам нужен SSH-доступ с правами root (или пользователь с правом sudo) на актуальной системе Debian. Рекомендуются Debian 13 «Trixie» и Debian 12 «Bookworm». Поддержка Debian 10 закончилась в июне 2024 года, регулярных обновлений безопасности он больше не получает и для продуктивной работы уже не годится.
Сначала обновите список пакетов и установите имеющиеся обновления:
apt update
apt upgrade -y
Установка Apache2 и базовых пакетов
Установите веб-сервер вместе со вспомогательными пакетами, которые понадобятся вам на следующих шагах:
apt install -y nano curl wget unzip ca-certificates apt-transport-https lsb-release gnupg apache2
После этого откройте в браузере http://<IP-ВАШЕГО-СЕРВЕРА>/. Если появилась стандартная страница Apache2, веб-сервер уже работает.
Установка PHP 8
Какую версию PHP вы получите из репозиториев, зависит от вашего дистрибутива. Поэтому команда с жёстко заданным номером версии, например apt install php8.4, на Debian 12 завершится ошибкой: там есть только PHP 8.2. В этой таблице показано, какая версия входит в состав каждого выпуска (по состоянию на июль 2026 года):
| Дистрибутив | Версия PHP из репозиториев |
|---|---|
| Debian 13 | PHP 8.4 |
| Debian 12 | PHP 8.2 |
| Debian 11 | PHP 7.4 |
Поэтому используйте метапакеты без номера версии. Они автоматически подтягивают подходящую вашему дистрибутиву версию и одинаково работают на любом Debian:
apt install -y php php-cli php-common php-curl php-gd php-intl php-mbstring php-mysql php-opcache php-readline php-xml php-zip php-bz2 libapache2-mod-php
Если вы хотите запускать PHP не через модуль Apache, а через FPM, действует тот же принцип. И здесь метапакет надёжно приводит к цели, тогда как имена с номером версии, например php8.4-fpm, существуют только на Debian 13:
apt install -y php-fpm
Какая версия установлена на самом деле, покажет команда:
php -v
Если вам нужна версия, которой нет в вашем выпуске Debian (например, PHP 8.4 на Debian 12), подключите PHP-репозиторий Ondřej Surý. Ключ подписи при этом устанавливается отдельным пакетом keyring, а в строке источника через signed-by= привязывается именно к этому репозиторию:
curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
dpkg -i /tmp/debsuryorg-archive-keyring.deb
echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list
apt update
Прежний распространённый путь через apt-key add объявлен устаревшим начиная с Debian 11 и больше применяться не должен: сохранённый таким образом ключ был бы действителен для всех репозиториев системы.
Только через этот репозиторий имена пакетов с номером версии становятся доступны на всех выпусках Debian. Затем вы устанавливаете нужную версию PHP вместе с привычным набором расширений:
apt install -y php8.4 php8.4-cli php8.4-common php8.4-curl php8.4-gd php8.4-intl php8.4-mbstring php8.4-mysql php8.4-opcache php8.4-readline php8.4-xml php8.4-zip php8.4-bz2 libapache2-mod-php8.4
Если после этого параллельно работают несколько версий PHP, укажите, какую из них должен использовать Apache2:
a2dismod php8.2
a2enmod php8.4
systemctl restart apache2
Командой php -v вы проверяете, какая версия активна в командной строке.
Установка сервера баз данных MariaDB и его защита
Как уже сказано в начале, пакета mysql-server под Debian нет. Сервер баз данных здесь называется MariaDB, причём в зависимости от версии Debian это следующие выпуски:
| Дистрибутив | Сервер баз данных из репозиториев |
|---|---|
| Debian 13 | MariaDB 11.8 |
| Debian 12 | MariaDB 10.11 |
| Debian 11 | MariaDB 10.5 |
Установите сервер и сразу после этого запустите скрипт первичной защиты:
apt install -y mariadb-server mariadb-client
mysql_secure_installation
Скрипт задаёт несколько вопросов. Актуальные версии MariaDB сначала спрашивают, нужно ли перейти на аутентификацию через unix_socket. Эта опция разумна, потому что пользователь базы данных root сможет после этого входить только как системный пользователь root. На все остальные вопросы (удалить анонимных пользователей, запретить удалённый вход для root, удалить тестовую базу, перезагрузить таблицы привилегий) отвечайте y. Кроме того, задайте надёжный пароль для базы данных.
Затем проверьте, работает ли служба:
systemctl status mariadb
Установка phpMyAdmin
Для phpMyAdmin у вас есть два пути. Пакет phpmyadmin лежит в репозиториях всех актуальных версий Debian и устанавливается одной командой:
apt install phpmyadmin -y
Это удобно, но версия часто отстаёт от текущей у разработчика. Кому нужен самый свежий выпуск, тот скачивает phpMyAdmin напрямую. Именно этот путь описывают следующие шаги:
cd /usr/share && wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip -O phpmyadmin.zip && unzip phpmyadmin.zip && rm phpmyadmin.zip && mv phpMyAdmin-*-all-languages phpmyadmin && chmod -R 0755 phpmyadmin
Затем создайте файл конфигурации:
cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php
phpMyAdmin требует случайное значение в качестве blowfish_secret, которым шифруются данные сессии в cookie. Сгенерируйте такое значение:
openssl rand -base64 32
После этого впишите его в файл конфигурации:
nano /usr/share/phpmyadmin/config.inc.php
Нужная строка выглядит так:
$cfg['blowfish_secret'] = 'ВСТАВЬТЕ_СЮДА_СГЕНЕРИРОВАННОЕ_ЗНАЧЕНИЕ';
Подключение phpMyAdmin к Apache2
Создайте отдельный файл конфигурации Apache2 для phpMyAdmin:
nano /etc/apache2/conf-available/phpmyadmin.conf
Содержимое файла phpmyadmin.conf:
#Конфигурация PHPMyAdmin для Apache2
Alias /phpmyadmin /usr/share/phpmyadmin
<Directory /usr/share/phpmyadmin>
Options SymLinksIfOwnerMatch
DirectoryIndex index.php
</Directory>
<Directory /usr/share/phpmyadmin/templates>
Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/libraries>
Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
Require all denied
</Directory>
Активируйте конфигурацию, перезагрузите Apache2 и создайте временный каталог с нужными правами:
a2enconf phpmyadmin && systemctl reload apache2 && mkdir -p /usr/share/phpmyadmin/tmp/ && chown -R www-data:www-data /usr/share/phpmyadmin/tmp/
Создание пользователя базы данных
Войдите в базу данных как системный пользователь root:
mysql -u root
Теперь создайте собственного пользователя базы данных. При этом не берите в качестве имени «root», «admin», «user» или «username», придумайте своё имя пользователя и длинный случайный пароль:
#ВАЖНО! ЗАМЕНИТЕ USER И PASSWORD НА СВОИ СОБСТВЕННЫЕ УЧЁТНЫЕ ДАННЫЕ.
CREATE USER 'USER'@'localhost' IDENTIFIED BY 'PASSWORD';
GRANT ALL PRIVILEGES ON *.* TO 'USER'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Для отдельных приложений стоит дополнительно завести пользователей с ограниченными правами, которым разрешён доступ только к их собственной базе данных:
CREATE DATABASE myapp;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'PASSWORD';
GRANT ALL PRIVILEGES ON myapp.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
Выйти из консоли базы данных можно в любой момент командой:
exit
Проверка стека LAMP
Откройте phpMyAdmin по адресу http://<IP-ВАШЕГО-СЕРВЕРА>/phpmyadmin и войдите под только что созданным пользователем. Если вход удался, Apache2, PHP и MariaDB работают вместе правильно.
Работу PHP вы дополнительно проверите небольшим тестовым файлом:
echo "<?php phpinfo();" > /var/www/html/info.php
После вызова http://<IP-ВАШЕГО-СЕРВЕРА>/info.php обязательно удалите этот файл, потому что он раскрывает подробности конфигурации вашего сервера:
rm /var/www/html/info.php
Рекомендации по безопасности для продуктивной работы
Свежеустановленный стек LAMP ещё не защищён. Эти пункты стоит добавить:
- phpMyAdmin — популярная цель атак. Ограничьте доступ своим собственным IP-адресом, указав в блоке Directory
Require ip 203.0.113.10вместо открытого доступа. - Настройте HTTPS, чтобы пароли не передавались в открытом виде. Без шифрования ваши учётные данные можно перехватить по дороге к серверу.
- Поддерживайте phpMyAdmin в актуальном состоянии. Так как вы установили его вручную,
apt upgradeавтоматически его не обновляет. - Регулярно создавайте резервные копии баз данных и храните их вне сервера.
Частые ошибки и их решения
Браузер скачивает PHP-файл вместо того, чтобы его выполнить: модуль PHP не активен в Apache2. Включите его командой a2enmod php8.4 и перезапустите веб-сервер командой systemctl restart apache2.
phpMyAdmin сообщает «The configuration file now needs a secret passphrase»: в config.inc.php не хватает значения для blowfish_secret. Сгенерируйте его командой openssl rand -base64 32 и впишите в файл.
«Access denied for user» при входе в phpMyAdmin: пользователь базы данных root после mysql_secure_installation обычно использует аутентификацию unix_socket и поэтому не может войти через веб-интерфейс. Используйте дополнительно созданного пользователя.
Apache2 не запускается после изменения конфигурации: проверьте конфигурацию командой apachectl configtest, в выводе будут указаны файл и строка с ошибкой.
Частые вопросы
Почему Debian устанавливает MariaDB вместо MySQL?
Какая версия PHP входит в состав Debian?
Как получить версию PHP новее той, что даёт Debian?
Почему браузер скачивает PHP-файл вместо того, чтобы его выполнить?
Почему не получается войти в phpMyAdmin под пользователем root?
2023-2026 KernelHost GmbH. Все права защищены. Эта инструкция охраняется авторским правом. Публикация на других сайтах, в том числе частично или в изменённом виде, без нашего письменного согласия не разрешается. Цитирование с указанием источника и активной ссылкой мы приветствуем.

