Linux & Tools
August 14, 2022

Установка обратного прокси Nginx Proxy Manager в Docker контейнере.

Доброго времени суток! В данной заметке мы научимся поднимать с вами reverse-proxy Nginx Proxy Manager в Docker контейнере.

Коротко о Nginx Proxy Manager:

Nginx Proxy Manager - это бесплатный обратный прокси (reverse proxy) основанный на Nginx, который имеет удобный и понятный интерфейс для управления, используется для проксирования вашего приложения в Docker на нужный нам домен либо поддомен. Простыми словами для быстрого и удобного привязывания контейнера к нашему домену или поддомену.

Сделать это мы можем двумя разными способами:

  1. По порту - самый простой способ, из минусов данный способ оставляет наши порты снаружи в интернет.
  2. По hostname - более безопасный способ, для работы которого потребуется открыть 3 порта 80, 443 и порт нашего GUI NPM.
    В данном способе остальные порты наших переложений не будут выставлены наружу в интернет.
Варианты проксирования в Nginx Proxy Manager

Помимо проксирования на домены, в веб интерфейсе Nginx Proxy Manager есть работа с TLS(SSL) сертификатами.

Во второй части статьи мы рассмотрим несколько способов получения бесплатных SSL сертификатов таких как:

  1. Бесплатный обновляющийся сертификат от Lets Encrypt.
  2. Бесплатный обновляющийся Wildcard сертификат от Lets Encrypt.

Nginx Proxy Manager автоматически, бесплатно продлевает SSL сертификаты каждые 3 месяца.

Выпуск SSL сертификатов с помощью Nginx Proxy Manager

В Nginx Proxy Manager есть возможность специальных правил ACL для предоставления/ограничения доступа к вашим приложениям по ip адресу, пароля или одновременно по ip и паролю.

ACL правила для Nginx Proxy Manager

Для установки 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

docker-compose.yml для установки Nginx Proxy Manager

Сохраняем его CTRL+X, Y, ENTER и стартуем контейнер NPM командой:

docker compose up -d

Готово, ждем окончания и после можем перейти уже к настройке Nginx Proxy Manager.

3. Первоначальная настройка Nginx Proxy Manager.


1. Переходим в браузер и там открываем нашу панель управления NPM

http://ip.адрес.вашего.сервера:порт
Порт для Nginx Proxy Manager

В моем случае будет выглядеть так, если вы делали копипастой, то у вас будет отличаться только ip вашего сервера:

http://192.168.1.10:43081
[email protected]:changeme

Для входа используем:

Email: [email protected]

Password: changeme


2. Далее нам будет предложено указать почту, имя и никнейм, указываем свое:

Вход в NPM


3. Далее вводим старый пароль (changeme) и ваш новый, сложный пароль:

Смена пароля в NPM


4. Дополнительно необходимо на вашем маршрутизаторе пробросить порты 443 и 80 на IP адрес сервера с NPM. (если вы устанавливаете на виртуальной машине у себя дома, а не на VPS, при нужде доступности наружу, разбирать данный этап не буду, т.к. на разных роутерах это делается в разных местах, но плюс минус одинаково).

Порт 443 будет использоваться для Reverse Proxy, а порт 80 для продления сертификатов Let's Encrypt.

Вывод

Поздравляю, в данной, первой части заметок посвященных NPM, мы с вами научились разворачивать Nginx Proxy Manager на своем сервере, во второй части мы дальше настроим и разберем функционал работы NPM.

Что бы не потерять инструкцию рекомендую подписаться на мой личный блог-канал в Telegram, в котором я делюсь в формате заметок своими знаниями и интересным из мира IT или посетите мой сайт, спасибо за потраченное время на чтение и доброго времени суток!)

Вы так же можете выразить благодарность автору за статью, покупкой кофе:

Кофейня тут)