1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
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` |
|