Русский (Russian)

Установка стека LAMP на Linux VPS с Ubuntu 24.04

2 min
VPS/VDS-хостинг

Стек 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. Обновление системы

Bash
apt update && apt upgrade -y

2. Установка Apache

Bash
apt install -y apache2 systemctl enable --now apache2 apache2 -v

Служба запускается сразу и будет стартовать вместе с системой.

3. Установка MariaDB

MariaDB есть в репозиториях Ubuntu и без изменений заменяет MySQL. Если вы предпочитаете MySQL от Oracle, установите mysql-server, но никогда не ставьте обе СУБД на одну машину.

Bash
apt install -y mariadb-server systemctl enable --now mariadb mysql_secure_installation

В мастере оставьте аутентификацию unix_socket для root, задайте надёжный пароль, если его запросят, удалите анонимных пользователей, запретите удалённый вход root и удалите тестовую базу. Затем создайте базу данных и отдельного пользователя для приложения:

Bash
mariadb
SQL
1CREATE 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 не нужен.

Bash
apt 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

Bash
mkdir -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
Apache
1<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. Теперь включите модуль и сайт и отключите страницу по умолчанию:

Bash
a2enmod rewrite a2ensite example.com.conf a2dissite 000-default.conf apache2ctl configtest systemctl reload apache2

Перед перезагрузкой configtest должен ответить Syntax OK.

6. Настройка файрвола

Сначала разрешите SSH, иначе после включения файрвола вы потеряете доступ к серверу.

Bash
ufw allow OpenSSH ufw allow 'Apache Full' ufw enable ufw status

Профиль Apache Full открывает порты 80 и 443. Не открывайте порт 3306: MariaDB достаточно слушать только локально.

7. Проверка PHP и удаление тестового файла

Bash
echo '<?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() раскрывает версии, пути и модули, поэтому сразу удалите её:

Bash
rm /var/www/example.com/public_html/info.php

Проверьте и остальные компоненты:

Bash
apache2ctl -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 можно использовать для первого сайта.

Следите за последними предложениями, скидками и специальными акциями.

Смотреть акции

Мы используем файлы cookie

Аналитические cookie улучшают работу сайта. Данные не продаются третьим лицам. Подробнее в политике конфиденциальности.