- диагностика: JSON на GET /api/evobgp и /evobgp - совместимость с nginx, срезающим префикс /api - DOCKER.md: пример location /api/ и типичная ошибка Made-with: Cursor
8.7 KiB
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 UIgit.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.