Files
router-lists-ui/DOCKER.md
T
denozord 3e0c968e7f
Publish Docker image / build-and-push (push) Successful in 1m19s
fix(evobgp): health GET /api/evobgp, дублирующий mount /evobgp для nginx proxy_pass
- диагностика: JSON на GET /api/evobgp и /evobgp
- совместимость с nginx, срезающим префикс /api
- DOCKER.md: пример location /api/ и типичная ошибка

Made-with: Cursor
2026-04-07 23:52:04 +07:00

8.7 KiB
Raw Blame History

Docker Images

Этот проект предоставляет Docker образы для RouterOS Manager с двумя различными версиями интерфейса.

🏷️ Доступные теги

Основная версия (main branch)

  • git.shts.su/[repository]:latest - Стабильная версия с базовым интерфейсом
  • git.shts.su/[repository]:[commit-sha] - Версия с конкретным коммитом

Tabler версия (tabler branch)

  • git.shts.su/[repository]:tabler - Версия с современным Tabler UI
  • git.shts.su/[repository]:tabler-[commit-sha] - Tabler версия с конкретным коммитом

🚀 Запуск

Основная версия

docker run -d \
  --name s3-lists-manager \
  -p 3001:3001 \
  -e ENCRYPTION_KEY=your-64-hex-character-key-here \
  git.shts.su/[repository]:latest

Tabler версия

docker run -d \
  --name s3-lists-manager-tabler \
  -p 3001:3001 \
  -e ENCRYPTION_KEY=your-64-hex-character-key-here \
  git.shts.su/[repository]:tabler

🔄 Обновление

Основная версия

docker pull git.shts.su/[repository]:latest
docker stop s3-lists-manager
docker rm s3-lists-manager
docker run -d \
  --name s3-lists-manager \
  -p 3001:3001 \
  -e ENCRYPTION_KEY=your-64-hex-character-key-here \
  git.shts.su/[repository]:latest

Tabler версия

docker pull git.shts.su/[repository]:tabler
docker stop s3-lists-manager-tabler
docker rm s3-lists-manager-tabler
docker run -d \
  --name s3-lists-manager-tabler \
  -p 3001:3001 \
  -e ENCRYPTION_KEY=your-64-hex-character-key-here \
  git.shts.su/[repository]:tabler

🐳 Docker Compose

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

version: '3.8'

services:
  s3-lists-manager:
    image: git.shts.su/[repository]:latest
    container_name: s3-lists-manager
    ports:
      - "3001:3001"
    restart: unless-stopped
    environment:
      - NODE_ENV=production
      - ENCRYPTION_KEY=${ENCRYPTION_KEY}  # Обязательно! Используйте .env файл или secrets
      # Прокси EvoBGP для UI (Communities / Domains / …) — без CORS в браузере:
      # - EVOBGP_API_URL=http://evobgp:8080
      # - EVOBGP_API_TOKEN=...

  s3-lists-manager-tabler:
    image: git.shts.su/[repository]:tabler
    container_name: s3-lists-manager-tabler
    ports:
      - "3002:3001"
    restart: unless-stopped
    environment:
      - NODE_ENV=production
      - ENCRYPTION_KEY=${ENCRYPTION_KEY}  # Обязательно! Используйте .env файл или secrets

Создайте файл .env в той же директории:

ENCRYPTION_KEY=your-64-hex-character-key-here

Запуск:

docker-compose up -d

🔧 Переменные окружения

