Este paquete contiene un esqueleto mínimo para levantar:
- TimescaleDB + PostGIS – almacenamiento de medidas PTX/PRX y geometrías
- Redis – broker de colas
- Collector (Celery) – lee Huawei/Zyxel OLTs y persiste datos
- FastAPI – expone API REST para ONTs/CTOs y endpoint GeoJSON
- Nginx + Leaflet admin‑UI – interfaz web para posicionar ONTs ↔ CTOs
⚡ Listo para
docker compose up -d
y empezar a desarrollar.
.
├── docker-compose.yml
├── .env.example
├── api/ # servicio FastAPI
├── collector/ # workers Celery
└── admin-ui/ # app Leaflet Reemplaza valores en `.env` (copiar de `.env.example`) y ajusta `OLT_*` según tu red.
AGIS Orchestrator OLT es un sistema que:
- Lee el estado de varias OLTs (Huawei MA56XXT, Zyxel OLT1408A…) y mide potencias (PTX/PRX) de ONTs.
- Almacena datos en PostgreSQL con TimescaleDB y PostGIS para series temporales y geolocalización.
- Expone una API REST para que aGIS TELCO consuma métricas y topología.
- Ofrece una interfaz web (Docker) que muestra un mapa interactivo con ONTs y CTOs.
- Docker v20.10+ y Docker Compose plugin (CLI
docker compose
). - Acceso a un registro de imágenes (Docker Hub, Harbor…) con las imágenes
api
,collector
,nginx
, etc. - Credenciales de aGIS (host, usuario, contraseña y service UUID).
- Fichero de configuración de OLTs en
collector/config/olts.yaml
.
tree collector/config
collector/config
└── olts.yaml
En la raíz del proyecto crea un fichero .env.prod
(o .env
si no existe) con el siguiente contenido:
# ────────────────────────────
# PostgreSQL / TimescaleDB
# ────────────────────────────
POSTGRES_PASSWORD=changeme # contraseña del super-usuario postgres
POSTGRES_DB=olt # nombre de la base de datos que usará el servicio
# Cadena DSN que utilizan la API y el collector
DB_DSN=postgresql://postgres:changeme@db:5432/olt
# ────────────────────────────
# Redis (broker Celery)
# ────────────────────────────
REDIS_URL=redis://redis:6379/0 # contenedor “redis” declarado en docker-compose, cuidado debe ser 6379, pero lo tengo ya en mi maq
# ────────────────────────────
# Seguridad API (JWT)
# ────────────────────────────
JWT_SECRET=supersecret
# ────────────────────────────
# OLTs
# ────────────────────────────
OLT_CONFIG_PATH = '/config/olts.yaml'
# ────────────────────────────
# aGIS CTOs
# ────────────────────────────
aGIS_HOST=https://agis-eu.stratosgs.com
aGIS_USER=USER
aGIS_PASS=PASS
aGIS_SERVICE=UUID_SERVICE
# ────────────────────────────
# NGINX
# ────────────────────────────
NGINX_FILE_PATH=./nginx.conf
Nota: el script de despliegue buscará
.env.prod
; si no existe, usará.env
.
Define tus equipos OLT en formato YAML. Ejemplo:
# config/olts.yaml (ejemplo completo)
defaults:
poll_interval: 300 # 5 min
prompt: ">" # valor genérico; cada OLT puede sobre-escribirlo
olts:
- id: zyxel-TEST
vendor: zyxel
host: 152.170.74.208
port: 2300
username: admin
password: 1234
prompt: "OLT1408A#"
description: "Zyxel – TEST"
poll_interval: 20
- id: huawei-TEST
vendor: huawei
host: 192.168.88.25
port: 23
username: root
password: admin
prompt: "MA5603T"
snmp_ip: 192.168.88.25
snmp_port: 161
snmp_community: public
description: "Huawei – Laboratorio"
poll_interval: 90
pon_list:
- frame: "0"
slot: 0
port: 0
- frame: "0"
slot: 0
port: 1
El contenedor monta collector/config
en /config
y lee /config/olts.yaml
.
-
Compose Files: utiliza
docker-compose.yml
junto condocker-compose.prod.yml
, donde este último montacollector/config
. -
Ejecuta el script de despliegue:
chmod +x deploy.prod.sh ./deploy.prod.sh
- Hace
docker compose pull
de las imágenes. - Arranca los servicios con
--force-recreate --remove-orphans
. - Genera logs timestamped en
logs/YYYYMMDD_HHMMSS/collector.log
yapi.log
.
- Hace
docker compose down
- PostgreSQL (volumen
olt_data
):
docker run --rm -v olt_data:/var/lib/postgresql/data -v "$(pwd)/backup:/backup" alpine:3.18 sh -c "tar czf /backup/db-$(date +%F).tgz -C /var/lib/postgresql/data ."
- Redis (volumen
redis_data
):
docker run --rm \
-v redis_data:/data \
-v "$env/backup:/backup" \
alpine:3.18 \
tar czvf /backup/redis_data_$(date +%F).tar.gz -C /data .
-
Configuración & Logs:
cp -r collector/config "$env/backup/olts_config_$(date +%F)" cp -r logs "$env/backup/logs_$(date +%F)"
Extrae el backup en el volumen correspondiente:
docker run --rm -v olt_data:/var/lib/postgresql/data -v "$(pwd)/backup:/backup" alpine:3.18 sh -c "rm -rf /var/lib/postgresql/data/* && tar xzf /backup/db-2025-06-24.tgz -C /var/lib/postgresql/data"
Repite para redis_data
cambiando rutas.
-
Ver logs en tiempo real:
docker compose logs -f collector api
-
Consultar estado de servicios:
docker compose ps
-
Limpiar imágenes dangling:
docker image prune -f
Juanma Quijada – juanma.quijada@stratosgs.com
MIT License – ver LICENSE.
Para más detalles técnicos, consulta la documentación interna o el repositorio en GitHub.