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 configCode language: Bash (bash)Создайте файл config/php.ini (опционально):
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
display_errors = OnCode 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: bridgeCode language: YAML (yaml)Значения переменных
MYSQL_ROOT_PASSWORD,MYSQL_DATABASE,MYSQL_USERиMYSQL_PASSWORDможно изменить под свои нужды. Эти параметры используются для начальной инициализации базы данных. Если вы хотите хранить их отдельно — создайте файл.envв корне проекта и перенесите туда значения, используя синтаксис${MYSQL_PASSWORD}внутриdocker-compose.yml.
Запуск контейнеров
Запустите контейнеры командой:
docker compose up -dCode 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 downCode language: Bash (bash)Удаление вместе с томами:
docker compose down -vCode language: Bash (bash)Всё вышеописанное может быть выполнено нашей службой поддержки при заказе облачного сервера (VPS) в Unihost.kz. Мы поможем с развёртыванием окружения, настройкой Docker и подключением SSL.