
LAMP (Linux, Apache, MySQL/MariaDB, PHP) — это классический и надежный стек для веб-сайтов, API и многих популярных CMS-платформ. В этом руководстве вы настроите Apache, обеспечите безопасность MySQL, установите модули PHP, настроите виртуальный хост Apache, протестируете связь между PHP и базой данных и, при желании, включите HTTPS с помощью Let’s Encrypt.
Для производственных проектов начните с стабильного VPS на Linux, обладающего достаточной производительностью процессора, оперативной памяти и диска, чтобы обеспечить отзывчивость веб-сервера и базы данных под нагрузкой.
Совет: сначала выполните начальное обновление. Это снижает вероятность проблем при установке и устанавливает патчи безопасности.
sudo apt update && sudo apt -y upgrade
sudo apt install -y apache2
sudo systemctl enable --now apache2
# Quick checks
sudo systemctl status apache2 --no-pager
curl -I http://127.0.0.1

Вы должны увидеть HTTP/1.1 200 OK. Корневой каталог веб-сайта по умолчанию обычно находится по адресу /var/www/html/.
Если вы используете UFW (Ubuntu/Debian), примените политику «default-deny» и разрешите только необходимые порты. Всегда сначала разрешайте SSH, чтобы не заблокировать себе доступ.
sudo apt install -y ufw
# Safe defaults
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Allow SSH first
sudo ufw allow OpenSSH
# Allow Apache ports
sudo ufw allow 'Apache Full'
# Enable and verify
sudo ufw enable
sudo ufw status verbose

Если вы не используете UFW, убедитесь, что порты 80/443 разрешены в облачном брандмауэре/группе безопасности вашего провайдера.
В Debian/Ubuntu mysql-server MySQL уже установлен (часто с безопасной аутентификацией по умолчанию). Если вы предпочитаете MariaDB, вы можете установить mariadb-server ее вместо MySQL.
sudo apt install -y mysql-server
sudo systemctl enable --now mysql
# Security hardening wizard
sudo mysql_secure_installation
Рекомендуемые ответы в mysql_secure_installation:

Создайте выделенную базу данных и выделенного пользователя, имеющего только необходимые привилегии. Избегайте использования учетной записи root MySQL в приложениях.
sudo mysql
В консоли MySQL:
CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD_HERE';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Примечание по безопасности: используйте отдельного пользователя для удаленного доступа к базе данных, например 'appuser'@'%' только в случае крайней необходимости, а затем ограничьте его доступ с помощью правил брандмауэра и настроек привязки MySQL. В большинстве случаев держите MySQL в частном и локальном режиме.
Установите PHP и общие модули, используемые CMS и фреймворками. Позже вы сможете добавить другие в зависимости от вашего приложения.
sudo apt install -y php libapache2-mod-php php-mysql php-cli php-curl php-xml php-mbstring php-zip php-gd php-intl
Создайте временный phpinfo() файл, чтобы проверить, работает ли PHP через Apache:
echo "" | sudo tee /var/www/html/info.php
Откройте http:// в браузере и убедитесь, что страница загрузилась. Затем удалите файл (его сохранение представляет угрозу безопасности):
sudo rm -f /var/www/html/info.php

Для производственной среды лучше всего создать отдельный каталог для каждого домена и настроить отдельный виртуальный хост.
# Replace example.com with your domain
sudo mkdir -p /var/www/example.com/public_html
sudo chown -R $USER:$USER /var/www/example.com
sudo chmod -R 755 /var/www/example.com
# Simple test page
echo "" > /var/www/example.com/public_html/index.php
Создайте файл конфигурации /etc/apache2/sites-available/example.com.conf:
sudo nano /etc/apache2/sites-available/example.com.conf
Пример виртуального хоста:
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
Options FollowSymLinks
AllowOverride All
Require all granted
ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined

Примечание: AllowOverride All требуется только в том случае, если вы используете .htaccess (перенаправления, правила кэширования и т. д.). Если вам это не нужно, установите AllowOverride None для лучшей производительности и безопасности.
sudo a2ensite example.com.conf
sudo a2enmod rewrite headers
# Optional: disable default site to avoid conflicts
# sudo a2dissite 000-default.conf
sudo apache2ctl configtest
sudo systemctl reload apache2

Теперь откройте свой домен (или IP-адрес сервера) и убедитесь, что загружается страница «Hello from LAMP!».
Создайте /var/www/example.com/public_html/dbtest.php (используйте имя базы данных/имя пользователя/пароль):
PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);
echo "1";
} catch (Throwable $e) {
http_response_code(500);
echo "DB connection failed";
}
Откройте http://example.com/dbtest.php → вы должны увидеть 1. Затем удалите файл (он нужен только для тестирования):
rm -f /var/www/example.com/public_html/dbtest.php

Если ваш домен указывает на сервер и порт 80 доступен, установите бесплатный сертификат с помощью Certbot. Он также настроит перенаправления и автоматическое обновление.
sudo apt update
sudo apt install -y certbot python3-certbot-apache
sudo certbot --apache -d example.com -d www.example.com --redirect
--agree-tos -m admin@example.com --no-eff-email
# Test renewal
sudo certbot renew --dry-run
Отредактируйте конфигурацию PHP в Apache (путь зависит от версии): /etc/php/*/apache2/php.ini. Рекомендуемые настройки по умолчанию:
expose_php = Offmemory_limit = 256M (настройте в соответствии с нагрузкой вашего приложения)upload_max_filesize и post_max_size в соответствии с вашей CMSdate.timezone = UTC (или вашему местному часовому поясу)sudo systemctl reload apache2
В системах на базе RHEL httpd, в качестве базы данных обычно используется MariaDB, а брандмауэр, как правило, firewalld.
sudo dnf -y update
sudo dnf install -y httpd mariadb-server php php-mysqlnd php-cli php-gd php-mbstring php-xml php-opcache
sudo systemctl enable --now httpd mariadb
# Open firewall
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
# Check Apache
curl -I http://127.0.0.1
Настройки виртуального хоста обычно находятся в /etc/httpd/conf.d/ (например, /etc/httpd/conf.d/example.com.conf), затем перезапустите httpd.
info.php, dbtest.php) удалены.Нужна стабильная платформа для Apache, MySQL и PHP? Начните с надежного VPS на базе Linux и разверните чистый стек LAMP менее чем за час, следуя приведенным выше инструкциям.