Найти в Дзене
Тюнинг Админа

Обратный прокси сервер на Ubuntu 24.04LTS + Docker + Nginx Proxy Manager

Оглавление

В этой статье рассмотрим вопрос организации толкового обратного прокси сервера с удобной панелью управления и обновлением сертификатов. Установку и настройку буду производить на Ubuntu 24.04LTS, скептикам сообщаю это Enterprise вариант развёртывания.

Nginx Proxy Manager - это движок, который управляет обратным проксированием с поддержкой SSL и приятным веб интерфейсом управления, автором проекта создал Docker образ, что уменьшает сложность развёртывания решения.

Содержание статьи

  • Возможности решения
  • Схема реализации проекта автором
  • Системные требования
  • Настройка DNS и проброс портов на маршрутизаторе
  • Подготовка системы
  • Подключение репозитория Docker
  • Установка Docker
  • Подготовка Docker файла и каталогов под данные
  • Развёртывание контейнера Nginx Proxy Manager
  • Обзор интерфейса администратора
  • Первоначальная настройка
  • Настройка Firewall
  • Заключение

Возможности решения

  • Приятный и безопасный web интерфейс администрирования
  • Легко создавать домены для переадресации и редиректа, потоки и хосты 404, не обладая исключительными знаниями в области Nginx
  • Поддержка бесплатных SSL от Let's Encrypt, а также возможность подгружать сторонние сертификаты
  • Списки доступа и базовая аутентификация HTTP для ваших хостов
  • Возможность расширенной конфигурации Nginx
  • Управление пользователями, разрешениями и журналом аудита

Схема реализации проекта автором

Проект выглядит следующим образом, есть Провайдер - 1 статический ip адрес - Маршрутизатор, с которого весь входящий трафик нужно раскидывать - Физический сервер с Proxmox 8.2.2, где уже присутствуют виртуальные машины:

  • Виртуальная машина с обратным прокси сервером на которую прилетают все запросы из вне
  • Проекты типа Elma365 и Odoo в виде отдельных виртуальных машин

Системные требования

Настройка DNS и проброс портов на маршрутизаторе

На DNS сервере вашего хостинг провайдера необходимо создать записи типа А с указанием ip адреса вашего маршрутизатора.

На маршрутизаторе необходимо создать правило DNAT, трафик TCP, порты 80,443 выбираем Forward и указываем локальный адрес nginx

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

Все действия в системе произвожу с повышенными правами:

sudo -s

Обновляем информацию о пакетах в репозиториях:

apt update

Устанавливаем обновления:

apt upgrade -y

Устанавливаем net-tools и mc:

apt install net-tools mc -y

Если у вас статически не настроена сеть, выполним настройку:

Переходим в каталог netplan:

cd /etc/netplan

Смотрим как называется конфигурационный файл:

ls

50-cloud-init.yaml --- у вас скорее всего 00-installer-config.yaml

Приводим к следующему виду:

nano 50-cloud-init.yaml

network:
ethernets:
ens18:
addresses:
- 192.168.100.11/24
nameservers:
addresses:
- 192.168.100.254
search: []
routes:
- to: default
via: 192.168.100.254
version: 2
Сохраняем и выходим:

CTRL+O, CTRL+X

Применяем настройки:

netplan apply

Подключение репозитория Docker

Добавляем официальные GPG ключ Docker:
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc

Добавляем репозиторий в apt:

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null

Обновляем информацию о списке пакетов в репозитории:

apt update

Установка Docker

Устанавливаем самые последние пакеты:

apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Проверка статуса службы Docker:

service docker status

-2

Подготовка Docker файла и создание папок под данные

В корне создаем папку под наш проект:

mkdir /Docker

переходим в директорию:

cd /Docker

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

mkdir Data SSL_Keys

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

nano docker-compose.yml

version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
# Порты сопоставляются в следующей последовательности <Порты хоста>:<Порты контейнера>
- '80:80' # HTTP
- '443:443' # HTTPS
- '81:81' # Admin Web Port
# Сопоставление папок прописывается в следующей последовательности <Путь к папке хоста>:<Путь к папке в контейнере>
volumes:
- ./Data:/data
- ./SSL_Keys:/etc/letsencrypt

Должно получиться так:

-3

Сохраняем и закрываем:

CTRL+O, CTRL+X

Развёртывание контейнера Nginx Proxy Manager

Для скачивания и развертывание контейнера на основании нами подготовленного файла выполним:

docker compose up -d

Процесс пошел:

-4

Как видим процесс завершился благополучно:

-5

Обзор интерфейса администратора

Открываем браузер и пишем адрес нашего сервера, с указанием порта 81:

http://192.168.100.11:81

-6

Администратор по умолчанию:

Email: admin@example.com

Password: changeme

И первым делом нам предлагается сменить почту и имя пользователя:

-7

Выполним эти действия:

-8

Дальше система нам предложит поменять пароль:

-9

На этом установка завершена, панель управления выглядит следующим образом:

-10

Преступаем к настройке.

Первоначальная настройка

Промежуточные прокси сервера

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

-11

Добавляем промежуточный после нашего прокси сервер:

-12

Указываем для каких доменов будет выполняться редирект, а также адрес хоста, порт

-13

На вкладке SSL включает опции:

-14

На вкладке Advanced на уровне переменных и команд можно вручную прописать правила:

-15

Добавление хостов для редиректа

Для этого на панели выбираем Hosts --> Redirection Hosts:

-16

Нажимаем добавить Хост:

-17

Включаем опции на вкладке SSL:

-18

Добавление SSL сертификатов

Для выполнения этой операции на панели управления переходим на вкладку SSL Certificates и нажимаем добавить сертификат:

-19

Указываем домены и почтовый ящик для регистрации на Let's Encrypt:

-20

На этом наверное все, интерфейс простой и проблем не должно возникнуть при настройке.

Заключение