diff options
| author | ertopogo <erwin.t.pombett@gmail.com> | 2026-02-19 11:37:59 +0100 |
|---|---|---|
| committer | ertopogo <erwin.t.pombett@gmail.com> | 2026-02-19 11:37:59 +0100 |
| commit | 0ccef49fef2e9e5383f9b2ff001cb0dd807c7f96 (patch) | |
| tree | 33eaa31eb72a91800ba6a45b9f51012707cfd015 /DEPLOY.md | |
| parent | a21bd6a6710d123ef3bfc3c9aab37fc0c276f9c5 (diff) | |
docs: add deployment guide (chillka, huitral, Docker, Keycloak)
Co-authored-by: Cursor <cursoragent@cursor.com>
Diffstat (limited to 'DEPLOY.md')
| -rw-r--r-- | DEPLOY.md | 349 |
1 files changed, 349 insertions, 0 deletions
diff --git a/DEPLOY.md b/DEPLOY.md new file mode 100644 index 0000000..27369f1 --- /dev/null +++ b/DEPLOY.md @@ -0,0 +1,349 @@ +# Deploiement Der-topogo + +Guide complet pour la mise en place du repo Git sur chillka et le deploiement sur huitral. + +## Architecture + +``` +Poste dev (Windows) + | + | git push + v +chillka (bare repo Git) + | + | git clone / git pull (ou hook post-receive) + v +huitral (Docker Compose) + ├── Caddy (reverse proxy, TLS auto) + └── App Next.js + Payload CMS + | + | connexion PostgreSQL (existant) + | connexion Keycloak OIDC (npagnun) +``` + +--- + +## 1. Creer le bare repo sur chillka + +```bash +ssh toshiro@chillka + +# Creer le repertoire pour les repos (une seule fois) +mkdir -p ~/git +cd ~/git + +# Creer le bare repo +git init --bare der-topogo.git + +# Ajouter une description (optionnel) +echo "Site consulting IAM & Securite - Der-topogo" > ~/git/der-topogo.git/description + +exit +``` + +## 2. Connecter le repo local a chillka + +Depuis le poste de developpement Windows : + +```bash +cd e:\Dev\Web-Works\Der-topogo + +# Ajouter chillka comme remote "origin" +git remote add origin toshiro@chillka:git/der-topogo.git + +# Pousser le code (premier push) +git push -u origin main +``` + +Pour les push suivants, un simple `git push` suffit. + +## 3. Premier deploiement sur huitral + +### 3a. Preparer le serveur + +```bash +ssh toshiro@huitral + +# Verifier que Docker et Docker Compose sont installes +docker --version +docker compose version + +# Creer le dossier applicatif +mkdir -p ~/apps +cd ~/apps + +# Cloner le repo depuis chillka +git clone toshiro@chillka:git/der-topogo.git +cd der-topogo +``` + +### 3b. Configurer l'environnement de production + +```bash +# Copier le template +cp .env.example .env.local + +# Editer avec les valeurs de production +nano .env.local +``` + +Valeurs a renseigner dans `.env.local` : + +| Variable | Description | Exemple | +|---|---|---| +| `DATABASE_URI` | Connexion PostgreSQL | `postgresql://user:pass@pg-host:5432/dertopogo` | +| `PAYLOAD_SECRET` | Secret Payload CMS (min 32 chars) | Generer avec `openssl rand -hex 32` | +| `NEXT_PUBLIC_SITE_URL` | URL publique du site | `https://votre-domaine.com` | +| `KEYCLOAK_ISSUER` | URL du realm Keycloak (npagnun) | `https://npagnun.domain.com/realms/votre-realm` | +| `KEYCLOAK_CLIENT_ID` | Client ID OIDC | `dertopogo` | +| `KEYCLOAK_CLIENT_SECRET` | Client Secret OIDC | Depuis la console Keycloak | +| `AUTH_SECRET` | Secret Auth.js (min 32 chars) | Generer avec `openssl rand -hex 32` | +| `AUTH_URL` | URL du site (identique a SITE_URL) | `https://votre-domaine.com` | + +Pour generer les secrets : + +```bash +# Generer PAYLOAD_SECRET +openssl rand -hex 32 + +# Generer AUTH_SECRET +openssl rand -hex 32 +``` + +### 3c. Configurer le domaine dans le Caddyfile + +```bash +nano Caddyfile +``` + +Remplacer `your-domain.com` par le vrai nom de domaine. Caddy gerera automatiquement le certificat TLS via Let's Encrypt. + +### 3d. Construire et lancer + +```bash +docker compose up -d --build +``` + +### 3e. Verifier le deploiement + +```bash +# Verifier que les conteneurs tournent +docker compose ps + +# Verifier les logs de l'application +docker compose logs app + +# Verifier les logs de Caddy +docker compose logs caddy + +# Tester l'acces HTTP (depuis huitral) +curl -I https://votre-domaine.com +``` + +Verifications attendues : +- `docker compose ps` : 2 services "running" (caddy + app) +- Les headers de securite sont presents (X-Content-Type-Options, X-Frame-Options, etc.) +- Le site repond en HTTPS avec un certificat valide +- `/admin` affiche l'interface Payload CMS + +--- + +## 4. Mises a jour + +### Workflow standard + +Depuis le poste de dev : + +```bash +# Apres avoir commit les changements +git push origin main +``` + +Puis sur huitral : + +```bash +ssh toshiro@huitral +cd ~/apps/der-topogo +git pull origin main +docker compose up -d --build +``` + +### Mise a jour sans downtime + +Si le build prend du temps et que vous voulez minimiser le downtime : + +```bash +ssh toshiro@huitral +cd ~/apps/der-topogo +git pull origin main + +# Construire la nouvelle image sans arreter les services +docker compose build app + +# Relancer uniquement le conteneur app +docker compose up -d --no-deps app +``` + +--- + +## 5. Deploy automatique (hook post-receive) + +Pour deployer automatiquement sur huitral a chaque `git push` vers chillka. + +### Pre-requis + +Chillka doit pouvoir se connecter en SSH a huitral. Tester : + +```bash +ssh toshiro@chillka +ssh toshiro@huitral echo "OK" +``` + +Si ca ne fonctionne pas, generer une cle sur chillka et l'autoriser sur huitral : + +```bash +# Sur chillka +ssh-keygen -t ed25519 -C "chillka-deploy" +ssh-copy-id toshiro@huitral +``` + +### Creer le hook + +```bash +ssh toshiro@chillka + +cat > ~/git/der-topogo.git/hooks/post-receive << 'HOOK' +#!/bin/bash +BRANCH=$(git rev-parse --symbolic --abbrev-ref $3) + +if [ "$BRANCH" = "main" ]; then + echo "==> Push on main detected, deploying to huitral..." + ssh toshiro@huitral "cd ~/apps/der-topogo && git pull origin main && docker compose up -d --build" + echo "==> Deploy complete." +else + echo "==> Push on branch $BRANCH, skipping deploy." +fi +HOOK + +chmod +x ~/git/der-topogo.git/hooks/post-receive +exit +``` + +Desormais, chaque `git push origin main` depuis le poste de dev deploiera automatiquement sur huitral. + +--- + +## 6. Rollback + +### Revenir au commit precedent + +```bash +ssh toshiro@huitral +cd ~/apps/der-topogo + +# Voir les derniers commits +git log --oneline -10 + +# Revenir a un commit specifique +git checkout <commit-hash> + +# Reconstruire +docker compose up -d --build +``` + +### Revenir a la derniere version stable + +```bash +git checkout main +docker compose up -d --build +``` + +--- + +## 7. Commandes Docker Compose utiles + +```bash +# Voir l'etat des services +docker compose ps + +# Voir les logs en temps reel +docker compose logs -f + +# Logs d'un service specifique +docker compose logs -f app +docker compose logs -f caddy + +# Redemarrer un service +docker compose restart app + +# Arreter tous les services +docker compose down + +# Arreter et supprimer les volumes (ATTENTION: perte de donnees media) +docker compose down -v + +# Reconstruire sans cache +docker compose build --no-cache app + +# Voir l'utilisation des ressources +docker compose top +docker stats +``` + +--- + +## 8. Sauvegarde + +### Donnees a sauvegarder + +1. **Base PostgreSQL** : contient les donnees Payload CMS (articles, services, users, etc.) +2. **Volume media** : images et fichiers uploades +3. **Fichier .env.local** : configuration et secrets + +### Sauvegarder les medias + +```bash +# Depuis huitral +docker compose cp app:/app/media ./backup-media-$(date +%Y%m%d) +``` + +### Sauvegarder la base PostgreSQL + +```bash +# Adapter l'hote et les credentials selon votre .env.local +pg_dump -h pg-host -U user -d dertopogo > backup-db-$(date +%Y%m%d).sql +``` + +--- + +## 9. Configuration Keycloak (npagnun) + +Pour connecter le site a votre Keycloak existant, creer un client OIDC dans votre realm : + +1. Se connecter a l'admin Keycloak : `https://npagnun.domain.com/admin` +2. Selectionner le realm +3. Clients > Create client +4. Parametres : + +| Parametre | Valeur | +|---|---| +| Client ID | `dertopogo` | +| Client Protocol | openid-connect | +| Client authentication | On (confidential) | +| Valid Redirect URIs | `https://votre-domaine.com/api/auth/callback/keycloak` | +| Valid Post Logout Redirect URIs | `https://votre-domaine.com` | +| Web Origins | `https://votre-domaine.com` | + +5. Onglet "Credentials" : copier le Client Secret dans `.env.local` (`KEYCLOAK_CLIENT_SECRET`) +6. Onglet "Client scopes" > ajouter `roles` au scope par defaut pour inclure les roles dans le token + +--- + +## Resume des serveurs + +| Serveur | Role | Acces | +|---|---|---| +| **chillka** | Repo Git (bare) | `toshiro@chillka:git/der-topogo.git` | +| **huitral** | Hebergement Docker | `toshiro@huitral` (apps dans `~/apps/der-topogo`) | +| **npagnun** | Keycloak (IdP OIDC) | Console admin Keycloak | +| **PostgreSQL** | Base de donnees | Connexion via `DATABASE_URI` | |
