Обзор развертывания NATS на сервере¶
Предварительные требования и базовые условия¶
Для развертывания сервера NATS необходимы следующие характеристики среды:
-
Операционная система: Ubuntu (как указано в файле задачи
ubuntu.yml). -
Привилегии: Требуется доступ с правами root для установки Docker, управления службами systemd и настройки обратного прокси-сервера.
-
Домен: Сервер использует зону
hostkey.inдля внешнего доступа. -
Порты:
-
Порт
8222используется внутренне для HTTP-эндпоинта мониторинга NATS. -
Порт
443используется для безопасного внешнего доступа по HTTPS через обратный прокси-сервер. -
Порт
4222доступен для прямых соединений клиентов.
FQDN конечной панели¶
Интерфейс мониторинга NATS доступен через полное доменное имя (Fully Qualified Domain Name, FQDN) в следующем формате:
nats<Server ID>.hostkey.in
Служба принимает подключения на порту 443 (HTTPS) извне. Конкретный <Server ID> присваивается динамически на основе конфигурации хоста.
Структура файлов и каталогов¶
Приложение использует следующую структуру каталогов для хранения конфигурации и данных:
-
Базовый каталог:
/opt/nats -
Каталог конфигурации:
/opt/nats/conf- Основной файл конфигурации:
/opt/nats/conf/nats-server.conf
- Основной файл конфигурации:
-
Каталог данных:
/opt/nats/data- Используется для постоянного хранения данных, если включена функция JetStream (маппинг на
/dataвнутри контейнера).
- Используется для постоянного хранения данных, если включена функция JetStream (маппинг на
-
Конфигурация прокси-сервера:
-
Конфигурации пользователя Nginx находятся в
/data/nginx/user_conf.d. -
Файл конкретной конфигурации виртуального хоста имеет имя
<prefix><Server ID>.hostkey.in.conf.
Процесс установки приложения¶
Сервер NATS развертывается как Docker-контейнер, управляемый диспетчером служб systemd.
-
Образ Docker:
nats:latest -
Имя контейнера:
nats -
Метод установки: Приложение устанавливается путем загрузки последнего образа Docker и конфигурации файла юнита systemd для управления его жизненным циклом. Файл конфигурации копируется на хост и монтируется в контейнер.
Права доступа и безопасность¶
Безопасность и контроль доступа реализуются с помощью следующих мер:
-
Режим аутентификации: В конфигурации по умолчанию параметр
nats_auth_modeустановлен в значениеnone. -
Если включена токенизированная аутентификация, токен определяется как
nats_tk_pzTg6dE4y0hFQwN7cJv1sLr2mX9aK4bH8uV3qR5sY1. -
Если включена аутентификация по логину/паролю, учетные данные имеют вид:
user: natsиpassword: <ansible_ssh_pass>. -
Обратный прокси-сервер: Доступ к интерфейсу мониторинга защищен с помощью обратного прокси-сервера Nginx с использованием SSL-сертификатов от Let's Encrypt.
-
Сетевая изоляция: Контейнер NATS работает с определенными маппингами портов, а обратный прокси-сервер настроен с параметром
network_mode: hostдля обработки внешнего трафика на стандартных портах.
Базы данных¶
В данной конфигурации NATS не использует внешнюю SQL или NoSQL базу данных.
-
Расположение хранилища: Если включена JetStream, данные хранятся постоянно в каталоге
/dataвнутри контейнера, который маппится на/opt/nats/dataна хосте. -
Настройки:
-
Каталог хранилища:
/data -
Максимальный объем памяти хранилища:
1G -
Максимальный объем файлового хранилища:
100G -
Текущий статус: JetStream в настоящее время отключена (
nats_enable_jetstream: false).
Контейнеры Docker и их развертывание¶
В развертывании задействованы два основных контейнера: сервер NATS и прокси-сервер Nginx.
Контейнер NATS¶
-
Образ:
nats:latest -
Имя:
nats -
Маппинг портов:
-
4222:4222(Порт клиента) -
8222:8222(Порт HTTP-мониторинга) -
Монтирование томов:
-
Конфигурация:
/opt/nats/conf/nats-server.confмонтируется в/etc/nats/nats-server.conf(только для чтения). -
Данные:
/opt/nats/dataмонтируется в/data.
Контейнер прокси-сервера Nginx¶
-
Образ:
jonasal/nginx-certbot:latest -
Управление: Управляется через Docker Compose в каталоге
/root/nginx. -
Томы:
-
nginx_secrets(внешний том) маппится на/etc/letsencrypt. -
/data/nginx/user_conf.dмаппится на/etc/nginx/user_conf.d. -
Переменные окружения:
-
CERTBOT_EMAIL:hkadm@hostkey.com
Прокси-серверы¶
Обратный прокси-сервер реализован с использованием Nginx и интеграцией Certbot для автоматического управления SSL-сертификатами.
-
ПО: Nginx (через образ
jonasal/nginx-certbot). -
SSL/TLS: Автоматически включается через Certbot для домена
nats<Server ID>.hostkey.in. -
Конфигурация маршрутизации:
-
Прокси-сервер пересылает запросы с внешнего HTTPS-эндпоинта на внутреннюю службу мониторинга NATS.
-
Цель:
http://127.0.0.1:8222 -
Блок локации:
location / -
Расположение файла конфигурации:
/root/nginx/compose.ymlи специфичные блоки серверов в/data/nginx/user_conf.d.
Настройки прав доступа¶
Права доступа к файлам и каталогам устанавливаются следующим образом в процессе установки:
-
Каталоги NATS:
-
/opt/nats/conf:0755 -
/opt/nats/data:0755 -
Файл конфигурации
/opt/nats/conf/nats-server.conf:0644 -
Файл юнита systemd:
-
/etc/systemd/system/nats.service:0644 -
Каталоги прокси-сервера:
-
/root/nginx:0755, владелецroot:root. -
Файл compose
/root/nginx/compose.yml:0644, владелецroot:root.
Расположение файлов конфигурации и данных¶
-
Конфигурация сервера NATS:
/opt/nats/conf/nats-server.conf -
Хранилище данных NATS:
/opt/nats/data -
Юнит-файл службы systemd:
/etc/systemd/system/nats.service -
Docker Compose для Nginx:
/root/nginx/compose.yml -
Конфигурация виртуального хоста Nginx:
/data/nginx/user_conf.d/nats<Server ID>.hostkey.in.conf
Доступные порты для подключения¶
-
4222: Протокол клиента NATS (прямое подключение).
-
8222: API мониторинга NATS через HTTP (внутренний, доступный через прокси).
-
443: HTTPS (внешний доступ к мониторингу NATS через Nginx).
Запуск, остановка и обновление¶
Управлением службой NATS занимается systemd. Управлением прокси-сервером Nginx занимается docker compose.
Команды службы NATS¶
-
Запустить службу:
-
Остановить службу:
-
Перезапустить службу:
-
Включить автоматический запуск при загрузке:
-
Перезагрузить конфигурацию демона:
Команды прокси-сервера Nginx¶
- Запустить или обновить стек прокси-сервера: (Выполнять из каталога
/root/nginx)