14:30, 26-ноя-2023
Что будет в статье?
В этой статье я расскажу о том, что такое Nginx Proxy Manager (в дальнейшем - NPM) и покажу как им пользоваться. Будет много теории, чтобы понять, как это работает, а затем практика. В практической части мы с вами на чистую Ubuntu установим сам NPM, 2-3 софта, для каждого при необходимости поменяем порт, в самом NPM создадим домены и направим их. А так же выдадим SSL сертификат.
Зачем это нужно?
Представим, что у вас есть один сервер и вам необходимо установить Nextcloud, Uptime Kuma и Heimdall. При этом, чтобы они все работали по https с сертификатом и каждый работал при этом на своем домене.
Nginx proxy manager поможет это осуществить. Даже в том случае, если порт 443 один, а SSL требует сразу несколько сервисов. Тот же Bitwarden, например.
Для работы NPM нужны следующие порты:
80 - для работы с 80 портом;
81 - для работы самого NPM:
443 - для работы https.
Остальные порты уже вы сами выберите, какие будете открывать.
Теоретическая часть
1. Немного про контейнеры и порты.
Когда вы запускаете docker контейнер, то контейнер выделяет для себя те порты, которые вы укажете. Таких портов два вида:
1. Внутренние. Эти порты используются внутри контейнера;
2. Внешние. Эти порты используются для доступа к контейнеру. Именно через них вы подключаетесь к контейнеру.
Допустим, вы создали контейнер nextcloud и указали порт 1234:80. Слева всегда пишется внешний порт.
Это значит, что при входе на 1234 порт, будет выполнено обращение на 80 порт внутри контейнера.
Разберем команду установки Uptime Kuma:
docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1
В этой команде указано 3001:3001. Это значит, что внутри контейнера открывается порт 3001, и внешний порт тоже будет 3001. Поменяем внешний порт на 2525. Получится так:
docker run -d --restart=always -p 2525:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1
В этом случае внешним портом станет 2525. По нему мы будем заходить. И при входе по порту 2525, контейнер будет обращаться к порту 3001 внутри контейнера.
С контейнерами разобрались. Переходим к самому NPM.
2. Поговорим про Nginx Proxy Manager
NPM берет открытый http порт и направляет на него по https протоколу. При этом NPM сам создает SSL сертификат.
Допустим, вы запустили Uptime Kuma на порту 2525 и хотите его повесить на поддомен kuma.domain.ru. Заходите в NPM, создаете хост kuma.domain.ru, порт указываете 2525 и создаёте сертификат.
Вы настроили домен, получили сертификат, все работает. Как происходит процесс на самом деле?
Когда вы заходите на сайт по домену kuma.domain.ru, npm перенаправляет вас на https протокол с созданным в нем сертификатом. При этом происходит перенаправление на порт 2525 и ваш IP-адрес
Все, что делает NPM - отправляет на другой порт и выдает SSL.
Практическая часть
В статье я в основном делал перенаправление на http, и последний пакет повесил уже на https.
Сейчас мы будем настраивать наш сервер. У нас есть:
Домен с поддоменами time, next, hd. На них я хочу повесить uptime kuma, nextcloud (snap), heimdall.
Nextcloud и Heimdall по умолчанию хотят себе порты 80 и 443;
Чистая ubuntu 22.04 на тестовом сервере.
Шаг 1. Установка NPM
Я недавно сделал статью по установке Nginx Proxy Manager: Как установить Nginx Proxy Manager?
Чтобы не повторяться, просто установите его по инструкции выше и возвращайтесь. Переходите к шагу 2.
Шаг 2. Установка Uptime Kuma
2.1. Первым делом хочу установить Uptime Kuma для мониторинга своих сервисов. Копирую команду и меняю внешний порт:
docker run -d --restart=always -p 3025:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1
В моем случае внешний порт теперь 3025. Сервис уже запущен и в него можно попасть по адресу: http://ip_адрес:3025
2.2. Давайте создадим для него правило в NPM:
Переходим во вкладку Hosts, выбираем Proxy hosts:
2.3. Нажимаем Add Proxy Host:2.4. Вводим наш домен:
Дальше по пунктам:
- Forward Hostname/IP - пишем внешний адрес нашей виртуальной машины. Если сервер за NAT, то внутренний;
- Forward Port - порт, на который будет выполнено перенаправление. Вводим 3025.
- Websockets Support включаем. Он нужен для Uptime Kuma.
2.5. Переходим во вкладку SSL:
2.6. Нажимаем на кнопку создания нового SSL:
По пунктам:
- Force SSL - включаем;
- HTTP/2 Support - включаем;
- HSTS - включаем.
2.9. Принимаем соглашение, нажимаем Save.
Иногда изменения по пунктам не сохраняются. Рекомендую заново открыть окно уже созданного домена и снова проставить галочки.
После этого, при входе по адресу time.domain.ru. Будет выполнено перенаправление на https, на порт 3025.
Шаг 3. Установка Nextcloud (Snap)
3.1. Для установки сначала нужно установить snapd:
apt install snapd -y
3.2. А затем и сам nextcloud:
snap install nextcloud
3.3. Nextcloud уже установлен. По умолчанию он забирает себе порт 80 и 443. Предлагаю их поменять на 85 (http) и 444 (https):
sudo snap set nextcloud ports.http=85
sudo snap set nextcloud ports.https=444
Теперь уже можем зайти в Nextcloud по адресу: http://ip_адрес:85
3.4. Теперь перейдем в NPM и настроим домен:
3.6. После этого, при входе по адресу next.domain.ru, мы попадём в Nextcloud с SSL сертификатом.
Шаг 4. Установка Heimdall
Установим последний пакет в рамках нашей с вами инструкции. Я выбрал именно heimdall из-за файла docker-compose, в котором смогу показать изменение порта.
4.1. Предлагаю создать папку для heimdall:
mkdir hd
4.2. Переходим в папку:
cd /root/hd/
4.3. Создаем docker-compose файл:
nano docker-compose.yml
4.4. Копируем и вставляем туда следующее:
---
version: "2.1"
services:
heimdall:
image: lscr.io/linuxserver/heimdall:latest
container_name: heimdall
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
volumes:
- /path/to/appdata/config:/config
ports:
- 3333:80
- 4444:443
restart: unless-stopped
Обратите внимание: я уже поменял внешние порты: 3333 - http, 4444 - https.
4.5. Сохраняем изменения: Ctrl + O, затем Enter, затем Ctrl + X.
Запускаем файл:
docker-compose up
Если перейти в браузер по адресу: http://ip_адрес:3333, то мы попадем в heimdall.
4.6. Теперь настроим домен для него
Обратите внимание! В этом случае мы уже направляем всё на https порт. Так тоже можно:
4.7. И осталось только SSL настроить:
Теперь, если перейти по адресу: https://hd.domain.ru, то откроется Heimdall.
Итог
В рамках данной статьи мы с вами сделали следующее:
- Установили три сервиса: Uptime kuma, Nextcloud и heimdall;
- Для каждого сервиса настроили поддомен и выдали им сертификаты;
- Немного узнали о принципе работы NPM.
Я понимаю, что некоторые моменты могли быть сделаны неправильно. К примеру, необязательно для каждого докера создавать отдельную папку и файл композ. Мне было важно просто показать принцип работы и объяснить, как это работает.
Сам по себе процесс не сложный и в каком-то смысле однообразный. Запускаешь сервис, узнаешь порт, создаешь поддомен и указываешь адрес с портом, поставив несколько галочек.
Если будут вопросы или пожелания - пишите их. Учту, исправлю.
Для обсуждения вы так же можете перейти в наш телеграм чат: https://t.me/katranlife_ru
Похожие новости