Установка и настройка LAMP-сервера на Ubuntu 24.04 LTS

Установка и настройка LAMP-сервера на Ubuntu 24.04 LTS

Разбираем установку и базовую настройку LAMP на Ubuntu 24.04. Вы узнаете, как подготовить систему, установить компоненты (Apache, MySQL, PHP) и оптимизировать их работу для современных веб-приложений.

Введение

LAMP-стек — проверенная временем платформа для веб-разработки, объединяющая четыре ключевых компонента: Linux как операционную систему, Apache в роли веб-сервера, MySQL для управления базами данных и PHP для создания динамических страниц.

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

Почему выбирают VPS от AdminVPS:

✓ Дешевле физического сервера

✓ Более гибкий и мощный, чем обычный хостинг

✓ Бесплатная защита от DDoS и техподдержка 24/7

✓ Масштабируется под любые задачи

Виртуальный сервер VPS/VDS — ваш личный сервер для сайтов, магазинов, ботов и других проектов.

Подготовка сервера

Перед установкой компонентов стека необходимо подготовить операционную систему, поэтому начнём с обновления:

sudo apt update && sudo apt upgrade -y

apt update запрашивает актуальные данные о пакетах из репозиториев, apt upgrade обновляет установленные пакеты до последних версий, флаг -y автоматически подтверждает действия.

Далее установите обязательные компоненты:

sudo apt install -y software-properties-common

software-properties-common добавляет поддержку PPA-репозиториев (потребуется для PHP).

Ограничьте доступ к серверу, настроив файрвол:

sudo ufw allow ssh
sudo ufw enable

Так вы разрешаете SSH-подключения (обязательно перед активацией файрвола!) и включаете файрвол с сохранением правил после перезагрузки.

Убедитесь, что правила применены корректно:

sudo ufw status verbose

Ожидаемый вывод:

Важно:

  • Всегда разрешайте SSH до включения UFW, чтобы не потерять доступ к серверу.
  • Для продакшен-сред рекомендуется сменить порт SSH по умолчанию.
  • Команды выполняются под sudo — это гарантирует необходимые привилегии.

Установка компонентов LAMP

Apache

Перейдём к установке Apache — веб-сервера, который является основой LAMP-стека. Выполните команду установки:

sudo apt install -y apache2

Что происходит при установке:

  • пакет apache2 и его зависимости скачиваются из репозиториев Ubuntu;
  • автоматически создаются:
    • системная служба /lib/systemd/system/apache2.service;
    • конфигурационные файлы в /etc/apache2/;
    • корневая веб-директория /var/www/html/;
  • сервис apache2 автоматически запускается после установки.

Затем разрешите веб-трафик в UFW командой:

sudo ufw allow 'Apache Full'

Эта команда эквивалентна allow http (порт 80 для HTTP) и allow https (порт 443 для HTTPS).

Убедитесь, что служба активна:

systemctl status apache2

Ожидаемый вывод:

Дополнительно проверьте установку через браузер. Откройте http://IP_вашего_сервера — должна появиться страница «Apache2 Ubuntu Default Page».

Проверка версии:

apache2 -v

Далее выполните настройки, критические для безопасности сервера. Отключите вывод версии сервера в заголовках:

echo "ServerTokens Prod" | sudo tee -a /etc/apache2/conf-enabled/security.conf
echo "ServerSignature Off" | sudo tee -a /etc/apache2/conf-enabled/security.conf
sudo systemctl restart apache2

Запретите доступ к служебным каталогам:

sudo sed -i 's/Options Indexes FollowSymLinks/Options FollowSymLinks/' /etc/apache2/apache2.conf

Включите модуль mod_rewrite и перезапустите Apache:

sudo a2enmod rewrite
sudo systemctl restart apache2

Важно:

  • Apache автоматически добавляется в автозагрузку.
  • Основной конфигурационный файл — /etc/apache2/apache2.conf.
  • Виртуальные хосты настраиваются в /etc/apache2/sites-available/.
  • Логи ошибок хранятся в /var/log/apache2/error.log

MySQL

MySQL — система управления реляционными базами данных, которая обеспечивает хранение информации для веб-приложения.

Установка сервера MySQL:

sudo apt install -y mysql-server

После установки:

  • автоматически запускается системная служба mysql;
  • создаются конфигурационные файлы в /etc/mysql/;
  • основные исполняемые файлы размещаются в /usr/bin/.

Для базовой защиты выполните скрипт:

sudo mysql_secure_installation

Настройка проходит в несколько шагов:

  • пароль root-пользователя — установите сложный пароль (длиной от 12 символов, включающий цифры, буквы в разном регистре и спецсимволы);
  • удаление анонимных пользователей? → выберите «да» (Y);
  • запретить root-логин удалённо? → Y (настройка, критичная для безопасности!);
  • удалить тестовую базу данных? → Y;
  • перезагрузить таблицы привилегий? → Y.

Создайте пользователя для веб-приложений. Войдите в консоль MySQL:

