RGZ NOC — Système d'Information Complet¶
PROJET MOSAÏQUE
Convertir 500 revendeurs WiFi Zone illégaux en réseau légal FAI
RGZ S.A. (Bénin) — Stack 22 conteneurs — 81 outils complets
Vue d'Ensemble¶
PROJET MOSAÏQUE est une initiative complète de digitalisation et de légalisation du secteur WiFi en Afrique de l'Ouest. Le système intègre 81 outils organisés en 14 catégories (A-N), déployés via 22 conteneurs Docker coordonnés par une stack d'orchestration robuste.
État: Stack core EN PRODUCTION depuis 2026-02-19. Phases 1-4 planifiées (outils 1-80 à développer progressivement).
Accès Rapide¶
API FastAPI
Port 8000 — Swagger OpenAPIDashboard Admin
Port 3000 — React AdminPortail Captif
Port 80 — Authentification WiFiGrafana
Port 3000 — Monitoring temps réelSite Recensement
Outil #81 — EN PRODUCTIONDocumentation
Vous êtes ici — MkDocs MaterialDémarrage Rapide (3 commandes)¶
# 1. Cloner le dépôt
git clone https://github.com/solvixtech/rgz-noc.git && cd rgz-noc
# 2. Configurer les variables d'environnement
cp .env.example .env && nano .env
# 3. Initialiser et démarrer la stack
./scripts/init.sh && ./scripts/start.sh
Vérifier l'état:
Architecture Système¶
graph TB
subgraph "CORE Services (14)"
API["rgz-api:8000<br/>FastAPI Python"]
DB["rgz-db:5432<br/>PostgreSQL 16"]
REDIS["rgz-redis:6379<br/>Redis 7"]
RADIUS["rgz-radius:1812<br/>FreeRADIUS 3.2"]
GW["rgz-gateway<br/>nftables NAT"]
DNS["rgz-dns:53<br/>Unbound"]
BEAT["rgz-beat<br/>Celery Beat"]
PORTAL["rgz-portal:80<br/>HTML SPA"]
WEB["rgz-web:3000<br/>React Admin"]
KEA["rgz-kea:67<br/>Kea DHCP"]
IDS["rgz-ids<br/>Suricata 7.x"]
NGINX["rgz-nginx:443<br/>HTTP Proxy"]
WG["rgz-wireguard<br/>VPN"]
CANARY["rgz-canary<br/>Synthetics"]
end
subgraph "MONITORING (8)"
PROM["rgz-prometheus:9090<br/>Time-series DB"]
AM["rgz-alertmanager<br/>Alerts"]
GRAFANA["rgz-grafana:3000<br/>Dashboards"]
ES["rgz-elasticsearch<br/>Logs"]
KB["rgz-kibana:5601<br/>Log UI"]
LS["rgz-logstash<br/>Pipeline"]
NF["rgz-netflow:2055<br/>Flow collector"]
DOCS["rgz-docs:8080<br/>MkDocs"]
end
API -->|deps| DB
API -->|cache| REDIS
RADIUS -->|auth| API
GW -->|traffic| RADIUS
BEAT -->|scheduled| API
PORTAL -->|auth| API
WEB -->|data| API
IDS -->|ids| GW
PROM -->|scrape| API
PROM -->|scrape| RADIUS
GRAFANA -->|read| PROM
ES -->|logs| API
KB -->|ui| ES
style API fill:#3f68ae,color:#fff
style DB fill:#3f68ae,color:#fff
style GRAFANA fill:#f5c445,color:#34383c
style PROM fill:#2e7d32,color:#fff
Réseau interne: rgz_rgz-net 172.23.0.0/16
Ingress TLS: Traefik + Let's Encrypt (certifiés jusqu'à 2026-05-20)
Domaines Opérationnels¶
| Domaine | Service | Status | Port |
|---|---|---|---|
| api-rgz.duckdns.org | FastAPI | ✅ Production | 8000 → 443 |
| admin-rgz.duckdns.org | React Dashboard | ✅ Production | 3000 → 443 |
| access-rgz.duckdns.org | Portail Captif | ✅ Production | 80 → 443 |
| grafana-rgz.duckdns.org | Grafana | ✅ Production | 3000 → 443 |
| registre-rgz.duckdns.org | Site Recensement | ✅ Production | HTTP |
| docs-rgz.duckdns.org | Documentation | ✅ Production | 8080 → 443 |
Certificats TLS renouvelés automatiquement via certbot-dns-duckdns (tâche Celery #50).
Catégories d'Outils (14)¶
Architecture de Déploiement¶
Types de Conteneurs¶
| Type | Exemple | Déploiement | Fichier |
|---|---|---|---|
| A | rgz-api, rgz-db | Conteneur principal | docker/*/Dockerfile |
| B | #11-#64 (plupart) | Module Python dans rgz-api | app/api/v1/endpoints/ |
| C | #21, #39, #75 | Tâche Celery Beat | app/tasks/ |
| D | #51-#55 | Route React | web/src/pages/ |
| E | #16, #18, #34 | Config/script dans conteneur existant | scripts/, config/ |
| F | Prometheus, Grafana, Kea | Image officielle + config | config/*/ |
| G | #33, #65, #67, #79 | Conteneur dédié | tools/*/ |
| H | #81 | Déployé séparément | recensement/ |
Dépendances de Phases¶
PHASE 0 (parallélisable) : #4, #5, #7, #9, #38, #40, #65, #67, #79
PHASE 1 (dépend Phase 0) : #1, #6, #8, #10, #30, #75
PHASE 2 (dépend Phase 1) : #2, #3, #12, #15, #20, #26-28, #31-32, #34, #39, #43, #45-48, #50, #57, #59-62, #68, #77, #80
PHASE 3 (dépend Phase 2) : #11, #13, #14, #16-19, #22, #24, #29, #33, #37, #41-42, #44, #49, #51-53, #55, #56, #58, #63, #66, #69, #76, #78
PHASE 4 (dépend Phase 3) : #21, #23, #25, #54, #60, #64, #70-74
Services de Base (14 conteneurs core)¶
version: '3.9'
services:
rgz-api:
image: localhost/rgz-api:latest
ports: ["8000:8000"]
restart: unless-stopped
logging:
driver: json-file
options: {max-size: "10m", max-file: "3"}
depends_on: [rgz-db, rgz-redis]
rgz-db:
image: postgres:16-alpine
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
restart: unless-stopped
logging:
driver: json-file
options: {max-size: "10m", max-file: "3"}
rgz-redis:
image: redis:7-alpine
restart: unless-stopped
logging:
driver: json-file
options: {max-size: "10m", max-file: "3"}
rgz-radius:
image: localhost/rgz-radius:latest
restart: unless-stopped
logging:
driver: json-file
options: {max-size: "10m", max-file: "3"}
rgz-beat:
image: localhost/rgz-api:latest
command: celery -A app.celery_app beat --loglevel=info
restart: unless-stopped
logging:
driver: json-file
options: {max-size: "10m", max-file: "3"}
Scripts Opérationnels Disponibles¶
./scripts/init.sh # Initialiser les bases de données et configs
./scripts/start.sh # Démarrer la stack complète
./scripts/stop.sh # Arrêter proprement tous les services
./scripts/status.sh # Afficher l'état des conteneurs
./scripts/logs.sh # Afficher les logs temps réel
./scripts/restart.sh # Redémarrer services spécifiques
./scripts/smoke_test.sh # Vérifier la santé du système
./scripts/update.sh # Mettre à jour les images
./scripts/backup.sh # Sauvegarder données et configs
./scripts/init-elk.sh # Initialiser indices Elasticsearch
Prochaines Étapes¶
- Phase 0 (Immédiat): Outils sans dépendances RF + monitoring avancé
- Phase 1 (2 semaines): API core, RADIUS, DHCP, backup
- Phase 2 (4 semaines): Services principaux (facturation, QoS, sécurité)
- Phase 3 (8 semaines): Modules portail, dashboards, workflows
- Phase 4 (12 semaines): Intégrations, rapports, BI avancée
Ressources Techniques¶
- API Reference: https://api-rgz.duckdns.org/docs
- Monitoring: https://grafana-rgz.duckdns.org
- Logs: https://kibana-rgz.duckdns.org
- Status Page: https://access-rgz.duckdns.org/status
Dernière mise à jour: 2026-02-21 Prochaine révision: 2026-03-07