Как установить и настроить Apache, PHP и MariaDB (LAMP-стек) в Ubuntu 22.04

Как установить и настроить Apache, PHP и MariaDB (LAMP-стек) в Ubuntu 22.04

LAMP-стек — один из первых стеков серверного ПО с открытым исходным кодом для веб-приложений. До сих пор он остаётся основой миллионов сайтов. Рассказываем, для каких проектов подойдёт LAMP в 2025 году, как установить и выполнить базовую настройку его компонентов.

Особенности LAMP: когда и зачем он нужен

Apache лого

LAMP-стек (Linux, Apache, MySQL/MariaDB, PHP) — это классическая платформа для развёртывания веб-приложений, проверенная десятилетиями. В отличие от более современных альтернатив, таких как LEMP, LAMP гораздо проще в настройке и интеграции с CMS (WordPress, Joomla) благодаря модульной архитектуре Apache.

Это решение подойдёт для небольших и средних проектов, корпоративных сайтов, блогов и форумов, особенно если вы планируете использовать готовые движки. LAMP часто выбирают начинающие разработчики и администраторы, поскольку он позволяет быстро развернуть рабочую среду с минимальными требованиями к навыкам.

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

Аренда VPS/VDS от 219 руб/месяц

Преимущества VPS в AdminVPS:

✓ Бесплатное администрирование

✓ Только быстрые NVMe-диски

✓ Защита от DDoS-атак

✓ Быстрая техподдержка

Аренда VPS/VDS виртуального сервера от AdminVPS — это прозрачная и честная услуга с доступной ценой

Архитектура стека

Операционная система на базе Linux. В этом руководстве — Ubuntu 22.04 (Jammy Jellyfish), ОС с долгосрочной поддержкой (LTS) и обширным сообществом.

Apache — веб-сервер, обрабатывающий HTTP-запросы. Его главные преимущества: модульность, поддержка .htaccess (гибкая конфигурация на уровне директорий) и совместимость с legacy-приложениями, написанными под специфику Apache.

MySQL/MariaDB — реляционные СУБД. MariaDB, будучи форком MySQL, сохраняет полную совместимость, но лучше справляется со сложными запросами и параллельной обработкой.

PHP — серверный язык, исполняемый через встроенный в Apache модуль mod_php. В отличие от FPM в LEMP, PHP здесь работает в рамках процессов Apache.

Преимущества и недостатки LAMP и сфера применения стека

Главное преимущество LAMP перед более современными альтернативами — это гибкость конфигурации благодаря файлам .htaccess. В отличие от Nginx, где изменения требуют правки конфигов и перезагрузки сервера, Apache позволяет вносить настройки маршрутизации, безопасности и кеширования прямо в директориях проекта. Это критически важно для shared-хостингов, где у пользователей нет доступа к основным конфигурационным файлам. Например, CMS WordPress активно использует .htaccess для ЧПУ-ссылок через модуль mod_rewrite, а разработчики могут быстро добавлять редиректы или запрещать доступ к служебным файлам без остановки сервера.

Ещё одна сильная сторона LAMP — глубокая интеграция с устаревшими проектами. Многие системы управления контентом (Drupal, OpenCart) и фреймворки изначально разрабатывались под Apache, а их код зачастую опирается на специфичные модули, самый известный из которых — mod_php, исполняющий PHP-скрипты в рамках процессов веб-сервера. Это упрощает отладку, но требует внимания к настройке памяти. Кроме того, Apache предлагает целую экосистему модулей для узких задач, например, mod_perl и mod_python добавляют поддержку других языков, а mod_dav реализует протокол WebDAV для управления файлами через HTTP — причём модули есть не только встроенные, но и созданные сторонними разработчиками.

Однако у LAMP есть и ограничения. При высокой нагрузке Apache создаёт отдельный процесс или поток на каждое соединение, что приводит к резкому росту потребления памяти. Это делает стек менее подходящим для высоконагруженных API или SPA, где Nginx с его асинхронной архитектурой показывает лучшую производительность. Придётся уделять больше внимания безопасности: модуль mod_php исполняет скрипты с правами пользователя Apache (www-data), что увеличивает риски при уязвимостях в коде. Масштабирование LAMP-инфраструктуры сложнее — балансировка нагрузки между несколькими серверами Apache требует тонкой настройки, в то время как Nginx изначально заточен под распределённые системы.

Установка и настройка Apache на Ubuntu 22.04

Установка Apache начинается с обновления списка пакетов — это обязательный этап, гарантирующий, что система «увидит» актуальные версии программ из репозиториев:

sudo apt update

