Готовый docker-compose.yml: LEMP стек (Nginx + PHP 8.3 FPM + MariaDB 11 + Redis + SSL Certbot)
Production-ready docker-compose.yml для полного LEMP стека: Nginx, PHP 8.3-FPM, MariaDB 11, Redis 7 и Certbot для автоматического выпуска Let's Encrypt SSL.
Интерактивный генератор под ваши параметры
Параметры подставляются в код в реальном времени
docker-compose.yml
# docker-compose.yml
# Полный LEMP + Redis + SSL стек (SysKit.ru)
version: '3.8'
services:
nginx:
image: nginx:alpine
container_name: lemp_nginx
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./app:/var/www/html:ro
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- ./certbot/conf:/etc/letsencrypt:ro
- ./certbot/www:/var/www/certbot:ro
depends_on:
- php
networks:
- lemp_net
php:
image: php:8.3-fpm-alpine
container_name: lemp_php
restart: always
volumes:
- ./app:/var/www/html
- ./php/php.ini:/usr/local/etc/php/conf.d/custom.ini:ro
environment:
- DB_HOST=mariadb
- DB_DATABASE=app_db
- DB_USERNAME=app_user
- DB_PASSWORD=StrongSecretPassword2026!
- REDIS_HOST=redis
depends_on:
- mariadb
- redis
networks:
- lemp_net
mariadb:
image: mariadb:11
container_name: lemp_mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: StrongSecretPassword2026!_root
MYSQL_DATABASE: app_db
MYSQL_USER: app_user
MYSQL_PASSWORD: StrongSecretPassword2026!
volumes:
- db_data:/var/lib/mysql
networks:
- lemp_net
redis:
image: redis:7-alpine
container_name: lemp_redis
restart: always
command: redis-server --maxmemory 256mb --maxmemory-policy allkeys-lru
volumes:
- redis_data:/data
networks:
- lemp_net
certbot:
image: certbot/certbot
container_name: lemp_certbot
volumes:
- ./certbot/conf:/etc/letsencrypt
- ./certbot/www:/var/www/certbot
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12d & wait $${!}; done;'"
networks:
lemp_net:
driver: bridge
volumes:
db_data:
redis_data:
Разбор ключевых директив конфигурации
Техническое обоснование директив и их прямое влияние на процессор (CPU), оперативную память (RAM) и дисковый ввод-вывод (NVMe I/O).
| Директива / Блок | Рекомендуемое значение | Зачем нужно и системное влияние (CPU / RAM / I-O) |
|---|---|---|
certbot renew loop |
Периодический certbot renew | Сервисный контейнер Certbot в фоне каждые 12 дней проверяет и автоматически перевыпускает SSL-сертификат до истечения срока. |
restart: unless-stopped |
unless-stopped | Обеспечивает автоматический перезапуск контейнеров при сбое демона Docker или перезагрузке VDS. |
logging / max-size: 10m |
max-size: 10m, max-file: 3 | Ограничивает размер логов контейнеров на диске, предотвращая переполнение дискового пространства NVMe (100% Disk Full). |
volumes / app_data |
named volume / local bind | Выносит базу данных и загружаемые файлы в постоянные тома, предотвращая потерю данных при обновлении контейнеров. |
Рекомендуемые системные требования VDS под этот стек
Расчет минимальной и оптимальной конфигурации виртуального сервера для стабильной работы без сбоев.
Оптимальный сайзинг: 2 vCPU, 4 GB RAM, 50 GB NVMe
Расчетная нагрузка: LEMP приложение до 15 000 хостов/день
2 CPU / 4 GB NVMe
Timeweb Cloud
Рекомендуемые ресурсы
2 vCPU /
4 GB RAM /
50 GB NVMe
2 vCPU / 4 GB RAM
Selectel
Рекомендуемые ресурсы
2 vCPU /
4 GB RAM /
50 GB NVMe
Turbo 4 GB
Beget
Рекомендуемые ресурсы
2 vCPU /
4 GB RAM /
50 GB NVMe
Онлайн-утилиты SysKit для проверки этого сервера
Протестируйте корректность применения конфигурации прямо сейчас в один клик.
Частые ошибки при настройке и их решение (FAQ)
Типовые проблемы вебмастеров и сисадминов при внедрении данной конфигурации.
Как выпустить первый сертификат Let's Encrypt через Certbot?
Выполните однократно: `docker compose run --rm certbot certonly --webroot -w /var/www/certbot -d example.com -d www.example.com --email admin@example.com --agree-tos`.
Как запустить и остановить стек в фоновом режиме?
Запуск: `docker compose up -d`. Остановка: `docker compose down`. Просмотр логов: `docker compose logs -f`.
Ошибка: Port already allocated (порт 80/443 занят)
Проверьте, не запущен ли локальный Nginx или Apache: `systemctl stop apache2` или `systemctl stop nginx`, либо измените внешний порт в `ports: ["8080:80"]`.
Рекомендуемые смежные конфигурации
Дополнительные рецепты и калькуляторы для полной оптимизации данного серверного стека.