Ctrl K
ComunidadGuías…

deploy/DEPLOIEMENT.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Déploiement Vektor (v1.5.3+)

## Modèle : pull-based, CI-gated, zéro secret chez GitHub

```
GitHub (tags v*) ──HTTPS public──> VPS (watcher systemd toutes les 5 min)
                                        │
                          CI verte ? ───┤ (API GitHub publique, sans auth)
                                        ▼
                        /opt/vektor-releases/<tag>/ + docker compose up
                                        │
                          /health OK ? ─┤ non → ROLLBACK auto (release N-1)
                                        ▼
                                 fichier `version` = tag déployé
```

Pourquoi ce modèle :

- **Aucune clé SSH privée dans les secrets GitHub** : le VPS tire en HTTPS
  sortant, GitHub ne peut jamais initier une connexion vers le VPS. Un
  compte GitHub compromis ne donne aucun accès à l'infrastructure.
- **CI-gated** : un tag dont les checks ne sont pas tous `success` n'est
  jamais déployé.
- **Secrets inviolés** : `.env` et `secrets/` vivent uniquement dans
  `/opt/vektor` (chmod 600 / 700), copiés dans le nouveau release au
  déploiement, jamais committés ni téléchargés.

## Installation (une fois, sur le VPS)

```bash
# Depuis le release courant (ou clonage ponctuel) :
install -m 0755 deploy/vektor-deploy.sh /usr/local/bin/vektor-deploy
install -m 0644 deploy/vektor-deploy.timer deploy/vektor-deploy.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable --now vektor-deploy.timer
```

Vérifier : `systemctl status vektor-deploy.timer` puis
`journalctl -u vektor-deploy -f` au prochain tag.

Note : le health check post-deploy s'exécute **dans le conteneur**
(`docker exec vektor-api python` vers `127.0.0.1:8000/health`) car l'API
ne publie aucun port vers l'hôte — seule Caddy la joignait auparavant via
le réseau Docker.

## Déployer une version

```bash
git tag v1.5.4 && git push origin v1.5.4   # CI verte → déployé en ≤ 5 min
```

Déploiement immédiat sans tag (test, hotfix) :

```bash
vektor-deploy --force      # déploie HEAD du repo, CI non vérifiée
```

## Rollback

Chaque release reste dans `/opt/vektor-releases/<tag>/` (avec son `.env`
et ses secrets copiés). Retour arrière :

```bash
cd /opt/vektor-releases/<tag-précédent>
docker compose -f compose.yml --profile telegram up -d
```

Le rollback automatique (health check KO 90 s après le up) fait exactement
cela vers le tag contenu dans `/opt/vektor/version` avant le déploiement.

## Notes sécurité

- Le script refuse de tourner sans `.env` et se verrouille (`flock`) :
  pas de déploiements concurrents.
- Les logs vont dans `journalctl -u vektor-deploy` : aucune valeur secrète
  n'y est imprimée (seulement des tags, chemins et verdicts).
- `--force` court-circuite la vérification CI : à réserver aux cas où le
  déploiement de HEAD est assumé.
- Les anciens releases s'accumulent dans `/opt/vektor-releases` :
  purger périodiquement (garder les 3-4 derniers suffit au rollback).

## Ce que ce dossier ne contient pas

Aucun secret, aucune adresse privée, aucun identifiant : tout ce qui est
spécifique à l'infrastructure (IP, tokens, hosts) reste dans `.env`,
`secrets/` ou la mémoire locale hors git.