Docker-compose для Nginx Proxy Manager

Обновлено Обновлено: Опубликовано Опубликовано:

Используемые термины: DockerNGINX, Linux.

Данная шпаргалка позволит поднять сервис с прокси на базе NGINX и графическим веб-интерфейсом. Мы будем работать в Linux.

Подготовка системы

В системе должен быть установлен docker, а также docker-compose. Подробнее процесс описан в инструкции Установка Docker на Linux.

Создаем каталог, где будем хранить рабочие файлы:

mkdir -p /opt/proxy-nginx

Переходим в него:

cd /opt/proxy-nginx

Пример docker-compose файла

Создаем файл docker-compose:

vi docker-compose.yml

  1. ---
  2.  
  3. services:
  4.   proxy-nginx:
  5.     image: 'jc21/nginx-proxy-manager:2.13.5'
  6.     container_name: proxy-nginx
  7.     restart: unless-stopped
  8.     ports:
  9.       - '80:80'
  10.       - '443:443'
  11.       - '81:81'
  12.     environment:
  13.       TZ: "Europe/Moscow"
  14.       DB_MYSQL_HOST: "proxy-db"
  15.       DB_MYSQL_USER: ${DB_MYSQL_USER}
  16.       DB_MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD}
  17.       DB_MYSQL_NAME: ${MYSQL_DATABASE}
  18.       DISABLE_IPV6: 'true'
  19.     volumes:
  20.       - ./nginx/data:/data
  21.       - ./nginx/letsencrypt:/etc/letsencrypt
  22.     depends_on:
  23.       proxy-db:
  24.         condition: service_started
  25.  
  26.   proxy-db:
  27.     image: jc21/mariadb-aria:10.11.5
  28.     container_name: proxy-db
  29.     restart: unless-stopped
  30.     environment:
  31.       TZ: "Europe/Moscow"
  32.       MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
  33.       MYSQL_DATABASE: ${MYSQL_DATABASE}
  34.       MYSQL_USER: ${DB_MYSQL_USER}
  35.       MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD}
  36.     volumes:
  37.       - ./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. Заходим под ним и уже в веб-интерфейсе меняем пароль на свой.

Читайте также

Дополнительные инструкции, которые могут оказаться полезными:

1. Установка Docker на Linux.

2. Шпаргалка по работе с docker-compose.

3. Docker-compose для создания nginx entrypoint.

4. Получение бесплатного SSL сертификата Let's Encrypt.

# DevOps # Linux # Интернет # Контейнеризация # Серверы
Дмитрий Моск — частный мастер
Был ли вам полезен этот скрипт?

Да            Нет

Дмитрий Моск
— IT-специалист.
Настройка серверов, услуги DevOps.

Заказать настройку контейнеризации

Нужна бесплатная консультация?

Скрипты

Пример скрипта на Python для копирования пакетов NPM с одного репозитория Nexus в другой

Развертывание caddy прокси в docker с помощью docker-compose

Файл docker-compose для развертывания Nginx Proxy Manager

Пример файла docker-compose для запуска контейнеров с сервером Grafana Loki

Пример файла docker-compose.yml для запуска и настройки Portainer

Пример файла docker-compose для развертывания чат-платформы Matrix Synapse на Linux

Пример скрипта на bash для копирования данных Clickhouse с кластера на кластер

Другие скрипты

Все статьи

Нужен скрипт? Опишите его назначение:





Реклама