Установка обратного прокси Nginx Proxy Manager в Docker контейнере.
Доброго времени суток! В данной заметке мы научимся поднимать с вами reverse-proxy Nginx Proxy Manager в Docker контейнере.
Коротко о Nginx Proxy Manager:
Nginx Proxy Manager - это бесплатный обратный прокси (reverse proxy) основанный на Nginx, который имеет удобный и понятный интерфейс для управления, используется для проксирования вашего приложения в Docker на нужный нам домен либо поддомен. Простыми словами для быстрого и удобного привязывания контейнера к нашему домену или поддомену.
Сделать это мы можем двумя разными способами:
- По порту - самый простой способ, из минусов данный способ оставляет наши порты снаружи в интернет.
- По hostname - более безопасный способ, для работы которого потребуется открыть 3 порта 80, 443 и порт нашего GUI NPM.
В данном способе остальные порты наших переложений не будут выставлены наружу в интернет.
Помимо проксирования на домены, в веб интерфейсе Nginx Proxy Manager есть работа с TLS(SSL) сертификатами.
Во второй части статьи мы рассмотрим несколько способов получения бесплатных SSL сертификатов таких как:
- Бесплатный обновляющийся сертификат от Lets Encrypt.
- Бесплатный обновляющийся Wildcard сертификат от Lets Encrypt.
Nginx Proxy Manager автоматически, бесплатно продлевает SSL сертификаты каждые 3 месяца.
В Nginx Proxy Manager есть возможность специальных правил ACL для предоставления/ограничения доступа к вашим приложениям по ip адресу, пароля или одновременно по ip и паролю.
Для установки NPM нам понадобиться:
1. Установленный Docker/Docker-Compose
2. Сервер с доступом root или sudo
3. Копипаста команд и 15 минут вашего драгоценного времени
4. Пробросить порты 443 и 80 на IP адрес сервера с NPM, на вашем маршрутизаторе (не обязательный пункт)
1. Подготовка к установке
Я буду производить установку на Debian 11 от root в локальной среде
1. Установим Docker/Docker Compose по данной инструкции
2. Создаем директорию под NPM:
mkdir -p /app/npm
3. Назначаем пользователя владельцем этой директории, если вы используете sudo:
chown -R $USER:$USER /app/npm
2. Конфигурация Docker-compose.yml
1. Переходим в директорию /app/npm:
cd /app/npm
2. Создаем в ней наш docker-compose.yml файл:
nano docker-compose.yml
3. Копируем строки ниже, вставляем в наш docker-compose.yml
version: "3" services: app: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: # These ports are in format <host-port>:<container-port> - '80:80' # Public HTTP Port - '443:443' # Public HTTPS Port - '81:81' # Admin Web Port # Add any other Stream port you want to expose # - '21:21' # FTP environment: DB_MYSQL_HOST: "db" DB_MYSQL_PORT: 3306 DB_MYSQL_USER: "npm" DB_MYSQL_PASSWORD: "npm" DB_MYSQL_NAME: "npm" # Uncomment this if IPv6 is not enabled on your host # DISABLE_IPV6: 'true' volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt depends_on: - db db: image: 'jc21/mariadb-aria:latest' restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: 'npm' MYSQL_DATABASE: 'npm' MYSQL_USER: 'npm' MYSQL_PASSWORD: 'npm' volumes: - ./mysql:/var/lib/mysql
Так же, на всякий случай ссылки: оф. сайт и Docker Hub
Сохраняем его CTRL+X, Y, ENTER и стартуем контейнер NPM командой:
docker compose up -d
Готово, ждем окончания и после можем перейти уже к настройке Nginx Proxy Manager.
3. Первоначальная настройка Nginx Proxy Manager.
1. Переходим в браузер и там открываем нашу панель управления NPM
http://ip.адрес.вашего.сервера:порт
В моем случае будет выглядеть так, если вы делали копипастой, то у вас будет отличаться только ip вашего сервера:
http://192.168.1.10:43081
Email: [email protected] Password: changeme
2. Далее нам будет предложено указать почту, имя и никнейм, указываем свое:
3. Далее вводим старый пароль (changeme) и ваш новый, сложный пароль:
4. Дополнительно необходимо на вашем маршрутизаторе пробросить порты 443 и 80 на IP адрес сервера с NPM. (если вы устанавливаете на виртуальной машине у себя дома, а не на VPS, при нужде доступности наружу, разбирать данный этап не буду, т.к. на разных роутерах это делается в разных местах, но плюс минус одинаково).
Порт 443 будет использоваться для Reverse Proxy, а порт 80 для продления сертификатов Let's Encrypt.
Вывод
Поздравляю, в данной, первой части заметок посвященных NPM, мы с вами научились разворачивать Nginx Proxy Manager на своем сервере, во второй части мы дальше настроим и разберем функционал работы NPM.
Что бы не потерять инструкцию рекомендую подписаться на мой личный блог-канал в Telegram, в котором я делюсь в формате заметок своими знаниями и интересным из мира IT или посетите мой сайт, спасибо за потраченное время на чтение и доброго времени суток!)
Вы так же можете выразить благодарность автору за статью, покупкой кофе: