opened image

LAMP-стек на Ubuntu: Apache + MySQL + PHP для начинающих

 

 

Установить Apache, MySQL и PHP на Ubuntu - задача на 20-30 минут при наличии чистого сервера. В этой статье пройдём весь путь: от установки пакетов до рабочего VirtualHost с SSL-сертификатом от Let's Encrypt.

 

 

Что понадобится

 

  • Сервер или VPS с Ubuntu 22.04 LTS или 24.04 LTS

  • Минимум 1 GB RAM, 10 GB диска

  • Root-доступ или пользователь с sudo

  • Зарегистрированный домен, если планируете SSL

 

 

Обновление системы

 

sudo apt update && sudo apt upgrade -y
sudo reboot

 

После перезагрузки подключитесь снова. Проверьте версию ядра:

uname -r
# 6.8.0-35-generic

 

 

 

 

Установка Apache

 

sudo apt install -y apache2
sudo systemctl enable apache2
sudo systemctl start apache2

 

Проверьте статус:

 

sudo systemctl status apache2

 

Откройте порты в файрволе:

 

sudo ufw allow 'Apache Full'
sudo ufw enable
sudo ufw status

 

Apache 2.4 теперь отвечает на порту 80. Перейдите по IP-адресу сервера в браузере - появится страница-заглушка «Apache2 Ubuntu Default Page».

 

Полезные команды управления Apache:

sudo apache2ctl configtest    # проверка синтаксиса конфигов
sudo systemctl reload apache2  # перезагрузка без прерывания
sudo apache2ctl -M             # список загруженных модулей

 

 

Установка MySQL 8

 

sudo apt install -y mysql-server
sudo systemctl enable mysql

 

Запустите скрипт начальной безопасности:

sudo mysql_secure_installation

 

Скрипт предложит:

  1. Настроить VALIDATE PASSWORD COMPONENT - выберите уровень 1 (MEDIUM) для продакшена

  2. Установить пароль root (или пропустить, если работаете через Unix-сокет)

  3. Удалить анонимных пользователей - Yes

  4. Запретить удалённый root-логин - Yes

  5. Удалить тестовую базу test - Yes

  6. Перезагрузить таблицы привилегий - Yes

 

mysql --version
# mysql  Ver 8.0.37-0ubuntu0.24.04.1

 

 

 

 

Установка PHP 8.3

 

Для Ubuntu 24.04 PHP 8.3 доступен в стандартных репозиториях. Для Ubuntu 22.04 добавьте PPA:

 

# Только для Ubuntu 22.04:
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update

 

Установите PHP и нужные модули:

sudo apt install -y php8.3 libapache2-mod-php8.3 php8.3-mysql \
  php8.3-curl php8.3-mbstring php8.3-xml php8.3-zip php8.3-gd \
  php8.3-intl php8.3-bcmath

 

libapache2-mod-php8.3 - это mod_php, который интегрирует PHP прямо в процесс Apache. В отличие от LEMP, где PHP-FPM работает отдельно, здесь PHP выполняется внутри Apache.

 

Перезапустите Apache и проверьте PHP:

sudo systemctl restart apache2
php --version
# PHP 8.3.6 (cli)

 

 

Тестовая страница phpinfo

 

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

 

Откройте http://YOUR_IP/info.php в браузере. Убедитесь, что в таблице отображается PHP Version 8.3.x и модуль mysqli или pdo_mysql активен. После проверки удалите файл:

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

 

 

Настройка VirtualHost

 

Создайте директорию для сайта:

sudo mkdir -p /var/www/example.com/public
sudo chown -R www-data:www-data /var/www/example.com
sudo chmod -R 755 /var/www/example.com

 

Создайте тестовый файл:

cat << 'EOF' | sudo tee /var/www/example.com/public/index.php
<?php
echo "<h1>LAMP работает!</h1>";
echo "<p>PHP " . PHP_VERSION . "</p>";
EOF

 

Создайте конфиг VirtualHost:

sudo nano /etc/apache2/sites-available/example.com.conf
<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public
    ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
    CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined

    <Directory /var/www/example.com/public>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

 

Активируйте хост и модуль rewrite:

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

 

 

Создание базы данных

sudo mysql -u root
CREATE DATABASE example_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'example_user'@'localhost' IDENTIFIED BY 'SecurePass_2024!';
GRANT ALL PRIVILEGES ON example_db.* TO 'example_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

 

 

Проверьте подключение из PHP. Создайте файл /var/www/example.com/public/dbtest.php:

<?php
$conn = new PDO('mysql:host=localhost;dbname=example_db', 'example_user', 'SecurePass_2024!');
echo "Подключение к MySQL: " . $conn->getAttribute(PDO::ATTR_SERVER_VERSION);

 

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

 

 

SSL через Certbot

 

Установите Certbot с плагином Apache:

sudo apt install -y certbot python3-certbot-apache

 

Получите сертификат:

sudo certbot --apache -d example.com -d www.example.com

 

Certbot автоматически:

  • Создаст сертификат Let's Encrypt (действителен 90 дней)

  • Добавит конфиг для порта 443

  • Настроит редирект с HTTP на HTTPS

 

 

Проверьте автопродление:

sudo certbot renew --dry-run

 

Если команда завершилась без ошибок, cron-задача (или systemd-таймер) продлит сертификат раньше истечения. Certbot сам добавляет таймер /etc/cron.d/certbot при установке.

 

 

 

 

Структура файлов после настройки

 

/var/www/example.com/public/    - корень сайта
/etc/apache2/sites-available/   - конфиги виртуальных хостов
/etc/apache2/sites-enabled/     - симлинки на активные хосты
/etc/letsencrypt/live/          - сертификаты Let's Encrypt
/var/log/apache2/               - логи доступа и ошибок

 

 

Итог

 

Рабочий LAMP-стек на Ubuntu включает Apache 2.4, MySQL 8.0, PHP 8.3 с mod_php и SSL-сертификат от Let's Encrypt. Стек подходит для любых PHP-приложений, особенно тех, которые активно используют .htaccess - WordPress, Laravel, Drupal. Для высоконагруженных сайтов стоит рассмотреть LEMP с PHP-FPM: Nginx потребляет меньше памяти при большом числе соединений.