Создание LAMP окружения в дистрибутиве Ubuntu

Раздел: Системное администрирование -> Установка и настройка

Установка LAMP через менеджер пакетов (Ubuntu)

Этот метод подходит для большинства серверов под управлением Ubuntu или Debian. Позволяет получить рабочий стек за несколько минут с минимальными усилиями по настройке.

  1. Обновление списка пакетов:
    sudo apt update

    установка сервера apache mysql php (установка сервера apache, mysql и php)

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

  2. Установка Apache2:
    sudo apt install apache2 -y

    создание php сервера (создание и настройка php сервера)

    После завершения веб-сервер будет запущен автоматически. Проверить статус можно командой systemctl status apache2.

    Ошибка: не удалось определить FQDN сервера

    В логах может появиться предупреждение Could not reliably determine the server's fully qualified domain name. Для исправления добавьте строку ServerName 127.0.0.1 в файл /etc/apache2/apache2.conf и перезапустите Apache: sudo systemctl restart apache2.

  3. Установка MySQL-сервера:
    sudo apt install mysql-server -y

    Php mysql ubuntu (php и mysql на ubuntu)

    База данных запустится автоматически. Желательно сразу выполнить скрипт безопасной настройки:

    sudo mysql_secure_installation

    Скрипт задаст вопросы о пароле root, удалении анонимных пользователей, отключении удалённого входа root и удалении тестовой базы.

    Проблема: сброс пароля root MySQL

    Если вы забыли пароль, остановите MySQL (sudo systemctl stop mysql), запустите в безопасном режиме sudo mysqld_safe --skip-grant-tables, войдите без пароля (mysql -u root), смените пароль командой ALTER USER 'root'@'localhost' IDENTIFIED BY 'новый_пароль'; и перезапустите службу.

  4. Установка PHP и необходимых модулей:
    sudo apt install php libapache2-mod-php php-mysql -y

    Дополнительно можно установить модули для работы с изображениями, кешированием и т.д.:

    sudo apt install php-gd php-curl php-xml php-mbstring -y

    После установки модулей перезапускаем Apache: sudo systemctl restart apache2.

  5. Проверка работоспособности PHP:

    Создайте тестовый файл в корневой директории веб-сервера:

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

    Добавьте содержимое: <?php phpinfo(); ?>. Затем откройте браузер и перейдите по адресу http://ваш_сервер/info.php. Должна отобразиться страница с информацией о PHP.

    Ошибка: файл PHP отображается как текст

    Убедитесь, что модуль PHP включён: sudo a2enmod php8.x (версия может отличаться) и перезапустите Apache. Также проверьте, что файл имеет расширение .php.

Как установить LAMP-стек одной командой через tasksel?

Для быстрой автоматической установки используется утилита tasksel. Это удобно при первоначальной настройке сервера или в сценариях, где не нужен тонкий контроль версий.

sudo apt install tasksel
sudo tasksel install lamp-server

После выполнения будут установлены Apache, MySQL, PHP и необходимые модули. Дополнительная ручная настройка может потребоваться только для MySQL (пароль root) и при желании изменить конфигурацию веб-сервера.

Как установить LAMP в CentOS/RHEL (yum/dnf)?

Для систем на базе Red Hat последовательность отличается названиями пакетов и менеджером. Пример для CentOS 9 Stream:

sudo dnf install httpd -y
sudo systemctl enable --now httpd

sudo dnf install mysql-server -y
sudo systemctl enable --now mysqld
sudo mysql_secure_installation

sudo dnf install php php-mysqlnd -y
sudo dnf install php-xml php-mbstring php-gd -y
sudo systemctl restart httpd

В CentOS модуль PHP подключается через php-mysqlnd, а не php-mysql. Настройки конфигурации находятся в /etc/httpd/ и /etc/php.ini.

Сборка из исходных кодов (для нестандартных конфигураций)

Этот подход выбирают, когда требуется поддержка нестандартных опций компиляции (например, добавление редких расширений PHP) или критична минимальная версия. Рассмотрим сборку PHP 8.3:

# Установка зависимостей
sudo apt install build-essential libxml2-dev libsqlite3-dev libssl-dev -y

# Загрузка исходного кода
wget https://www.php.net/distributions/php-8.3.0.tar.gz
tar -xzf php-8.3.0.tar.gz
cd php-8.3.0

# Конфигурация, сборка и установка
./configure --with-apxs2=/usr/bin/apxs --with-mysqli --with-pdo-mysql --enable-mbstring --with-openssl
make -j$(nproc)
sudo make install
sudo cp php.ini-production /usr/local/lib/php.ini
sudo systemctl restart apache2

Важно: перед сборкой Apache должен быть установлен с поддержкой модуля mod_so (обычно включено). После установки нужно проверить, что модуль PHP загружается через файл /etc/apache2/mods-available/php8.3.load.

Ошибка: apxs не найден

Если при ./configure возникает ошибка apxs: command not found, установите пакет apache2-dev: sudo apt install apache2-dev.

Использование PHP-FPM вместо модуля mod_php