Команда обращается к серверам Ubuntu и синхронизирует локальный индекс доступных пакетов. Если пропустить этот шаг, есть риск поставить устаревшую версию, что может привести к проблемам с безопасностью или совместимостью.

Выполните установку:

sudo apt install apache2 -y

Флаг -y автоматически подтверждает действия.

Проверка состояния:

sudo systemctl status apache2

Если служба активна (Status: active (running)), всё в порядке. 

Перед тестированием Apache нужно настроить брандмауэр, чтобы порты HTTP (80) и HTTPS (443) были открыты. Команда, которая создаёт правила, разрешающие входящий трафик по этим портам:

sudo ufw allow 'Apache Full'

Если брандмауэр был выключен, активируйте его через sudo ufw enable. Но перед этим убедитесь, что не заблокирован SSH-доступ (порт 22), иначе есть риск потерять соединение с удалённым сервером.

Теперь откройте в браузере http://ваш_IP_сервера. На локальной машине вместо IP подойдёт http://localhost. Должна загрузиться стандартная страница-заглушка Apache с логотипом, надписью «It works!» и обзором конфигов. Это означает, что установка прошла успешно, и можно переходить к настройке.

Базовые конфиги Apache хранится в /etc/apache2. Основной файл — apache2.conf, но править его вручную нежелательно. Для изменения настроек есть дополнительные конфиги в поддиректориях:

  • sites-available — шаблоны виртуальных хостов;
  • sites-enabled — активные сайты (симлинки на шаблоны);
  • mods-available, mods-enabled — модули;
  • conf-available, conf-enabled — глобальные настройки.

Виртуальные хосты

Создайте конфиг виртуального хоста в:

/etc/apache2/sites-available/

У нас в примере сайт domainname.ru и соответствующий ему конфиг domainname.ru.conf. Внутри пропишите базовые директивы:

 <VirtualHost *:80> 
    ServerName domainname.ru 
    ServerAlias www.domainname.ru 
    DocumentRoot /var/www/domainname.ru/public 
    ErrorLog ${APACHE_LOG_DIR}/domainname.ru_error.log 
    CustomLog ${APACHE_LOG_DIR}/domainname.ru_access.log combined 
    <Directory /var/www/domainname.ru/public> 
        Options -Indexes +FollowSymLinks 
        AllowOverride All 
        Require all granted 
    </Directory> 
</VirtualHost>  

Где:

  • ServerName и ServerAlias — доменные имена, на которые отвечает хост.
  • DocumentRoot указывает на корень сайта. Если корневой папки ещё не существует, создайте её:
sudo mkdir -p /var/www/domainname.ru/public
  • ErrorLog и CustomLog — пути к логам. Переменная ${APACHE_LOG_DIR} раскрывается в:
/var/log/apache2
  • <Directory> настраивает параметры доступа.
  • -Indexes запрещает листинг файлов при отсутствии index.html.
  • +FollowSymLinks разрешает символические ссылки.
  • AllowOverride All включает обработку .htaccess.

Сохраните конфиг и активируйте сайт:

sudo a2ensite domainname.ru.conf

Утилита a2ensite создаёт симлинк из sites-available в sites-enabled.

Перезагрузите Apache:

sudo systemctl reload apache2

Если конфиг содержит ошибки, Apache сообщит о них и продолжит работать со старыми настройками. Чтобы проверить синтаксис, используйте:

sudo apache2ctl -t

Безопасность и оптимизация

Настройте права доступа. Корневая директория сайта должна принадлежать www-data (пользователю Apache) или текущему пользователю, но с правильной группой:

sudo chown -R $USER:www-data /var/www/domainname.ru/public 
sudo chmod -R 755 /var/www/domainname.ru  

Модуль mod_rewrite для ЧПУ-ссылок. Активируйте его:

sudo a2enmod rewrite

Перезагрузите Apache (reload) и убедитесь, что в конфиге виртуального хоста разрешён AllowOverride All.

Скройте версию Apache. В /etc/apache2/conf-available/security.conf измените директивы:

ServerTokens Prod 
ServerSignature Off  

Это предотвратит вывод версии в заголовках HTTP и на страницах ошибок, затруднив анализ конфигурации для потенциального взлома.

MPM. Для высоконагруженных проектов можно настроить Multi-Processing Module (MPM). «Из коробки» Apache использует mpm_prefork, создающий отдельные процессы под каждый запрос. Если объём RAM позволяет, переключитесь на mpm_event или mpm_worker, обрабатывающие запросы асинхронно. Отключите текущий MPM:

sudo a2dismod mpm_prefork

Активируйте новый:

sudo a2enmod mpm_event

Перезапустите веб-сервер:

sudo systemctl restart apache2

Но учтите, что модуль mpm_event несовместим с mod_php. Придётся перейти на PHP-FPM, что сблизит LAMP с архитектурой LEMP.

Установка и настройка PHP

За работу PHP в LAMP отвечает модуль mod_php, встраивающий интерпретатор непосредственно в процессы Apache. В Ubuntu 22.04 по умолчанию доступна версия 8.1, которая поддерживает большинство современных фреймворков и CMS.

Установка и базовая настройка PHP

Команда, которая устанавливает не только сам язык, но и модуль:

sudo apt install php libapache2-mod-php -y

Также установите дополнительные модули одной командой:

sudo apt install php-mysql php-curl php-gd php-mbstring php-xml php-zip php-opcache -y  

Все они нужны для нормальной работы веб-приложений, каждый пакет соответствует конкретному расширению. Так, php-mysql добавляет поддержку БД, php-gd — обработку изображений, php-mbstring — работу с многобайтовыми строками, php-xml необходим для парсинга XML, а php-zip — для работы с архивами. Если ваш проект использует специфичные библиотеки (например, php-imagick для сложной графики), их можно добавить позже через apt install.

Конфигурационные файлы PHP разделены на две части:

для веб-сервера:

/etc/php/8.1/apache2/php.ini 

Это настройки, применяемые при обработке HTTP-запросов.

Для CLI:

/etc/php/8.1/cli/php.ini 

Это параметры командной строки (например, при запуске скриптов через cron).

Откройте основной конфиг:

sudo nano /etc/php/8.1/apache2/php.ini  

Ключевые параметры, которые стоит проверить:

  • memory_limit = 256M — лимит оперативной памяти на скрипт. Для ресурсоёмких CMS (WordPress или Magento) установите 512M-1G.
  • upload_max_filesize = 64M и post_max_size = 128M — ограничения на загрузку файлов. Увеличьте их, если сайт работает с большими медиафайлами.
  • display_errors = Off и log_errors = On — отключите вывод ошибок в браузер на продакшне, чтобы не раскрывать служебную информацию. Логи будут сохраняться в /var/log/apache2/error.log.
  • date.timezone = Europe/Moscow — установите корректную временную зону.

После внесения изменений перезагрузите Апач командой reload.

Затем создайте файл:

/var/www/html/info.php

с содержимым:

<?php phpinfo(); ?>

