Создание LAMP окружения в дистрибутиве Ubuntu
Установка LAMP через менеджер пакетов (Ubuntu)
Этот метод подходит для большинства серверов под управлением Ubuntu или Debian. Позволяет получить рабочий стек за несколько минут с минимальными усилиями по настройке.
-
Обновление списка пакетов:
sudo apt updateустановка сервера apache mysql php (установка сервера apache, mysql и php)
Перед началом установки необходимо убедиться, что репозитории актуальны.
-
Установка 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. -
Установка MySQL-сервера:
sudo apt install mysql-server -yPhp 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 'новый_пароль';и перезапустите службу. -
Установка 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. -
Проверка работоспособности 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://ваш_сайт - должно произойти перенаправление на защищённую версию.