PHP-FPM (FastCGI Process Manager) позволяет изолировать процессы PHP и повышает производительность при высоких нагрузках. Установка и настройка на Ubuntu:

sudo apt install php-fpm php-mysql -y

# Включение модуля proxy_fcgi и настройка виртуального хоста
sudo a2enmod proxy_fcgi setenvif
sudo systemctl restart apache2

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

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost/"
    </FilesMatch>
    ...
</VirtualHost>

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

Настройка виртуальных хостов (Name-based)

Размещение нескольких сайтов на одном сервере требует создания виртуальных хостов. Пример для сайта site1.local:

# Создание каталогов
sudo mkdir -p /var/www/site1/{public_html,logs}
sudo chown -R $USER:$USER /var/www/site1

# Конфигурация хоста
sudo nano /etc/apache2/sites-available/site1.conf

Содержимое файла site1.conf:

<VirtualHost *:80>
    ServerName site1.local
    DocumentRoot /var/www/site1/public_html
    ErrorLog ${APACHE_LOG_DIR}/site1_error.log
    CustomLog ${APACHE_LOG_DIR}/site1_access.log combined
</VirtualHost>

Активируем сайт и перезагружаем Apache:

sudo a2ensite site1.conf
sudo systemctl reload apache2

На локальной машине нужно добавить в файл /etc/hosts строку 127.0.0.1 site1.local.

Расширенные примеры настройки и компиляции

Установка Apache с модулем mod_security

ModSecurity обеспечивает защиту веб-приложений (WAF). Установка через apt:

Пример
sudo apt install libapache2-mod-security2 -y
sudo a2enmod security2
sudo systemctl restart apache2

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

Пример
sudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
sudo nano /etc/modsecurity/modsecurity.conf
# изменить SecRuleEngine DetectionOnly на On (или оставить DetectionOnly)
sudo systemctl restart apache2

Проверка работы: откройте любой сайт и проверьте заголовки ответа. Должна появиться строка X-Content-Type-Options: nosniff и другие.

Компиляция MySQL 8 с поддержкой групповой репликации

Сборка MySQL из исходников даёт возможность включить экспериментальные функции. Пример для группы репликации (InnoDB Cluster):

Пример
# Загрузка исходного кода MySQL 8.0
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-boost-8.0.35.tar.gz
tar -xzf mysql-boost-8.0.35.tar.gz
cd mysql-8.0.35

# Сборка с поддержкой групповой репликации
mkdir build && cd build
cmake .. -DWITH_BOOST=../boost -DDOWNLOAD_BOOST=1 -DWITH_GROUP_REPLICATION=ON
make -j$(nproc)
sudo make install

# Инициализация каталога данных
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql
sudo /usr/local/mysql/bin/mysql_ssl_rsa_setup

После сборки настройка групповой репликации производится через плагин group_replication. Подробная настройка выходит за рамки статьи, но сам процесс установки позволяет использовать нестабильные возможности.

Сборка PHP с поддержкой OPcache и JIT

PHP 8.x включает JIT-компиляцию. Для её включения при сборке передаются соответствующие флаги:

Пример
./configure \
    --with-apxs2=/usr/bin/apxs \
    --with-mysqli \
    --with-pdo-mysql \
    --enable-opcache \
    --enable-opcache-jit \
    --with-openssl \
    --enable-mbstring
make -j$(nproc)
sudo make install
sudo cp php.ini-production /usr/local/lib/php.ini

В php.ini настройте JIT:

Пример
opcache.jit = tracing
opcache.jit_buffer_size = 100M

Проверить работу JIT можно через файл phpinfo: в разделе OPcache появится строка JIT с активным статусом.

Настройка удалённого доступа к MySQL с SSL

Для безопасного подключения к MySQL из другого сервера необходимо разрешить удалённые соединения и настроить TLS. Пример настройки на Ubuntu:

Пример
# Редактирование my.cnf
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# Изменить bind-address = 0.0.0.0
# Раскомментировать строки:
# ssl-ca = /etc/mysql/ca-cert.pem
# ssl-cert = /etc/mysql/server-cert.pem
# ssl-key = /etc/mysql/server-key.pem

sudo systemctl restart mysql

Создание сертификатов (самоподписанных):

Пример
sudo mysql_ssl_rsa_setup --uid=mysql
sudo chown -R mysql:mysql /var/lib/mysql/*.pem
sudo systemctl restart mysql

Проверка: подключитесь к MySQL с клиента с опцией --ssl-mode=REQUIRED. Статус SSL покажет Cipher in use is ....

Включение и тестирование модуля mod_rewrite

Модуль перезаписи URL часто используется в CMS (WordPress, Joomla). Включение на Ubuntu:

Пример
sudo a2enmod rewrite
sudo systemctl restart apache2

Пример использования в .htaccess для перенаправления HTTP на HTTPS:

Пример
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Проверка: создайте файл /var/www/html/.htaccess с содержимым выше и перейдите на http://ваш_сайт - должно произойти перенаправление на защищённую версию.

Установка сервера Apache, MySQL и PHP - comments

En
установка сервера apache mysql php (php)