Перейти к содержанию

Обзор развертывания 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 внутри контейнера).
  • Конфигурация прокси-сервера:

  • Конфигурации пользователя 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

  • Запустить службу:

    systemctl start nats
    

  • Остановить службу:

    systemctl stop nats
    

  • Перезапустить службу:

    systemctl restart nats
    

  • Включить автоматический запуск при загрузке:

    systemctl enable nats
    

  • Перезагрузить конфигурацию демона:

    systemctl daemon-reload
    

Команды прокси-сервера Nginx

  • Запустить или обновить стек прокси-сервера:
    docker compose up -d
    
    (Выполнять из каталога /root/nginx)
question_mark
Я могу вам чем-то помочь?
question_mark
ИИ Помощник ×