Готовый docker-compose.yml: LEMP стек (Nginx + PHP 8.3 FPM + MariaDB 11 + Redis + SSL Certbot)

Обновлено: Август 2026 Стек: Docker Compose v2, Nginx, PHP 8.3 FPM, MariaDB 11, Redis 7 Проверено: Production-Ready

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:{{php_version}}-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={{db_name}}
      - DB_USERNAME={{db_user}}
      - DB_PASSWORD={{db_password}}
      - REDIS_HOST=redis
    depends_on:
      - mariadb
      - redis
    networks:
      - lemp_net

  mariadb:
    image: mariadb:11
    container_name: lemp_mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: {{db_password}}_root
      MYSQL_DATABASE: {{db_name}}
      MYSQL_USER: {{db_user}}
      MYSQL_PASSWORD: {{db_password}}
    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-сертификат до истечения срока.

Рекомендуемые системные требования VDS под этот стек

Расчет минимальной и оптимальной конфигурации виртуального сервера для стабильной работы без сбоев.

Оптимальный сайзинг: 2 vCPU, 4 GB RAM, 50 GB NVMe
Расчетная нагрузка: LEMP приложение до 15 000 хостов/день
Timeweb Cloud
2 CPU / 4 GB NVMe
Процессор: 2 vCPU
Память RAM: 4 GB RAM
Накопитель: 50 GB NVMe
🔷 Selectel
2 vCPU / 4 GB RAM
Процессор: 2 vCPU
Память RAM: 4 GB RAM
Накопитель: 50 GB NVMe
🟠 Beget
Turbo 4 GB
Процессор: 2 vCPU
Память RAM: 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`.