Docker-compose для Nginx Proxy Manager
Обновлено:
Опубликовано:
Используемые термины: Docker, NGINX, Linux.
Данная шпаргалка позволит поднять сервис с прокси на базе NGINX и графическим веб-интерфейсом. Мы будем работать в Linux.
Предварительные действия
Пример файла docker-compose.yml
Описание файла
Запуск контейнеров
Как сбросить пароль для входа в веб-интерфейс
Дополнительные материалы
Подготовка системы
В системе должен быть установлен docker, а также docker-compose. Подробнее процесс описан в инструкции Установка Docker на Linux.
Создаем каталог, где будем хранить рабочие файлы:
mkdir -p /opt/proxy-nginx
Переходим в него:
cd /opt/proxy-nginx
Пример docker-compose файла
Создаем файл docker-compose:
vi docker-compose.yml
- ---
- services:
- proxy-nginx:
- image: 'jc21/nginx-proxy-manager:2.13.5'
- container_name: proxy-nginx
- restart: unless-stopped
- ports:
- - '80:80'
- - '443:443'
- - '81:81'
- environment:
- TZ: "Europe/Moscow"
- DB_MYSQL_HOST: "proxy-db"
- DB_MYSQL_USER: ${DB_MYSQL_USER}
- DB_MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD}
- DB_MYSQL_NAME: ${MYSQL_DATABASE}
- DISABLE_IPV6: 'true'
- volumes:
- - ./nginx/data:/data
- - ./nginx/letsencrypt:/etc/letsencrypt
- depends_on:
- proxy-db:
- condition: service_started
- proxy-db:
- image: jc21/mariadb-aria:10.11.5
- container_name: proxy-db
- restart: unless-stopped
- environment:
- TZ: "Europe/Moscow"
- MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE: ${MYSQL_DATABASE}
- MYSQL_USER: ${DB_MYSQL_USER}
- MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD}
- volumes:
- - ./mariadb/mysql:/var/lib/mysql
Описание сценария
Краткое описание наиболее важных строк сценария:
| Строки | Описание |
|---|---|
| 3 - 23 | Поднимаем контейнер с приложением nginx. |
| 5 | Мы используем образ сообщества Nginx Proxy Manager, так как данный программный продукт им и разрабатывается. Обратите внимание, что лучше указывать тег с версией. Более актуальное значение можно посмотреть на Docker Hub. |
| 8 - 11 | Наружу выставляем веб порты (80 и 443), а также порт 81 — интерфейс управления nginx. |
| 14 - 17 | Задаем параметры подключения к базе данных. Используем переменные, а сами значения этих переменных будут заданы в файле .env. |
| 20 - 21 | Чтобы не потерять настройки и сертификаты после перезапуска контейнера, храним файлы на хосте docker. |
| 26 - 37 | Поднимаем контейнер с базой данных для nginx proxy manager. |
| 27 | Используем образ СУБД от разработчика nginx proxy manager. Более актуальное значение версии можно посмотреть на Docker Hub. |
| 32 - 35 | Задаем имя для базы данных, а также опции аутентификации. Сами значения будут заданы через переменные в файле .env. |
| 37 | Чтобы не потерять данные при перезагрузке контейнера, храним файлы на хосте docker. |
Создание env-файла и запуск контейнеров
Создаем конфигурационный файл с описанием некоторых параметров базы данных:
vi .env
MYSQL_DATABASE='proxy'
DB_MYSQL_USER='proxy'
DB_MYSQL_PASSWORD='proxy_user_pass'
MYSQL_ROOT_PASSWORD='root_pass'
* где:
- MYSQL_DATABASE — имя базы данных, которая будет создана при первом запуске.
- DB_MYSQL_USER — имя пользователя для подключения к базе данных (пользователь будет создан при первом запуске).
- DB_MYSQL_PASSWORD — пароль для создаваемой учетной записи.
- MYSQL_ROOT_PASSWORD — пароль для root учетной записи. Также будет назначен при первом запуске контейнера.
Теперь можно запустить контейнеры:
docker-compose up -d
Проверить корректность запуска и работу можно командой:
docker-compose ps
Заходим на веб-интерфейс Nginx Proxy Manager по адресу http://<IP-адрес хоста docker>:81/login — мы должны увидеть страницу для создания новой учетной записи администратора.
В версиях постарше для первого входа используем логин/пароль admin@example.com / changeme. Портал сразу потребует указание email адреса (будет использовать в качестве логина) и смены пароля.
Сервис развернут и готов к работе.
Сброс пароля
Если мы забыли пароль для входа в Nginx Proxy Manager, мы можем сбросить его через базу данных.
Для начала подключимся к SQL оболочке.
docker exec -it proxy-db mysql -p
* если вы назвали контейнер proxy-db иначе, вводим свой вариант.
Необходимо ввести пароль для пользователя root (который мы указали в файле .env).
Мы должны зайти в mysql shell. Подключаемся к базе proxy:
> use proxy
Смотрим всех активных пользователей с ролью admin:
> SELECT id, email, nickname from user where is_disabled = 0 AND roles like '%admin%';
Фиксируем id для нужного нам пользователя. Как правило, это 1. Но если мы создадим больше администраторов, идентификаторов будет несколько. Значение поля email является логином.
Смотрим опции аутентификации для нужного пользователя:
> SELECT * FROM auth WHERE user_id = '1' AND is_deleted = '0';
* где 1 — id пользователя, для которого мы хотим поменять пароль.
Фиксируем тут id. Это будет идентификатор записи аутентификации. Как правило, если id пользователя был 1, то и данный идентификатор будет 1.
Обновляем пароль:
> UPDATE auth SET secret = '$2a$12$3acXtHE2FKmRpfnokVtg7eGr6Ki1a8ePOUJp7GoIrxcfNpfVHMVy2' WHERE id = '1';
* где 1 — id записи в базе auth, для которой мы делаем изменения.
Готово. Новый пароль — qwe12345. Заходим под ним и уже в веб-интерфейсе меняем пароль на свой.
Читайте также
Дополнительные инструкции, которые могут оказаться полезными:
2. Шпаргалка по работе с docker-compose.