Source : CLAUDE.md lignes 434-507, 634-690
| Propriété | Valeur |
|---|---|
| Version | 29.1.4 |
| data-root | /mnt/stock_8to/33800-stack/docker/prod/ (sur prod-portainer) |
| Config | /etc/docker/daemon.json |
Chaque projet doit avoir un fichier conf.gouroubleu.yml à la racine.
name: "mon-service"
type: "node" # node | bun | rust | python | custom
domain: "api.33800.nowhere84.com" # Flexible : *.nowhere84.com, *.86000.nowhere84.com, etc.
port: 3000
env:
NODE_ENV: "@ENV"
DATABASE_URL: "@databases.POSTGRES"
# OBLIGATOIRE - Logs vers Loki
logs:
enabled: true
driver: loki
labels:
type: "api" # api | app | worker | cron
# Auto-génération config Nginx
nginx:
enabled: true
ssl: true
websocket: false
| Section | Description | Obligatoire |
|---|---|---|
| name | Nom du service | Oui |
| type | Type (node, bun, rust...) | Oui |
| domain | Domaine public | Oui |
| port | Port d'écoute | Oui |
| env | Variables d'environnement | Non |
| storage | Volumes NFS/local/RAM | Non |
| logs | Config logging Loki | Oui |
| nginx | Config reverse proxy | Recommandé |
| scheduler | Jobs internes | Non |
logs:
enabled: true # Activer Loki
driver: loki # loki | json-file | none
labels:
type: "api" # Type de service
options:
loki-url: "http://192.168.1.12:3100/loki/api/v1/push"
| Fichier | Usage |
|---|---|
| docker/examples/conf.gouroubleu.template.yml | Template complet |
| docker/examples/conf.gouroubleu.simple-api-node.yml | API Node.js |
| docker/examples/conf.gouroubleu.fullstack-node.yml | Fullstack Node |
| docker/examples/conf.gouroubleu.webapp-bun.yml | Web App Bun |
| Script | Usage |
|---|---|
| scripts/lib/parse-config.sh | Parser YAML |
| scripts/deploy/deploy.sh | Déploiement auto |
| scripts/nginx/generate.sh | Génération Nginx |
Les containers avec scheduler interne (node-cron, Celery, etc.) exposent un fichier /app/scheduler.json pour permettre la détection automatique par collect.sh.
Template : /stock_8to/33800-stack/docker/templates/scheduler.json.template
{
"name": "app-name",
"version": "0.0.0",
"schedules": [
{
"name": "job-name",
"cron": "0 */6 * * *",
"description": "Description du job",
"timezone": "UTC",
"enabled": true
}
],
"logs": {
"app": "stdout",
"error": "stderr",
"access": null
},
"endpoints": {
"health": "/health",
"scheduler": "/api/stats",
"trigger": "/api/collect"
}
}
Containers avec scheduler.json :
| Container | Env | Cron | Description |
|---|---|---|---|
| needfinder-collector | DEV | 0 */6 * * * |
Collecte Reddit + HN + Analyse IA |
Intégration :
collect.sh scanne automatiquement les containers et récupère les manifestsgenerate.sh affiche les schedulers dans la page crons.htmlAjouter à un container :
scheduler.json à la racine du projetCOPY scheduler.json ./ dans le DockerfileImportant : Quand supabase-rest-prod est recréé, il perd son alias rest nécessaire pour Kong.
Commande de fix :
ssh gouroubleu@192.168.1.12 "docker network disconnect supabase-prod_supabase-prod supabase-rest-prod && docker network connect --alias rest supabase-prod_supabase-prod supabase-rest-prod"
Symptôme : Kong retourne 500 avec erreur DNS "DNS resolution failed: dns server error" pour rest.
Cause : Le container est recréé sans l'alias (ex: modification PGRST_DB_SCHEMAS).
Emplacement : /home/gouroubleu/apps/connectors-stack/ (sur prod-portainer)
Architecture : Stack unifiée avec network namespace partagé
services:
wireguard-sidecar:
# Gère tunnels WireGuard
# Expose ports 5403 (connectors-api) et 5410 (sidecar API)
cap_add: [NET_ADMIN, SYS_MODULE]
sysctls: [net.ipv4.ip_forward=1, ...]
connectors-api:
# Partage le namespace réseau du sidecar
network_mode: "service:wireguard-sidecar"
# Peut utiliser directement les tunnels VPN créés
Pourquoi network_mode? : Sans partage de namespace, connectors-api ne peut pas utiliser les tunnels VPN créés dans le sidecar (chaque container a son propre stack réseau).
Fichiers :
docker-compose.yml : Stack unifiée.env : Credentials (SSH_ENCRYPTIONKEY, SUPABASE, LINKEDIN_)Commandes :
# Démarrer
cd /home/gouroubleu/apps/connectors-stack && docker compose up -d
# Logs
docker logs connectors-api -f
docker logs wireguard-sidecar -f
# Status tunnels
docker exec wireguard-sidecar curl localhost:5410/tunnel/list