NGINXproxyManager: различия между версиями

Новая страница: «Подымаем свой реверсивный прокси на nginx proxy manager: Обновляем систему: apt update && apt upgrade -y устанавливаем net-tools apt install net-tools -y Устанавливаем docker и docker compose apt install docker.io -y && apt install docker-compose -y Запускаем Docker systemctl start docker Добавляем Docker в автозагру...»
 
Обновление статьи
Метки: с мобильного устройства из мобильной версии
 
Строка 1: Строка 1:
Подымаем свой реверсивный прокси на nginx proxy manager:
= Установка Nginx Proxy Manager в Docker =


Обновляем систему:   
‘’‘Nginx Proxy Manager (NPM)’’’ — удобная графическая оболочка для управления реверсивным прокси-сервером Nginx.


      apt update && apt upgrade -y
С его помощью можно:


устанавливаем net-tools
* публиковать внутренние веб-сервисы в Интернет;
* направлять разные домены и поддомены на разные серверы;
* автоматически получать SSL-сертификаты Let’s Encrypt;
* управлять HTTPS через веб-интерфейс;
* создавать перенаправления;
* ограничивать доступ к отдельным сервисам.


      apt install net-tools -y
В результате схема работы выглядит примерно так:


Устанавливаем docker и docker compose
<pre>
                    INTERNET
                        │
                  HTTP / HTTPS
                    80 / 443
                        │
                        ▼
              ┌─────────────────────┐
              │ Nginx Proxy Manager │
              │                    │
              │      Docker        │
              └──────────┬──────────┘
                        │
            ┌───────────┼───────────┐
            │          │          │
            ▼          ▼          ▼
          Web #1      Web #2      Web #3
        192.168.1.x 192.168.1.x 192.168.1.x
</pre>


      apt install docker.io -y && apt install docker-compose -y 
== Требования ==


Запускаем Docker
Для установки потребуется сервер или виртуальная машина с Linux.


      systemctl start docker
В данной инструкции предполагается использование Debian/Ubuntu.


Добавляем Docker в автозагрузку при старте системы
Также необходимо убедиться, что порты:


      systemctl enable docker
* ‘’‘80/TCP’’’ — HTTP;
* ‘’‘443/TCP’’’ — HTTPS;
* ‘’‘81/TCP’’’ — панель управления Nginx Proxy Manager


Перезагружаемся
не заняты другими сервисами.


      reboot
Проверить используемые порты можно командой:


Проверяем старт Docker`a
<syntaxhighlight lang="bash">
ss -tulpn
</syntaxhighlight>


      systemctl status docker
== Обновление системы ==


Создаем конфиг Docker`a с базой данных
Сначала обновляем список пакетов и установленные пакеты:


      nano config.json
<syntaxhighlight lang="bash">
apt update && apt upgrade -y
</syntaxhighlight>


Вставляем туда переменные
При необходимости устанавливаем дополнительные сетевые утилиты:


    {
<syntaxhighlight lang="bash">
      "database": {
apt install net-tools curl ca-certificates -y
        "engine": "mysql",
</syntaxhighlight>
        "host": "db",
        "name": "npm",
        "user": "npm",
        "password": "npm",
        "port": 3306
      }
    }


Создаем конфиг nginx proxy manager
== Установка Docker ==


    nano docker-compose.yml
Для актуальных установок рекомендуется использовать официальный репозиторий Docker.


Вставляем туда переменные
Добавляем ключ репозитория:


    version: '3'
<syntaxhighlight lang="bash">
    services:
install -m 0755 -d /etc/apt/keyrings
      app:
curl -fsSL https://download.docker.com/linux/debian/gpg \
        restart: always
  -o /etc/apt/keyrings/docker.asc
        image: 'jc21/nginx-proxy-manager:latest'
chmod a+r /etc/apt/keyrings/docker.asc
        ports:
</syntaxhighlight>
          - '80:80'
          - '81:81'
          - '443:443'
        volumes:
          - ./config.json:/app/config/production.json
          - ./data:/data
          - ./letsencrypt:/etc/letsencrypt
      db:
        restart: always
        image: 'yobasystems/alpine-mariadb'
        environment:
          MYSQL_ROOT_PASSWORD: 'npm'
          MYSQL_DATABASE: 'npm'
          MYSQL_USER: 'npm'
          MYSQL_PASSWORD: 'npm'
        volumes:
          - ./data/mysql:/var/lib/mysql


Запускаем наш Docker с nginx proxy manager
Добавляем репозиторий Docker:


    docker-compose up -d
<syntaxhighlight lang="bash">
cat > /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
</syntaxhighlight>


Перезагружаем систему
Обновляем список пакетов:


    reboot
<syntaxhighlight lang="bash">
apt update
</syntaxhighlight>


Заходим через браузер на web морду
Устанавливаем Docker Engine и Docker Compose:


    ip:81
<syntaxhighlight lang="bash">
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
</syntaxhighlight>


Login и Pass при первом старте
Проверяем версию Docker:


    Email: admin@example.com
<syntaxhighlight lang="bash">
    Password: changeme
docker --version
</syntaxhighlight>


И меняем на своё актуальное.
И Docker Compose:


вот и все)
<syntaxhighlight lang="bash">
docker compose version
</syntaxhighlight>
 
== Проверка Docker ==
 
Проверяем состояние службы:
 
<syntaxhighlight lang="bash">
systemctl status docker
</syntaxhighlight>
 
Если Docker не запущен:
 
<syntaxhighlight lang="bash">
systemctl start docker
</syntaxhighlight>
 
Добавляем Docker в автозагрузку:
 
<syntaxhighlight lang="bash">
systemctl enable docker
</syntaxhighlight>
 
Для дополнительной проверки можно запустить тестовый контейнер:
 
<syntaxhighlight lang="bash">
docker run --rm hello-world
</syntaxhighlight>
 
Если установка выполнена правильно, Docker загрузит тестовый образ и выведет сообщение об успешном запуске.
 
== Установка Nginx Proxy Manager ==
 
Создадим отдельный каталог для Nginx Proxy Manager:
 
<syntaxhighlight lang="bash">
mkdir -p /opt/nginx-proxy-manager
cd /opt/nginx-proxy-manager
</syntaxhighlight>
 
Создаём файл Docker Compose:
 
<syntaxhighlight lang="bash">
nano docker-compose.yml
</syntaxhighlight>
 
Добавляем следующую конфигурацию:
 
<syntaxhighlight lang="yaml">
services:
  app:
    image: 'jc21/nginx-proxy-manager:2.15.1'
    restart: unless-stopped
ports:
  - '80:80'
  - '81:81'
  - '443:443'
volumes:
  - ./data:/data
  - ./letsencrypt:/etc/letsencrypt
</syntaxhighlight>
 
Сохраняем файл:
 
<pre>
Ctrl + O
Enter
Ctrl + X
</pre>
 
В данной конфигурации используется встроенная база данных SQLite, поэтому отдельный контейнер MariaDB для обычной установки не требуется.
 
== Запуск Nginx Proxy Manager ==
 
Запускаем контейнеры:
 
<syntaxhighlight lang="bash">
docker compose up -d
</syntaxhighlight>
 
Проверяем их состояние:
 
<syntaxhighlight lang="bash">
docker compose ps
</syntaxhighlight>
 
Также можно посмотреть непосредственно запущенные Docker-контейнеры:
 
<syntaxhighlight lang="bash">
docker ps
</syntaxhighlight>
 
Nginx Proxy Manager должен отображаться со статусом:
 
<pre>
Up
</pre>
 
Первый запуск может занять некоторое время.
 
При необходимости посмотреть журнал запуска:
 
<syntaxhighlight lang="bash">
docker compose logs -f
</syntaxhighlight>
 
Выход из просмотра журнала:
 
<pre>
Ctrl + C
</pre>
 
== Вход в панель управления ==
 
Открываем браузер и переходим по адресу:
 
<pre>
http://IP_СЕРВЕРА:81
</pre>
 
Например:
 
<pre>
http://192.168.1.20:81
</pre>
 
После первого входа необходимо настроить учётную запись администратора согласно интерфейсу текущей версии Nginx Proxy Manager.
 
‘’‘Обязательно используйте собственный надёжный пароль администратора.’’’
 
== Назначение портов ==
 
{| class=“wikitable”
! Порт
! Протокол
 
! Назначение
 
80
 
TCP
 
Входящие HTTP-запросы
 
-
 
443
 
TCP
 
Входящие HTTPS-запросы
 
-
 
81
 
TCP
 
Web-интерфейс администратора
 
}
 
{{Warning|Порт 81 предназначен для административной панели. Не рекомендуется без необходимости публиковать его напрямую в Интернет. Ограничьте доступ локальной сетью, VPN или правилами межсетевого экрана.}}
 
== Создание первого Proxy Host ==
 
После входа в Nginx Proxy Manager открываем:
 
