Files
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

265 lines
8.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 версия с конкретным коммитом
## 🚀 Запуск
### Основная версия
```bash
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 версия
```bash
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
```
## 🔄 Обновление
### Основная версия
```bash
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 версия
```bash
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`:
```yaml
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` в той же директории:**
```bash
ENCRYPTION_KEY=your-64-hex-character-key-here
```
Запуск:
```bash
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/…` сохраняется):
```nginx
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.
**Генерация ключа:**
```bash
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
```
**Пример запуска с ENCRYPTION_KEY:**
```bash
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` для всех запусков контейнера. При изменении ключа старые зашифрованные пароли не смогут быть расшифрованы.
## 📊 Мониторинг
### Просмотр логов
```bash
# Основная версия
docker logs s3-lists-manager
# Tabler версия
docker logs s3-lists-manager-tabler
```
### Статистика контейнеров
```bash
docker stats s3-lists-manager s3-lists-manager-tabler
```
## 🔍 Отладка
### Вход в контейнер
```bash
# Основная версия
docker exec -it s3-lists-manager /bin/bash
# Tabler версия
docker exec -it s3-lists-manager-tabler /bin/bash
```
### Проверка процессов
```bash
docker exec s3-lists-manager ps aux
```
## 🏗️ Сборка локально
### Основная версия
```bash
git checkout main
docker build -t s3-lists-manager:local .
```
### Tabler версия
```bash
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 версии
## 🔒 Безопасность
### Проверка образа
```bash
docker scan git.shts.su/[repository]:latest
docker scan git.shts.su/[repository]:tabler
```
### Запуск в изолированной сети
```bash
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
```
## 📈 Производительность
### Ограничение ресурсов
```bash
docker run -d \
--name s3-lists-manager \
--memory=512m \
--cpus=0.5 \
-p 3001:3001 \
git.shts.su/[repository]:latest
```
### Мониторинг ресурсов
```bash
docker stats --no-stream s3-lists-manager
```
## 🆘 Устранение неполадок
### Проверка статуса контейнера
```bash
docker ps -a | grep s3-lists-manager
```
### Перезапуск контейнера
```bash
docker restart s3-lists-manager
```
### Очистка неиспользуемых образов
```bash
docker image prune -f
```
---
**Примечание**: Замените `[repository]` на актуальное имя вашего репозитория в Gitea.