LEMP-сервер с Let’s Encrypt SSL через NGINX Proxy Manager
В этом руководстве мы развернём LEMP-сервер с помощью готового Docker-образа webdevops/php-nginx:8.4
, который уже включает необходимые расширения PHP и веб-сервер. Дополнительно подключим бесплатный SSL от Let’s Encrypt через NGINX Proxy Manager.
Что потребуется
- Облачный сервер с Ubuntu
- Установленные Docker и Docker Compose
- Домен, настроенный на IP сервера
- Открытые порты 80 и 443
Структура проекта
Создайте структуру проекта:
mkdir ~/lemp-docker && cd ~/lemp-docker
mkdir www config
Code language: Bash (bash)
Создайте файл config/php.ini
(опционально):
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
display_errors = On
Code language: Bash (bash)
Создайте файл docker-compose.yml
со следующим содержимым:
services:
app:
image: webdevops/php-nginx:8.2
container_name: lemp-app
restart: always
ports:
- "8081:80"
volumes:
- ./www:/app
- ./config/php.ini:/opt/docker/etc/php/php.ini
environment:
- WEB_DOCUMENT_ROOT=/app
- PHP_DISPLAY_ERRORS=1
networks:
- lemp-net
db:
image: mariadb:10.5
container_name: lemp-db
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: mydb
MYSQL_USER: myuser
MYSQL_PASSWORD: mypass
volumes:
- db_data:/var/lib/mysql
networks:
- lemp-net
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: lemp-pma
expose:
- "80"
environment:
PMA_HOST: lemp-db
MYSQL_ROOT_PASSWORD: rootpass
networks:
- lemp-net
npm:
image: jc21/nginx-proxy-manager:latest
container_name: nginx-proxy-manager
restart: always
ports:
- "80:80"
- "443:443"
- "81:81"
volumes:
- npm_data:/data
- npm_letsencrypt:/etc/letsencrypt
networks:
- lemp-net
volumes:
db_data:
npm_data:
npm_letsencrypt:
networks:
lemp-net:
driver: bridge
Code language: YAML (yaml)
Значения переменных
MYSQL_ROOT_PASSWORD
,MYSQL_DATABASE
,MYSQL_USER
иMYSQL_PASSWORD
можно изменить под свои нужды. Эти параметры используются для начальной инициализации базы данных. Если вы хотите хранить их отдельно — создайте файл.env
в корне проекта и перенесите туда значения, используя синтаксис${MYSQL_PASSWORD}
внутриdocker-compose.yml
.
Запуск контейнеров
Запустите контейнеры командой:
docker compose up -d
Code language: Bash (bash)
Перейдите в панель управления NGINX Proxy Manager по адресу http://IP_СЕРВЕРА:81
.
Авторизация по умолчанию:
- Логин:
admin@example.com
- Пароль:
changeme
Настройка домена и SSL
Добавьте новый Proxy Host в интерфейсе NPM:
- Domain:
example.com
- Forward Hostname / IP:
lemp-app
- Forward Port:
80
- Enable SSL → Request a new certificate
- Force SSL → включить
После сохранения сайт будет доступен по адресу https://example.com
с автоматически выпущенным сертификатом Let’s Encrypt.
Доступ к phpMyAdmin
Чтобы настроить доступ к phpMyAdmin, добавьте отдельный Proxy Host:
- Domain:
db.example.com
- Forward Hostname / IP:
lemp-pma
- Forward Port:
80
- Enable SSL → Request a new certificate
- Force SSL → включить
После этого откройте https://db.example.com
и авторизуйтесь с логином myuser
и паролем mypass
, либо используйте root
.
Установка CMS
Вы можете загрузить установочные файлы своей CMS (например, WordPress) в директорию www
. Откройте в браузере https://example.com
— начнётся установка.
Для подключения к базе данных используйте параметры:
- Хост:
lemp-db
- Имя базы:
mydb
- Пользователь:
myuser
- Пароль:
mypass
Удалите ранее созданный файл index.php
с phpinfo(), если он ещё присутствует, чтобы не мешал установке.
Остановка и удаление
Остановка всех контейнеров:
docker compose down
Code language: Bash (bash)
Удаление вместе с томами:
docker compose down -v
Code language: Bash (bash)
Всё вышеописанное может быть выполнено нашей службой поддержки при заказе облачного сервера (VPS) в Unihost.kz. Мы поможем с развёртыванием окружения, настройкой Docker и подключением SSL.