<pre>
Hosts → Proxy Hosts → Add Proxy Host
</pre>
 
Указываем:
 
{| class=“wikitable”
! Параметр
 
! Пример
 
Domain Names
 
wiki.example.com
 
-
 
Scheme
 
http
 
-
 
Forward Hostname / IP
 
192.168.1.30
 
-
 
Forward Port
 
80
 
}
 
После этого Nginx Proxy Manager будет принимать запрос:
 
<pre>
https://wiki.example.com
</pre>
 
и передавать его внутреннему серверу:
 
<pre>
http://192.168.1.30:80
</pre>
 
Схематично:
 
<pre>
Пользователь
    │
    │ https://wiki.example.com
    ▼
┌─────────────────────┐
│ Nginx Proxy Manager │
│      :443          │
└──────────┬──────────┘
          │
          │ HTTP
          ▼
    192.168.1.30:80
          │
          ▼
      Web-сервис
</pre>
 
== Получение SSL-сертификата ==
 
При создании Proxy Host переходим во вкладку:
 
<pre>
SSL
</pre>
 
Выбираем:
 
<pre>
Request a new SSL Certificate
</pre>
 
При необходимости включаем:
 
* ‘’‘Force SSL’’’ — принудительное перенаправление HTTP → HTTPS;
* ‘’‘HTTP/2 Support’’’ — поддержку HTTP/2;
* ‘’‘HSTS’’’ — только если понимаем последствия его использования.
 
После сохранения Nginx Proxy Manager автоматически запросит сертификат Let’s Encrypt.
 
Для стандартной HTTP-проверки Let’s Encrypt домен должен указывать на внешний IP сервера, а TCP-порт ‘’‘80’’’ должен быть доступен извне.
 
== Управление контейнером ==
 
=== Остановить Nginx Proxy Manager ===
 
<syntaxhighlight lang="bash">
cd /opt/nginx-proxy-manager
docker compose down
</syntaxhighlight>
 
=== Запустить ===
 
<syntaxhighlight lang="bash">
docker compose up -d
</syntaxhighlight>
 
=== Перезапустить ===
 
<syntaxhighlight lang="bash">
docker compose restart
</syntaxhighlight>
 
=== Посмотреть журнал ===
 
<syntaxhighlight lang="bash">
docker compose logs -f
</syntaxhighlight>
 
=== Проверить состояние ===
 
<syntaxhighlight lang="bash">
docker compose ps
</syntaxhighlight>
 
== Обновление Nginx Proxy Manager ==
 
Перед обновлением рекомендуется сделать резервную копию каталога:
 
<pre>
/opt/nginx-proxy-manager
</pre>
 
Затем переходим в каталог:
 
<syntaxhighlight lang="bash">
cd /opt/nginx-proxy-manager
</syntaxhighlight>
 
Загружаем актуальный Docker-образ:
 
<syntaxhighlight lang="bash">
docker compose pull
</syntaxhighlight>
 
Пересоздаём контейнер:
 
<syntaxhighlight lang="bash">
docker compose up -d
</syntaxhighlight>
 
После обновления проверяем:
 
<syntaxhighlight lang="bash">
docker compose ps
</syntaxhighlight>
 
и журнал:
 
<syntaxhighlight lang="bash">
docker compose logs --tail=100
</syntaxhighlight>
 
== Резервное копирование ==
 
Основные данные установки находятся в каталогах:
 
<pre>
/opt/nginx-proxy-manager/data
/opt/nginx-proxy-manager/letsencrypt
</pre>
 
Для резервного копирования желательно сохранить весь каталог:
 
<pre>
/opt/nginx-proxy-manager/
</pre>
 
В нём находятся конфигурация Nginx Proxy Manager, база данных, SSL-сертификаты и файл Docker Compose.
 
== Итог ==
 
После установки получаем централизованный reverse proxy:
 
<pre>
                    INTERNET
                        │
                ┌──────┴──────┐
                │            │
              :80          :443
                │            │
                └──────┬──────┘
                        ▼
            ┌─────────────────────┐
            │ Nginx Proxy Manager │
            │      Docker        │
            └──────────┬──────────┘
                        │ LAN
        ┌───────────────┼───────────────┐
        ▼              ▼              ▼
      Wiki            Cloud          Matrix
  192.168.1.x      192.168.1.x    192.168.1.x
</pre>
 
Теперь новые внутренние веб-сервисы можно публиковать через HTTPS практически полностью из графического интерфейса Nginx Proxy Manager.