Откройте его через браузер (адрес — http://ваш_сервер/info.php). В окне браузера отобразится детальная информация о PHP, в том числе список активных модулей и параметры php.ini.

Особенности работы с mod_php

Поскольку PHP исполняется внутри процессов Apache, каждый из них потребляет больше памяти по сравнению с PHP-FPM. Это критично на серверах с ограниченными ресурсами. Чтобы снизить нагрузку:

Настройте OPcache — встроенный акселератор, кеширующий скомпилированный байт-код. В php.ini:

opcache.enable=1 
opcache.memory_consumption=128 
opcache.max_accelerated_files=10000  

Это сократит время выполнения скриптов на 30-50 %.

Безопасность PHP

Отключите опасные функции в php.ini:

disable_functions = exec,passthru,shell_exec,system  

Это предотвратит выполнение произвольных команд через уязвимости в коде.

Ограничьте доступ к конфигурационным файлам через .htaccess:

<FilesMatch "^(php\.ini|\.htaccess)"> 
    Require all denied 
</FilesMatch>  

Установка и настройка MySQL/MariaDB

Выбор между MySQL и MariaDB в Ubuntu 22.04 не случаен. MariaDB, форк MySQL, полностью совместима с оригиналом, но лучше оптимизирована для сложных запросов и имеет открытую лицензию. Для большинства проектов подойдёт MariaDB, но если вам нужны специфичные функции MySQL 8.0, можно установить официальную сборку Oracle.

Установка MariaDB

Начнём с установки MariaDB:

sudo apt install mariadb-server mariadb-client -y

После завершения инсталляции запустится служба mariadb.service, но перед использованием базу данных нужно обезопасить. Запустите скрипт для настройки безопасности:

sudo mysql_secure_installation

Ответьте на ряд вопросов:

  • Enter current password for root — пароля ещё нет, поэтому просто нажмите «Ввод».
  • Switch to unix_socket authentication? — выберите n, если не планируете использовать аутентификацию через системный сокет.
  • Change the root password? — задайте надёжный пароль для суперпользователя.
  • Remove anonymous users? — удалите анонимные учётные записи, выбрав y
  • Disallow root login remotely? — запрет входить под root с удалённых хостов.
  • Remove test database? — удаление тестовой БД (y).
  • Reload privilege tables? — примените изменения (y).

Подключитесь к СУБД от имени root:

sudo mysql -u root -p  

В консоли MySQL создайте БД и пользователя для вашего приложения. Например, для сайта domainname.ru:

CREATE DATABASE database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 
CREATE USER 'user'@'localhost' IDENTIFIED BY 'Password123!'; 
GRANT ALL PRIVILEGES ON database.* TO 'user'@'localhost'; 
FLUSH PRIVILEGES; 
EXIT; 

CHARACTER SET utf8mb4 обеспечивает поддержку эмодзи и специальных символов, а IDENTIFIED BY задаёт пароль пользователя. Убедитесь, что он достаточно сложен.

Установка MySQL 

Установка MySQL потребует добавления официального репозитория Oracle. Сначала загрузите конфигурационный пакет:

curl -fsSL https://dev.mysql.com/get/mysql-apt-config_0.8.28-1_all.deb -o mysql.deb 
sudo dpkg -i mysql.deb  

В появившемся меню выберите MySQL Server & Clustermysql-8.0OK. Установите MySQL:

sudo apt update 
sudo apt install mysql-server mysql-client -y  

После этого также выполните:

sudo mysql_secure_installation

Настройка производительности

Конфигурационные файлы MariaDB и MySQL лежат в /etc/mysql/.

Основной файл MariaDB:

/etc/mysql/mariadb.conf.d/50-server.cnf

MySQL:

/etc/mysql/mysql.conf.d/mysqld.cnf

Откройте его:

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf  

Ключевые параметры для оптимизации:

  • innodb_buffer_pool_size = (Total RAM - RAM for other services) * 0,75 — размер буфера InnoDB. Рекомендуется выделять 70-80 % доступной RAM, если база активно используется.
  • max_connections = 200 — максимальное число одновременных подключений. Увеличьте, если ожидаете высокую нагрузку.
  • query_cache_type = 1 и query_cache_size = 64M — кеширование результатов запросов (для MariaDB 10.2+ неактуально, так как кеш удалён).
  • slow_query_log = 1 — активация лога медленных запросов. Укажите путь через slow_query_log_file и порог времени long_query_time (например, 2 секунды).

После изменения конфигурации перезапустите СУБД:

sudo systemctl restart mariadb  # или mysql  

Интеграция с PHP

Установите модуль php-mysql:

sudo apt install php-mysql 
sudo systemctl restart apache2  

Создайте тестовый файл /var/www/domainname.ru/public/db_test.php:

<?php 
$host = 'localhost'; 
$db   = 'database'; 
$user = 'user'; 
$pass = 'Password123!';
try { 
    $pdo = new PDO("mysql:host=$host;dbname=$db;charset=utf8mb4", $user, $pass); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Поздравляем! Вы подключились к БД!"; 
} catch (PDOException $e) { 
    die("Ошибка: " . $e->getMessage()); 

?>  

Откройте его в браузере. Если видите сообщение — связка PHP + MySQL работает корректно.

Безопасность и удалённый доступ

По умолчанию MySQL/MariaDB слушает только localhost. Для подключения извне разрешите порт 3306 в брандмауэре (если сервер в доверенной сети):

sudo ufw allow from 192.168.1.0/24 to any port 3306  

В конфиге СУБД замените bind-address = 127.0.0.1 на bind-address = 0.0.0.0 (предварительно настройте безопасный доступ).

Создайте пользователя с доступом с удалённых IP:

CREATE USER 'remote_user'@'192.168.1.%' IDENTIFIED BY 'Password321!'; 
GRANT ALL ON database.* TO 'remote_user'@'192.168.1.%';  

Заключение

Установка LAMP на Ubuntu 22.04 — хороший вариант, когда нужно быстро развернуть CMS, блог и средний проект с предсказуемой нагрузкой. Его стоит рассматривать, если приоритетом является простота поддержки, а не экстремальная производительность.

Для проектов, где LAMP не подходит, существуют альтернативы. Стек LEMP (Nginx + PHP-FPM) лучше справляется с обработкой статики и тысячами одновременных подключений. JavaScript-стеки (MEAN/MERN) на базе Node.js и React/Vue подходят для современных SPA с интенсивной работой на клиентской стороне. Если нужна глубокая кастомизация backend-логики, можно обратиться к Python-фреймворкам Django или Flask.

Читайте в блоге:

Loading spinner
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

VPN на VPS-сервере

Узнайте, как создать собственный VPN на VPS-сервере для защиты ваших конфиденциальных данных!

Что будем искать? Например,VPS-сервер

Мы в социальных сетях