sudo mysql -u root -p

Выполните SQL-команды:

CREATE USER 'webadmin'@'localhost' IDENTIFIED BY 'пароль';
GRANT ALL PRIVILEGES ON *.* TO 'webadmin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;

Что они делают:

  • CREATE USER — создаёт нового пользователя webadmin с доступом только с локального хоста;
  • GRANT ALL PRIVILEGES — даёт полные права на все базы; это уместно в тестовых средах, но в продакшене давайте только минимально необходимые права, например:
GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, INDEX ON *.* TO 'webadmin'@'localhost';
  • FLUSH PRIVILEGES — применяет изменения прав доступа.

После этого проверьте статус службы:

systemctl status mysql

Должен быть статус active (running).

Проверьте подключение под новым пользователем:

mysql -u webadmin -p

Введите пароль и убедитесь, что консоль доступна.

Критически важные настройки безопасности:

  • обязательно отключайте удалённый root-доступ (это уже сделано в secure_installation);
  • настройте биндинг только на localhost:
sudo sed -i 's/bind-address.*/bind-address = 127.0.0.1/' /etc/mysql/mysql.conf.d/mysqld.cnf
  • установите лимит соединений для предотвращения DDoS:
echo "max_connections = 100" | sudo tee -a /etc/mysql/mysql.conf.d/mysqld.cnf
sudo systemctl restart mysql

Чтобы оптимизировать производительность серверов с 2-4 ГБ RAM, добавьте в /etc/mysql/mysql.conf.d/mysqld.cnf:

[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
query_cache_type = 1
query_cache_size = 64M

Рекомендации:

  • Всегда используйте разные пароли для root и остальных пользователей, меняйте их раз в несколько месяцев.
  • Для продакшен-сред замените GRANT ALL на минимально необходимые привилегии.
  • Регулярно создавайте бекапы баз данных.

PHP

PHP — язык сценариев, который превращает статические страницы в динамические веб-приложения. Версия PHP на Ubuntu 24.04 — 8.3.

Установка базовых пакетов:

sudo apt install -y php libapache2-mod-php php-mysql php-curl php-zip

Что устанавливается:

  • php — основной пакет PHP 8.3;
  • libapache2-mod-php — модуль интеграции PHP с Apache;
  • php-mysql — драйвер для работы с MySQL/MariaDB;
  • php-curl — библиотека для HTTP-запросов (обязательна для CMS);
  • php-zip — поддержка работы с архивами.

Модуль libapache2-mod-php активируется автоматически, Apache перезагрузится для применения изменений. Конфигурация будет размещена в /etc/php/8.3/.

Для проверки создайте тестовый файл:

echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

Затем откройте в браузере http://ваш_сервер/info.php. Вы должны увидеть страницу с заголовком «PHP Version 8.3.x», разделы Core, curl, mysqlnd, zip, таблицу с параметрами конфигурации.

После установки уделите внимание безопасности. Отключите опасные функции:

sudo sed -i 's/;disable_functions =/disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_multi_exec,parse_ini_file,show_source/' /etc/php/8.3/apache2/php.ini

Настройте параметры файловых операций, например:

sudo tee -a /etc/php/8.3/apache2/php.ini <<EOF
file_uploads = On
upload_max_filesize = 20M
post_max_size = 22M
max_execution_time = 30
max_input_time = 60
memory_limit = 256M
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
EOF

Создайте лог-файл и назначьте права:

sudo touch /var/log/php_errors.log
sudo chown www-data:www-data /var/log/php_errors.log
sudo chmod 640 /var/log/php_errors.log

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

  • php-gd — работа с изображениями,
  • php-intl — интернационализация,
  • php-mbstring — многобайтовые строки,
  • php-xml — обработка XML,
  • php-soap — SOAP-сервисы.

Команда для их установки:

sudo apt install -y php-gd php-intl php-mbstring php-xml php-soap

Для проверки работы с MySQL, создайте тестовый скрипт:

cat <<EOF | sudo tee /var/www/html/dbtest.php
<?php
$mysqli = new mysqli('localhost', 'webadmin', 'пароль');
if ($mysqli->connect_error) {
    die('Ошибка подключения: ' . $mysqli->connect_error);
}
echo 'Успешное подключение к MySQL! Версия сервера: ' . $mysqli->server_version;
EOF

В этом скрипте создаётся соединение с MySQL-сервером на localhost с использованием пользователя webadmin и его пароля. Откройте http://ваш_сервер/dbtest.php — если подключение не удастся, выведется сообщение об ошибке и выполнение скрипта прекратится, при успешном подключении появится сообщение «Успешное подключение к MySQL!» и версия сервера MySQL.

После проверки удалите тестовые файлы:

sudo rm /var/www/html/info.php /var/www/html/dbtest.php

Для продакшен-сред используйте отдельные пользовательские php.ini для каждого сайта. Также регулярно обновляйте PHP:

sudo apt update && sudo apt upgrade php*

Интеграция компонентов LAMP

Теперь настроим взаимодействие Apache, PHP и MySQL для работы с реальным веб-приложением. Начнём с создания виртуального хоста Apache — контейнера для вашего сайта.

Создайте корневую директорию для проекта:

sudo mkdir -p /var/www/project
sudo chown -R www-data:www-data /var/www/project
sudo chmod -R 755 /var/www/project

Создайте конфигурационный файл:

sudo nano /etc/apache2/sites-available/project.conf

Вставьте конфигурацию:

<VirtualHost *:80>
    ServerAdmin admin@yoursite.com
    ServerName yourdomain.com
    ServerAlias www.yourdomain.com
    # Корневая директория сайта
    DocumentRoot /var/www/project
    # Настройки логирования
    ErrorLog ${APACHE_LOG_DIR}/project_error.log
    CustomLog ${APACHE_LOG_DIR}/project_access.log combined
    # Параметры доступа к директории
    <Directory /var/www/project>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
        # Настройки для CMS (WordPress, Joomla и т.д.)
        <IfModule mod_rewrite.c>
            RewriteEngine On
            RewriteBase /
            RewriteRule ^index\.php$ - [L]
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule . /index.php [L]
        </IfModule>
    </Directory>
</VirtualHost>

Активируйте конфигурацию:

sudo a2ensite project.conf
sudo a2dissite 000-default.conf
sudo systemctl reload apache2

Напишем тестовый скрипт для проверки подключения к базе данных. Создайте файл db_test.php:

sudo nano /var/www/project/db_test.php

Вставьте в него:

<?php
// Конфигурация подключения
$host = 'localhost';
$user = 'webadmin';
$password = 'пароль';
$database = 'test_db';
try {
    // Создание подключения
    $mysqli = new mysqli($host, $user, $password);
    // Проверка соединения
    if ($mysqli->connect_error) {
        throw new Exception("Ошибка подключения: " . $mysqli->connect_error);
    }
    echo "<h1>Успешное подключение к MySQL!</h1>";
    echo "<p>Версия сервера: " . $mysqli->server_info . "</p>";
    // Создание тестовой базы
    $mysqli->query("CREATE DATABASE IF NOT EXISTS $database");
    $mysqli->select_db($database);
    // Создание таблицы
    $mysqli->query("CREATE TABLE IF NOT EXISTS lamp_test (
        id INT AUTO_INCREMENT PRIMARY KEY,
        message VARCHAR(255) NOT NULL,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    )");
    // Вставка данных
    $message = "Привет от LAMP на Ubuntu 24.04!";
    $mysqli->query("INSERT INTO lamp_test (message) VALUES ('$message')");
    // Чтение данных
    $result = $mysqli->query("SELECT * FROM lamp_test");
    echo "<h2>Тестовые данные из базы:</h2>";
    echo "<ul>";
    while ($row = $result->fetch_assoc()) {
        echo "<li>" . htmlspecialchars($row['message']) . " (ID: " . $row['id'] . ")</li>";
    }
    echo "</ul>";
    // Закрытие соединения
    $mysqli->close();
} catch (Exception $e) {
    echo "<h1>Ошибка:</h1>";
    echo "<p>" . $e->getMessage() . "</p>";
    echo "<p>Проверьте:</p>";
    echo "<ul>";
    echo "<li>Доступность MySQL</li>";
    echo "<li>Правильность логина/пароля</li>";
    echo "<li>Привилегии пользователя</li>";
    echo "</ul>";
}
?>

Откройте в браузере http://ваш_сервер/db_test.php. Должны отобразиться:

  • заголовок «Успешное подключение к MySQL!»;
  • версия сервера MySQL;
  • список тестовых данных из таблицы lamp_test.

После проверки удалите тестовый скрипт и тестовую базу данных:

sudo rm /var/www/project/db_test.php
mysql -u webadmin -p -e "DROP DATABASE test_db" 

Для продакшен-сред ограничьте привилегии пользователя:

REVOKE ALL PRIVILEGES ON *.* FROM 'webadmin'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX
ON project_db.* TO 'webadmin'@'localhost';
FLUSH PRIVILEGES;

Рекомендации по безопасности: 

  • Всегда используйте подготовленные запросы для работы с БД:
$stmt = $mysqli->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->bind_param("ss", $name, $email);
$stmt->execute();
  • Настройте отдельный конфиг для PHP-FPM:
sudo nano /etc/php/8.3/fpm/pool.d/project.conf

Его содержимое:

[project]
user = www-data
group = www-data
listen = /run/php/php8.3-fpm-project.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 20
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 8
  • Регулярно обновляйте компоненты:
sudo apt update && sudo apt upgrade apache2 mysql-server php*

После этого LAMP-стек настроен и готов к развёртыванию веб-приложений.

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

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

Нужен VPS сервер?

Арендуйте мощный VPS сервер для ваших проектов! Быстрая настройка, высокая производительность и надежная поддержка 24/7. Начните прямо сейчас!

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

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