Переменная Описание По умолчанию Обязательная
NODE_ENV Окружение Node.js production Нет
PORT Порт для запуска сервера 3001 Нет
ENCRYPTION_KEY Ключ шифрования для IPSec паролей (64 hex символа) - Да
EVOBGP_API_URL Базовый URL API EvoBGP для серверного прокси /api/evobgp (например http://evobgp:8080 или http://10.0.0.5:8080; при необходимости к пути добавляется /v1) - Да, если используете интеграцию EvoBGP в UI
EVOBGP_API_TOKEN Bearer-токен к API EvoBGP (только на сервере, не в браузере) - Да, если используете интеграцию EvoBGP в UI

EvoBGP и reverse proxy (nginx)

Запросы UI идут на тот же origin: /api/evobgp/… обрабатывает Node внутри образа. Если перед приложением стоит nginx, нужно проксировать префикс /api на Node без потери сегмента /api в URI (иначе в upstream попадёт не тот путь и будет 404).

Рекомендуемый вариант (путь /api/… сохраняется):

location /api/ {
    proxy_pass http://127.0.0.1:3001/api/;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

Типичная ошибка: внутри location /api указать proxy_pass http://127.0.0.1:3001/; — nginx срезает /api, в Node приходит /evobgp/router-lists/catalog вместо /api/evobgp/router-lists/catalog. В коде добавлен запасной маршрут на /evobgp, но лучше поправить nginx.

Проверка: GET http://<хост>:<порт>/api/evobgp (без хвоста) должен вернуть JSON вида {"ok":true,"proxy":true,"evobgpConfigured":true} — если вместо этого HTML «404» или страница SPA, запрос не доходит до Node (только статика, другой порт или неверный proxy_pass).

ENCRYPTION_KEY

Важно: ENCRYPTION_KEY является обязательным параметром для работы с IPSec паролями. Этот ключ используется для шифрования/дешифрования паролей, хранящихся в S3.

Генерация ключа:

node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

Пример запуска с ENCRYPTION_KEY:

docker run -d \
  --name s3-lists-manager \
  -p 3001:3001 \
  -e ENCRYPTION_KEY=your-64-hex-character-key-here \
  git.shts.su/[repository]:latest

⚠️ Внимание: Используйте один и тот же ENCRYPTION_KEY для всех запусков контейнера. При изменении ключа старые зашифрованные пароли не смогут быть расшифрованы.

📊 Мониторинг

Просмотр логов

# Основная версия
docker logs s3-lists-manager

# Tabler версия
docker logs s3-lists-manager-tabler

Статистика контейнеров

docker stats s3-lists-manager s3-lists-manager-tabler

🔍 Отладка

Вход в контейнер

# Основная версия
docker exec -it s3-lists-manager /bin/bash

# Tabler версия
docker exec -it s3-lists-manager-tabler /bin/bash

Проверка процессов

docker exec s3-lists-manager ps aux

🏗️ Сборка локально

Основная версия

git checkout main
docker build -t s3-lists-manager:local .

Tabler версия

git checkout tabler
docker build -t s3-lists-manager-tabler:local .

📝 CI/CD

Автоматическая сборка

  • Ветка main: Автоматически создает образ с тегом latest
  • Ветка tabler: Автоматически создает образ с тегом tabler

Workflow файлы

  • .gitea/workflows/docker-publish.yml - Сборка основной версии
  • .gitea/workflows/docker-publish-tabler.yml - Сборка Tabler версии

🔒 Безопасность

Проверка образа

docker scan git.shts.su/[repository]:latest
docker scan git.shts.su/[repository]:tabler

Запуск в изолированной сети

docker network create s3-lists-network
docker run -d \
  --name s3-lists-manager \
  --network s3-lists-network \
  -p 3001:3001 \
  git.shts.su/[repository]:latest

📈 Производительность

Ограничение ресурсов

docker run -d \
  --name s3-lists-manager \
  --memory=512m \
  --cpus=0.5 \
  -p 3001:3001 \
  git.shts.su/[repository]:latest

Мониторинг ресурсов

docker stats --no-stream s3-lists-manager

🆘 Устранение неполадок

Проверка статуса контейнера

docker ps -a | grep s3-lists-manager

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

docker restart s3-lists-manager

Очистка неиспользуемых образов

docker image prune -f

Примечание: Замените [repository] на актуальное имя вашего репозитория в Gitea.