Нужно быстро установить LAMP-стек для тестирования на Ubuntu? В статье — экспресс-установка одной командой, настройка безопасности MySQL и проверка работы PHP. Весь процесс займёт не более 10 минут.
Введение
Эта инструкция подойдёт, если нужно срочно развернуть тестовую среду на Ubuntu 24.04 — например, для демонстрации прототипа клиенту, проверки совместимости плагина WordPress или экспериментов с настройками PHP. LAMP-стек (Linux + Apache + MySQL + PHP) отлично подходит для таких сценариев благодаря своей надёжности и минимальным требованиям к ресурсам.
Никогда не используйте эту конфигурацию для публичных проектов: открытый root-доступ к MySQL и стандартные настройки Apache представляют серьёзный риск для безопасности.
Установка Apache, MySQL и PHP одной командой
Обновите локальный кеш информации о пакетах, чтобы получить актуальные данные из репозиториев Ubuntu 24.04 (без этого шага система может устанавливать устаревшие версии ПО), и установите менеджер задач:
sudo apt update && sudo apt install tasksel
После этого установка всего LAMP-стека сводится к выполнению одной команды:
sudo apt install -y lamp-server^
Ключевой элемент здесь — символ «^». В терминологии APT это не обычный пакет, а задача (task), которая автоматически подбирает и устанавливает всю группу взаимосвязанных пакетов. Задачи управляются утилитой tasksel, но APT может их устанавливать напрямую.
Мета-пакет lamp-server включает три основных компонента:
- Apache — веб-сервер с пакетами apache2 и apache2-utils;
- MySQL — СУБД через mysql-server и mysql-client;
- PHP — интерпретатор с базовыми модулями php, libapache2-mod-php, php-mysql.
После выполнения команды происходит автоматическая настройка: Apache сразу запускается как служба, MySQL добавляется в автозагрузку, а PHP интегрируется с веб-сервером через модуль libapache2-mod-php.
Важно помнить про особенности такого подхода — MySQL устанавливается без пароля для root-доступа, Apache открывает порт 80 без HTTPS, а тестовые файлы остаются общедоступными в /var/www/html/.
Для проверки корректности установки выполните:
systemctl status apache2 mysql
В выводе вы должны увидеть статус active (running) для обеих служб — это подтверждает, что веб-сервер и база данных работают.
Если возникнут проблемы, например ошибка Unable to locate package lamp-server^, повторите попытку с командой:
sudo tasksel install lamp-server
Для явного указания версии PHP используйте:
sudo apt install php8.3 php8.3-mysql
sudo systemctl restart apache2
Никогда не используйте эту конфигурацию для продакшена из-за отсутствия базовых мер безопасности!
Быстрая настройка безопасности LAMP
По умолчанию root-пользователь в MySQL не имеет пароля. Выполните команду, которая решает эту проблему:
sudo mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'SecurePass'; FLUSH PRIVILEGES;"
Где:
- sudo mysql — запускает консоль MySQL с правами суперпользователя;
- -e — позволяет выполнить SQL-запрос без перехода в интерактивный режим;
- ALTER USER — изменяет параметры пользователя;
- 'root'@'localhost' — системный администратор СУБД (работает только для локальных подключений);
- IDENTIFIED WITH caching_sha2_password — устанавливает метод аутентификации;
- BY 'SecurePass' — задаёт пароль;
- FLUSH PRIVILEGES — перезагрузка таблицы привилегий.
При выполнении команды MySQL создаёт хэш пароля и сохраняет его в системной таблице mysql.user, после чего:
- все новые подключения будут требовать аутентификации;
- старые сессии без пароля автоматически закроются;
- активируется шифрование подключений по протоколу TLS.
Хотя установка LAMP в экспресс-режиме предназначена для внутреннего использования, оставлять MySQL без пароля — опасная практика, даже в тестовых средах. Злоумышленники, получившие доступ к серверу через другие уязвимости, могут захватить полный контроль над базами данных, включая чтение, изменение или удаление информации. К тому же многие веб-приложения (например, WordPress или Joomla) принципиально отказываются работать с root-доступом без пароля, что приводит к ошибкам подключения при развёртывании тестовых проектов. Не менее важна и совместимость с инструментами автоматизации. Скрипты Ansible, Docker-контейнеры или CI/CD-пайплайны требуют явного указания пароля для настройки БД. Поэтому для временных сред используйте такой подход:
- установите сложный пароль;
- ограничьте доступ к БД локальными подключениями;
- удалите после завершения тестов командой:
sudo mysql -e "DROP DATABASE test; DELETE FROM mysql.user WHERE User='appuser';"
Дополнительные меры безопасности
- Удаление анонимных пользователей:
sudo mysql -e "DROP USER IF EXISTS ''@'localhost';"
- Обновление привилегий после внесения изменений:
sudo mysql -e "FLUSH PRIVILEGES"
- Создание отдельного пользователя для приложений:
sudo mysql -e "CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'AppPassword'"
Чтобы проверить результат, попробуйте подключиться без пароля — должно появиться сообщение об ошибке:
mysql -u root
Вывод:
# ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
Успешное подключение с паролем подтвердит настройку:
mysql -u root -p'SecurePass' -e "SELECT version()"
Помните, что пароль остаётся в истории команд! Удалите его следы:
history -d $(history | grep 'ALTER USER' | awk '{print $1}')
Тестирование работы стека
После установки LAMP и настройки безопасности проверим взаимодействие всех компонентов стека. Самый эффективный способ — создать минимальный PHP-скрипт, который установит соединение с MySQL и вернёт информацию о подключении. Этот тест подтвердит, что Apache корректно обрабатывает PHP-файлы, модуль php-mysql загружен правильно, и сервер БД принимает подключения с заданными учётными данными.
Создайте временного пользователя:
sudo mysql -e "CREATE USER 'tester'@'localhost' IDENTIFIED BY 'TestPass';"
sudo mysql -e "GRANT ALL PRIVILEGES ON *.* TO 'tester'@'localhost' WITH GRANT OPTION;"
Создайте тестовый файл в корневой веб-директории одной командой:
sudo sh -c 'echo "<?php $mysqli = new mysqli(\"localhost\", \"tester\", \"TestPass\"); echo $mysqli->host_info; ?>" > /var/www/html/db_test.php'
Назначьте правильные права файлу, чтобы веб-сервер мог его прочитать:
sudo chown www-data:www-data /var/www/html/db_test.php
В процессе выполнения скрипта происходит несколько действий. Сначала создаётся объект подключения к MySQL через функцию mysqli, где параметры указывают на локальный сервер БД, пользователя tester и установленный пароль. Затем выводится результат подключения через свойство host_info — при успешном соединении оно возвращает строку вида localhost via TCP/IP, подтверждая использование сетевого протокола.
Для проверки откройте в браузере http://IP_вашего_сервера/db_test.php. Успешный результат покажет текст «localhost via TCP/IP» без каких-либо ошибок. Если же возникнут проблемы, их диагностика зависит от типа сообщения, например, ошибка «Access denied for user» указывает на неверный пароль, «No such file or directory» свидетельствует о неработающей службе MySQL, а «Class 'mysqli' not found» означает отсутствие модуля php-mysql.
Успешное выполнение теста подтверждает, что:
- веб-сервер Apache обрабатывает PHP-скрипты;
- модуль взаимодействия с MySQL активен;
- сервер БД принимает подключения;
- права доступа к файлам настроены корректно.
После проверки немедленно удалите тестовый файл, поскольку он содержит пароль root в открытом виде:
sudo rm /var/www/html/db_test.php
Также удалите пользователя:
sudo mysql -e "DROP USER 'tester'@'localhost';"
Для постоянных тестовых сред используйте безопасную альтернативу — консольную проверку без создания файлов:
php -r '$c = new mysqli("localhost", "tester", "TestPass"); echo $c ? "OK" : $c->connect_error;'
Команда выведет OK при успешном подключении или описание ошибки при проблемах.
Полезные дополнения
После базовой настройки LAMP добавьте два инструмента, которые значительно упростят разработку и тестирование веб-приложений. Хотя они не входят в стандартный стек, их установка займёт менее 2 минут и сразу повысит эффективность работы.
Composer. Composer — менеджер зависимостей для PHP. Выполните команду для его установки:
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
Что это даёт:
- управление библиотеками через composer.json;
- автозагрузка классов PSR-4;
- интеграция с фреймворками (Laravel, Symfony);
- быстрая установка пакетов:
composer require guzzlehttp/guzzle
Certbot. Certbot автоматически устанавливает и управляет бесплатными SSL-сертификатами от Let's Encrypt. В тестовой среде SSL-сертификат нужен в нескольких случаях: для тестирования HTTPS-редиректов, проверки смешанного контента (mixed content) и при работе с API, требующими шифрования. Установите необходимые пакеты:
sudo apt install -y certbot python3-certbot-apache
Генерация сертификата:
sudo certbot --apache -d ваш-домен.com
Для локальных тестовых сред без доменного имени используйте самоподписанные сертификаты:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/localhost.key \
-out /etc/ssl/certs/localhost.crt
После генерации сертификата добавьте в /etc/apache2/sites-available/000-default.conf:
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/ssl/certs/localhost.crt
SSLCertificateKeyFile /etc/ssl/private/localhost.key
# остальные настройки
</VirtualHost>
Убедитесь, что в apache2.conf или ports.conf есть Listen 443.
Включите модуль SSL:
sudo a2enmod ssl
И перезапустите Apache:
sudo systemctl restart apache2
Заключение
Быстрая установка LAMP-стека на Ubuntu 24.04 — отличный способ оперативно развернуть тестовую среду без лишней настройки. Однако даже в локальных или временных проектах важно учитывать базовые меры безопасности: задать пароль для root-пользователя MySQL, ограничить доступ к файлам и удалить тестовые учётные данные. Добавив Composer и SSL-сертификаты, вы получите полноценную площадку для разработки и отладки.
Такой подход позволяет быстро проверять гипотезы, демонстрировать прототипы и готовить проекты к продакшену, не рискуя основной инфраструктурой.
Читайте в блоге:
- Топ-10 команд для админа Ubuntu 24.04, без которых не обойтись
- Настройка ZRAM в Ubuntu 24.04 LTS на VPS
- CI/CD на базе Ubuntu 24.04 LTS: GitHub Actions, Docker, NGINX