Обзор развертывания LEMP на сервере¶
Предпосылки и предварительные требования¶
- Сервер, работающий под управлением Ubuntu (или любой другой Linux‑дистрибутив на основе Debian).
- Установлены и настроены Docker и Docker Compose.
- У пользователя есть права суперпользователя (root или sudo).
- На диске должно быть достаточно свободного места для размещения файлов данных и веб‑содержимого.
Структура файлов и каталогов¶
/root/data – каталог для хранения данных MySQL
/root/webroot – каталог для размещения веб‑содержимого (доступен в контейнере как /var/www/html)
data/nginx/ – каталог для файлов конфигурации и переменных certbot
nginx-certbot.env – переменные окружения для certbot
user_conf.d/ – пользовательские конфигурации Nginx
nginx_secrets (docker‑volume)
– хранит сертификаты Let's Encrypt
compose.yml – файл Docker Compose, генерируемый из шаблона
Все каталоги /root/data и /root/webroot создаются с правами 0755 и владельцем root.
Права доступа и безопасность¶
- Каталоги
/root/dataи/root/webrootдоступны только пользователюrootи группыroot. Это защищает данные от случайного изменения. - Внутри контейнера LEMP используется переменная
MYSQL_ROOT_PASSWORD, которую задаёт администратор. Она должна храниться в надёжном месте (не в открытом тексте). - Сертификаты Let's Encrypt находятся в внешнем volume
nginx_secrets. Доступ к нему имеет только пользовательrootи процессы контейнера Nginx‑certbot.
Базы данных¶
- В контейнере MySQL 8.3 (из образа
adhocore/lemp:8.3) сохраняются данные в/root/data, который монтируется как/var/lib/mysql. - Порт 3306 контейнера проброшен на хост‑порт 3306, что позволяет подключаться к базе из внешних приложений.
- Дополнительно проброшен порт 5432 (PostgreSQL). Если база не используется, порт можно отключить.
Контейнеры Docker и их запуск¶
Создание сети¶
Контейнер LEMP¶
docker run -d \
--name lemp-stack \
--network lemp-net \
-p 88:80 \
-p 3306:3306 \
-p 5432:5432 \
-v /root/data:/var/lib/mysql \
-v /root/webroot:/var/www/html \
-e MYSQL_ROOT_PASSWORD=YOUR_PASSWORD \
--restart always \
adhocore/lemp:8.3
-
88:80 – HTTP‑доступ к веб‑страницам-
3306:3306 – доступ к MySQL-
5432:5432 – доступ к PostgreSQL (если нужно) - Volumes
/root/data:/var/lib/mysql– данные базы/root/webroot:/var/www/html– файлы веб‑сайта
Docker Compose – прокси с certbot¶
Файл compose.yml (сгенерированный из шаблона) выглядит так:
volumes:
nginx_secrets:
external: true
services:
nginx:
image: jonasal/nginx-certbot:latest
restart: unless-stopped
environment:
- CERTBOT_EMAIL=hkadm@hostkey.com
env_file:
- /data/nginx/nginx-certbot.env
network_mode: host
volumes:
- nginx_secrets:/etc/letsencrypt
- /data/nginx/user_conf.d:/etc/nginx/user_conf.d
Запуск:
Прокси серверы¶
- Nginx‑certbot (
jonasal/nginx-certbot:latest) работает в режимеhost‑network, поэтому слушает порты 80 и 443 напрямую. - Конфигурации пользователя размещаются в
/data/nginx/user_conf.d. Это удобно для создания виртуальных хостов и редиректов. - Сертификаты автоматически получаются и обновляются через Certbot, храниться они в внешнем volume
nginx_secrets.
Настройки прав, запуск, остановка и обновление¶
| Действие | Команда |
|---|---|
| Запустить LEMP‑контейнер | docker start lemp-stack |
| Остановить LEMP‑контейнер | docker stop lemp-stack |
| Обновить образ LEMP | docker pull adhocore/lemp:8.3docker restart lemp-stack |
| Запустить прокси‑контейнер | docker compose -f compose.yml up -d |
| Остановить прокси‑контейнер | docker compose -f compose.yml down |
| Обновить образ nginx‑certbot | docker pull jonasal/nginx-certbot:latestdocker compose -f compose.yml up -d |
Для полного обновления обоих контейнеров можно выполнить:
docker pull adhocore/lemp:8.3
docker pull jonasal/nginx-certbot:latest
docker compose -f compose.yml up -d
Обратите внимание, что все команды выполняются от имени пользователя с правами root (или с использованием sudo).