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

LAMP-стек (Linux, Apache, MySQL/MariaDB, PHP) — это классическая платформа для развёртывания веб-приложений, проверенная десятилетиями. В отличие от более современных альтернатив, таких как LEMP, LAMP гораздо проще в настройке и интеграции с CMS (WordPress, Joomla) благодаря модульной архитектуре Apache.
Это решение подойдёт для небольших и средних проектов, корпоративных сайтов, блогов и форумов, особенно если вы планируете использовать готовые движки. LAMP часто выбирают начинающие разработчики и администраторы, поскольку он позволяет быстро развернуть рабочую среду с минимальными требованиями к навыкам.
На VPS-сервере LAMP особенно удобен — вы получаете полный контроль над окружением, гибко настраиваете компоненты под конкретные задачи и обеспечиваете высокую производительность без лишних накладных расходов. Это делает LAMP на VPS отличным выбором для тестирования, учебных проектов и быстрого запуска коммерческих сайтов.
Архитектура стека
Операционная система на базе 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 & Cluster → mysql-8.0 → OK. Установите 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.
Читайте в блоге:
- Как установить и настроить PostgreSQL в Ubuntu 22.04
- Как устанавливать и удалять программы с помощью APT и Snap в Ubuntu 22.04
- Как настроить автоматическое обновление серверных пакетов на Ubuntu