Стек LAMP (Linux, Apache, MariaDB, PHP) — классическая основа для WordPress, Laravel и большинства PHP-приложений. В этом руководстве вы шаг за шагом соберёте его на новом VPS Linux Infrawire с Ubuntu 24.04: с отдельным виртуальным хостом и файрволом, открывающим только необходимое.
📋 Требования
- KVM VPS с Ubuntu 24.04 (IP-адрес и пароль root указаны в вашем личном кабинете)
- SSH-доступ под root или под пользователем с правами
sudo - Домен
example.com, A-записи (и AAAA) которого указывают наVPS_IP
Ниже предполагается, что вы работаете под root. Иначе добавляйте sudo в начало команд.
1. Обновление системы
Bashapt update && apt upgrade -y
2. Установка Apache
Bashapt install -y apache2 systemctl enable --now apache2 apache2 -v
Служба запускается сразу и будет стартовать вместе с системой.
3. Установка MariaDB
MariaDB есть в репозиториях Ubuntu и без изменений заменяет MySQL. Если вы предпочитаете MySQL от Oracle, установите mysql-server, но никогда не ставьте обе СУБД на одну машину.
Bashapt install -y mariadb-server systemctl enable --now mariadb mysql_secure_installation
В мастере оставьте аутентификацию unix_socket для root, задайте надёжный пароль, если его запросят, удалите анонимных пользователей, запретите удалённый вход root и удалите тестовую базу. Затем создайте базу данных и отдельного пользователя для приложения:
Bashmariadb
SQL1CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 2CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD'; 3GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost'; 4FLUSH PRIVILEGES; 5EXIT;
4. Установка PHP 8.3
Ubuntu 24.04 поставляет PHP 8.3 в стандартных репозиториях, поэтому дополнительный PPA не нужен.
Bashapt install -y php libapache2-mod-php php-mysql php-cli php-curl php-gd php-mbstring php-xml php-zip php-intl php -v
Пакет libapache2-mod-php автоматически переключает Apache на MPM prefork и подключает модуль PHP.
5. Виртуальный хост и mod_rewrite
Bashmkdir -p /var/www/example.com/public_html chown -R www-data:www-data /var/www/example.com nano /etc/apache2/sites-available/example.com.conf
Apache1<VirtualHost *:80> 2 ServerName example.com 3 ServerAlias www.example.com 4 DocumentRoot /var/www/example.com/public_html 5 6 <Directory /var/www/example.com/public_html> 7 AllowOverride All 8 Require all granted 9 </Directory> 10 11 ErrorLog ${APACHE_LOG_DIR}/example.com-error.log 12 CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined 13</VirtualHost>
AllowOverride All включает файлы .htaccess, на которых держатся «красивые» URL в WordPress и Laravel. Теперь включите модуль и сайт и отключите страницу по умолчанию:
Basha2enmod rewrite a2ensite example.com.conf a2dissite 000-default.conf apache2ctl configtest systemctl reload apache2
Перед перезагрузкой configtest должен ответить Syntax OK.
6. Настройка файрвола
Сначала разрешите SSH, иначе после включения файрвола вы потеряете доступ к серверу.
Bashufw allow OpenSSH ufw allow 'Apache Full' ufw enable ufw status
Профиль Apache Full открывает порты 80 и 443. Не открывайте порт 3306: MariaDB достаточно слушать только локально.
7. Проверка PHP и удаление тестового файла
Bashecho '<?php phpinfo();' > /var/www/example.com/public_html/info.php curl -sI http://example.com/info.php | head -n 1
Вы должны получить HTTP/1.1 200 OK. Откройте http://example.com/info.php в браузере, чтобы увидеть страницу конфигурации PHP. Страница phpinfo() раскрывает версии, пути и модули, поэтому сразу удалите её:
Bashrm /var/www/example.com/public_html/info.php
Проверьте и остальные компоненты:
Bashapache2ctl -M | grep -E 'rewrite|php' php -m | grep -E 'mysqli|pdo_mysql' systemctl is-active apache2 mariadb
🛠️ Решение проблем
По-прежнему открывается страница Apache по умолчанию. Сайт по умолчанию ещё включён или DNS не обновился. Выполните a2dissite 000-default.conf, перезагрузите Apache и проверьте командой curl -I -H 'Host: example.com' http://VPS_IP/.
403 Forbidden. Убедитесь, что в блоке каталога есть Require all granted, что www-data может читать файлы (ls -ld /var/www/example.com/public_html), и посмотрите журнал /var/log/apache2/example.com-error.log.
Браузер скачивает PHP-файл вместо выполнения. Модуль PHP не загружен. Выполните apache2ctl -M | grep php, затем systemctl restart apache2. Если вывода нет, переустановите libapache2-mod-php.
Правила перезаписи игнорируются (404 на «красивых» URL). Проверьте, что выполнена команда a2enmod rewrite и что в блоке <Directory> указано AllowOverride All.
🎉 Ваш стек LAMP готов: Apache, MariaDB и PHP 8.3 можно использовать для первого сайта.