# OPERATIONS — Maintenance et opérations courantes > Procédures pour maintenir, dépanner, et faire évoluer l'infrastructure Seize. --- ## 🔍 Vérifications quotidiennes (5 min/jour) ### Healthcheck rapide ```bash # Tous les conteneurs sont-ils Up ? sudo docker ps --format "table {{.Names}}\t{{.Status}}" | grep -v "Up" # → Aucune ligne sauf le header = tout va bien # Tous les sous-domaines répondent-ils en HTTPS ? for domain in sso intranet git n8n portainer code status; do echo -n "$domain : " curl -sk -o /dev/null -w "%{http_code}\n" "https://$domain.seizeconsulting.com" done # → 200 ou 302 sur chaque ligne = OK # → 500, 502, 503 = problème # Espace disque restant df -h / # → Surveiller si > 80% utilisé ``` ### Logs récents ```bash # Logs Traefik (erreurs uniquement) sudo docker logs --tail 100 traefik 2>&1 | grep -i "error\|warn" # Logs Zitadel (erreurs) sudo docker logs --tail 100 zitadel-zitadel-api-1 2>&1 | grep -i "error\|level=err" # Logs OAuth2-Proxy intranet (erreurs récentes) sudo docker logs --tail 100 oauth2-proxy 2>&1 | grep -i "error" ``` --- ## 📦 Backups ### ⚠️ État actuel : AUCUN backup automatique À mettre en place en priorité. ### Procédure backup manuel (à exécuter avant grosse modif) ```bash # Créer un dossier de backup daté BACKUP_DIR=~/backups/$(date +%Y%m%d-%H%M%S) mkdir -p $BACKUP_DIR # Backup Postgres (Gitea, n8n) docker exec postgres pg_dumpall -U postgres > $BACKUP_DIR/postgres.sql # Backup Postgres Zitadel (sa propre instance) docker exec zitadel-postgres-1 pg_dumpall -U postgres > $BACKUP_DIR/postgres-zitadel.sql # Backup volumes Docker (Gitea data, etc.) sudo tar czf $BACKUP_DIR/gitea-data.tar.gz -C ~/docker/gitea data/ sudo tar czf $BACKUP_DIR/uptime-data.tar.gz -C ~/docker/uptime-kuma data/ sudo tar czf $BACKUP_DIR/portainer-data.tar.gz -C ~/docker/portainer data/ # Backup configs (.env, docker-compose.yml) tar czf $BACKUP_DIR/configs.tar.gz -C ~/docker . # Backup scripts furious-to-zitadel tar czf $BACKUP_DIR/furious-scripts.tar.gz -C ~/ furious-to-zitadel/ echo "✅ Backup terminé dans $BACKUP_DIR" ls -lh $BACKUP_DIR ``` ### Procédure backup automatique (à mettre en place) Voir [docs/09-troubleshooting.md](./docs/09-troubleshooting.md) section Backup automatisé. --- ## 🔄 Mises à jour ### Mise à jour d'un service Docker ```bash cd ~/docker/ docker compose pull docker compose up -d ``` ### Vérifier qu'une mise à jour ne casse rien ```bash # 1. Backup avant ~/backup-manual.sh # script à créer si pas existant # 2. Pull la nouvelle image docker compose pull # 3. Restart docker compose down docker compose up -d # 4. Vérifier les logs docker compose logs -f # Ctrl+C pour quitter # 5. Tester le service (login, fonctionnalités principales) ``` ### Mises à jour critiques à surveiller | Service | Risque | Procédure | |---|---|---| | Traefik | Changement breaking config | Lire le CHANGELOG avant | | Zitadel | Schema DB peut changer | Backup obligatoire avant | | Postgres | Migration majeure | Backup + lire migration guide | | OAuth2-Proxy | Changement de scopes/headers | Tester en dry-run | --- ## ➕ Ajouter un nouvel outil ### Procédure standard (~1h) #### 1. Ajouter le record DNS Chez le registrar : créer record A `.seizeconsulting.com` → IP du serveur. #### 2. Déployer l'outil (sans SSO) ```bash mkdir -p ~/docker/ cd ~/docker/ # Créer docker-compose.yml cat > docker-compose.yml << EOF services: : image: : container_name: restart: unless-stopped networks: - web # PAS de labels Traefik ici → c'est OAuth2-Proxy qui sera exposé networks: web: external: true EOF docker compose up -d ``` #### 3. Créer l'application dans Zitadel Console Zitadel → Projects → Infra Seize → New application : - Type : **Web** - Authentication Method : **Basic** - Grant Types : **Authorization Code** - Redirect URL : `https://.seizeconsulting.com/oauth2/callback` - Token Settings : - Auth Token Type : **JWT** - User roles inside ID Token : ✅ - Include user's profile info in the ID Token : ✅ - Add user roles to the access token : ✅ Récupérer : **Client ID** + **Client Secret**. #### 4. Déployer un OAuth2-Proxy dédié ```bash mkdir -p ~/docker/oauth2-proxy- cd ~/docker/oauth2-proxy- # docker-compose.yml (adapter depuis configs/oauth2-proxy/docker-compose.yml.template) # .env (adapter depuis configs/oauth2-proxy/.env.example) ``` `.env` (variables à remplacer) : ```env OAUTH2_PROXY_PROVIDER=oidc OAUTH2_PROXY_CLIENT_ID= OAUTH2_PROXY_CLIENT_SECRET= OAUTH2_PROXY_COOKIE_SECRET=<32 chars random> OAUTH2_PROXY_OIDC_ISSUER_URL=https://sso.seizeconsulting.com OAUTH2_PROXY_REDIRECT_URL=https://.seizeconsulting.com/oauth2/callback OAUTH2_PROXY_UPSTREAMS=http://: OAUTH2_PROXY_SCOPE=openid email profile urn:zitadel:iam:org:project:roles OAUTH2_PROXY_EMAIL_DOMAINS=* OAUTH2_PROXY_COOKIE_DOMAINS=.seizeconsulting.com OAUTH2_PROXY_COOKIE_SECURE=true OAUTH2_PROXY_HTTP_ADDRESS=0.0.0.0:4180 OAUTH2_PROXY_REVERSE_PROXY=true OAUTH2_PROXY_PASS_AUTHORIZATION_HEADER=true OAUTH2_PROXY_PASS_ACCESS_TOKEN=true OAUTH2_PROXY_SET_AUTHORIZATION_HEADER=true OAUTH2_PROXY_SET_XAUTHREQUEST=true OAUTH2_PROXY_WHITELIST_DOMAINS=.seizeconsulting.com OAUTH2_PROXY_SKIP_PROVIDER_BUTTON=true ``` `chmod 600 .env` + `docker compose up -d`. #### 5. Ajouter une carte sur l'intranet Éditer `~/docker/intranet/index.html` et ajouter une nouvelle carte dans la section `` : ```html
Description courte
.seizeconsulting.com Catégorie
``` #### 6. Mettre à jour la matrice RBAC dans le JavaScript Éditer le `