fix(devops): deploy.sh build depuis Dockerfiles + pull main Forgejo (#82)
This commit is contained in:
parent
10705858ac
commit
4206452a7e
3 changed files with 34 additions and 19 deletions
|
|
@ -201,7 +201,7 @@ La CI Forgejo execute secret-scan, php-lint, static-tests (PHPStan niveau 6 + PH
|
|||
|
||||
## Deploiement
|
||||
|
||||
*CI Forgejo Actions sur PR vers `dev`/`main` (secret-scan gitleaks, php-lint, static-tests PHPStan + PHPUnit, js-tests), avec auto-merge sur CI verte. Deploiement a declenchement humain via `scripts/deploy.sh` (ff-only puis `docker compose -f docker-compose.prod.yml pull && up -d` ; le one-shot `wakdo-migrate` applique migrations + seed). Un veritable CD automatique sur merge `main` reste a armer avec un secret de connexion (choix exploitant). Voir `docs/PROJECT_CONTEXT.md` section 7 Bloc 5.*
|
||||
*CI Forgejo Actions sur PR vers `dev`/`main` (secret-scan gitleaks, php-lint, static-tests PHPStan + PHPUnit, js-tests), avec auto-merge sur CI verte. Deploiement a declenchement humain via `scripts/deploy.sh` (recupere `main` depuis Forgejo puis `docker compose build --pull && up -d` ; les images sont buildees localement depuis les Dockerfiles, le one-shot `wakdo-migrate` applique migrations + seed). L'automatisation visee est pull-based (un job cron cote hote detectant un nouveau `main`), a armer ensuite. Voir `docs/PROJECT_CONTEXT.md` section 7 Bloc 5.*
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -271,7 +271,7 @@ Reseaux :
|
|||
- `45 4 * * *` — purge des compteurs de throttle expires
|
||||
- Differes (templates commentes dans `docker/cron/crontab`, a activer plus tard) : purge des sessions expirees, agregation des stats sur le jour de service
|
||||
- **CI Forgejo Actions** (act_runner auto-heberge) : lint PHP + PHPStan + PHPUnit + secret-scan (gitleaks) + js-tests sur PR -> dev
|
||||
- **CD : deploiement scripte a declenchement humain** (`scripts/deploy.sh` : ff-only puis `docker compose -f docker-compose.prod.yml pull && up -d`). Choix solo dev sur un environnement de prod unique. Un veritable deploiement continu (job Forgejo sur push main -> SSH -> `deploy.sh`) reste a armer avec un secret de connexion (decision exploitant)
|
||||
- **CD : deploiement scripte a declenchement humain** (`scripts/deploy.sh` : recupere `main` depuis Forgejo puis `docker compose build --pull && up -d` -- les images wakdo sont buildees localement depuis les Dockerfiles, pas de registre). Choix solo dev sur un environnement de prod unique. L'automatisation visee est **pull-based** : un job cron cote hote qui detecte un nouveau `main` et lance `deploy.sh` (a armer ensuite, reutilise le meme script)
|
||||
- `.env.example` documente (parametres securite : argon2id, lockout, seuils throttle, retention RGPD), secrets hors du repo
|
||||
- `php.ini` durci (expose_php off, session cookies httponly/secure/samesite, upload limite)
|
||||
- Healthcheck Traefik + readiness probes
|
||||
|
|
|
|||
|
|
@ -1,19 +1,26 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# Wakdo - deploiement scripte (declenchement humain).
|
||||
# Wakdo - deploiement scripte (declenchement humain ; socle d'un CD pull-based).
|
||||
#
|
||||
# Strategie CD du projet : le deploiement est volontairement DECLENCHE A LA MAIN
|
||||
# (solo dev, un seul environnement de prod). Ce script fiabilise l'operation
|
||||
# (Cr 7.b.2) ; il n'est PAS execute automatiquement par la CI. Un veritable
|
||||
# deploiement continu (job Forgejo sur push main -> SSH -> ce script) reste a armer
|
||||
# explicitement avec un secret de connexion, decision laissee a l'exploitant.
|
||||
# Strategie CD : deploiement DECLENCHE A LA MAIN pour l'instant (solo dev, prod
|
||||
# unique). Ce script fiabilise l'operation (Cr 7.b.2). Il :
|
||||
# 1. recupere la derniere `main` depuis Forgejo (git fetch + fast-forward) ;
|
||||
# 2. RECONSTRUIT les images depuis les Dockerfiles -- les images wakdo
|
||||
# (apache / php-fpm / cron) sont buildees localement, il n'y a pas de registre,
|
||||
# donc on `build`, on ne `pull` pas ;
|
||||
# 3. recree la stack.
|
||||
# L'automatisation "pull-based" (un job cron cote hote qui detecte un nouveau `main`
|
||||
# et lance ce script) est l'etape suivante : elle reutilisera ce meme script.
|
||||
#
|
||||
# A lancer SUR L'HOTE de prod, depuis la racine du depot :
|
||||
# scripts/deploy.sh [BRANCHE] (defaut : main)
|
||||
# scripts/deploy.sh [BRANCHE] (defaut : main)
|
||||
# GIT_REMOTE=origin scripts/deploy.sh (override du remote git)
|
||||
# COMPOSE_FILE=docker-compose.yml scripts/deploy.sh (override du fichier compose)
|
||||
#
|
||||
# Prerequis : docker-compose.prod.yml present (gitignore, propre a l'hote) et un
|
||||
# .env de prod renseigne. Le service one-shot wakdo-migrate applique migrations +
|
||||
# seed (idempotents) avant que l'app ne serve.
|
||||
# Prerequis : le fichier compose cible (defaut docker-compose.prod.yml, gitignore,
|
||||
# propre a l'hote) declare les services wakdo en `build:` (memes contextes que le
|
||||
# docker-compose.yml standalone) et un .env de prod renseigne. Le service one-shot
|
||||
# wakdo-migrate applique migrations + seed (idempotents) avant que l'app ne serve.
|
||||
#
|
||||
# Exit codes : 0 = OK ; 1 = prerequis manquant / confirmation refusee.
|
||||
|
||||
|
|
@ -23,11 +30,19 @@ ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|||
cd "$ROOT"
|
||||
|
||||
BRANCH="${1:-main}"
|
||||
REMOTE="${GIT_REMOTE:-origin}"
|
||||
COMPOSE_FILE="docker-compose.prod.yml"
|
||||
# Remote : le canonique du projet est `forgejo` (git.acadenice.com) ; on le prefere
|
||||
# s'il existe, sinon `origin` (clone standard). Surchargeable via GIT_REMOTE.
|
||||
if [ -n "${GIT_REMOTE:-}" ]; then
|
||||
REMOTE="$GIT_REMOTE"
|
||||
elif git remote | grep -qx forgejo; then
|
||||
REMOTE="forgejo"
|
||||
else
|
||||
REMOTE="origin"
|
||||
fi
|
||||
COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.prod.yml}"
|
||||
|
||||
if [ ! -f "$COMPOSE_FILE" ]; then
|
||||
echo "deploy: $COMPOSE_FILE introuvable (fichier de prod, propre a l'hote)." >&2
|
||||
echo "deploy: $COMPOSE_FILE introuvable (fichier compose de l'hote)." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
|
@ -36,7 +51,7 @@ if ! command -v docker >/dev/null 2>&1; then
|
|||
exit 1
|
||||
fi
|
||||
|
||||
echo "Deploiement Wakdo : branche '$BRANCH' via $COMPOSE_FILE"
|
||||
echo "Deploiement Wakdo : branche '$BRANCH' depuis '$REMOTE' via $COMPOSE_FILE"
|
||||
printf 'Confirmer le deploiement en production ? [oui/NON] '
|
||||
read -r answer
|
||||
if [ "$answer" != "oui" ]; then
|
||||
|
|
@ -44,13 +59,13 @@ if [ "$answer" != "oui" ]; then
|
|||
exit 1
|
||||
fi
|
||||
|
||||
echo "[1/4] mise a jour du code (fast-forward only, remote: $REMOTE)"
|
||||
echo "[1/4] recuperation de '$BRANCH' depuis '$REMOTE' (fast-forward only)"
|
||||
git fetch --prune "$REMOTE" "$BRANCH"
|
||||
git checkout "$BRANCH"
|
||||
git merge --ff-only "$REMOTE/$BRANCH"
|
||||
|
||||
echo "[2/4] recuperation des images"
|
||||
docker compose -f "$COMPOSE_FILE" pull
|
||||
echo "[2/4] reconstruction des images depuis les Dockerfiles (--pull rafraichit les bases)"
|
||||
docker compose -f "$COMPOSE_FILE" build --pull
|
||||
|
||||
echo "[3/4] demarrage de la stack (migrate + seed idempotents puis app)"
|
||||
docker compose -f "$COMPOSE_FILE" up -d
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue