Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
14 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 26 additions & 8 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,9 @@
# du service MariaDB sur le réseau Docker externe `frontend` (cf. docker-compose.prod.yml).
# Si MariaDB tourne sur l'hôte NAS via Package Center DSM et que le réseau
# Docker n'a pas accès direct, utiliser l'IP LAN du NAS au lieu du hostname.
# Mot de passe : le générer en HEXADÉCIMAL (`openssl rand -hex 32`) — une sortie
# base64 peut contenir `/`, qui termine l'identifiant dans une URL et rend
# DATABASE_URL inexploitable.
DATABASE_URL=<EDIT: mysql://kesh:<password>@<mariadb-host>:3306/kesh>

# --- Application ---
Expand Down Expand Up @@ -324,16 +327,31 @@ RUST_LOG=info
# KESH_PRODUCTION_RESET=

# =============================================================================
# Service MariaDB bundled (DEV ONLY — docker-compose.yml + docker-compose.dev.yml)
# Service MariaDB intégré (docker-compose.yml — installation autonome)
# =============================================================================
#
# Ces variables sont consommées par les composes dev (`docker-compose.yml` et
# `docker-compose.dev.yml`) qui démarrent un service MariaDB en sidecar pour
# le développement local. **PAS UTILISÉES par docker-compose.prod.yml** —
# en prod, MariaDB est fournie par l'utilisateur (Package Center DSM ou
# autre) et configurée via `DATABASE_URL` ci-dessus.
# Lues par `docker-compose.yml`, qui démarre Kesh ET sa base MariaDB.
# `docker-compose.prod.yml` ne les lit pas : il n'a pas de service MariaDB (la
# base est fournie par l'exploitant, cf. DATABASE_URL ci-dessus).
# `docker-compose.dev.yml` ne les lit pas : ses mots de passe de développement
# sont écrits en dur dans le fichier.
#
# 1. INSTALLATION EXISTANTE (mise à jour) : reprendre la valeur avec laquelle la
# base a été créée, JAMAIS une neuve (manuel d'administration, § Passer à la
# 0.13.0). MariaDB ne lit ces deux valeurs qu'à la CRÉATION de la base : les
# changer ici ensuite ne change pas le mot de passe enregistré, et Kesh
# échoue à se connecter (erreur 1045). Pour changer un mot de passe :
# manuel d'administration, § Changer un mot de passe MariaDB.
# 2. INSTALLATION NEUVE : générer chaque mot de passe par
# openssl rand -hex 32
# (hexadécimal : un mot de passe base64 peut contenir `/`, qui casse une
# DATABASE_URL), décommenter la ligne et y écrire la valeur.
#
# Sans ces deux lignes, Compose refuse de démarrer en nommant la variable.
# Décommentée SANS valeur (`MARIADB_PASSWORD=`), une ligne fait aussi refuser
# Compose : une valeur vide n'est pas un mot de passe.

MARIADB_ROOT_PASSWORD=kesh_dev_root
#MARIADB_ROOT_PASSWORD=
MARIADB_DATABASE=kesh
MARIADB_USER=kesh
MARIADB_PASSWORD=kesh_dev
#MARIADB_PASSWORD=
36 changes: 33 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -237,11 +237,41 @@ jobs:
steps:
- uses: actions/checkout@v4
# Story 15-11a (#550) — validation des deux compose distribués par Compose
# lui-même (clé inconnue ou en double, interpolation mal formée). Sans
# `.env` : les variables obligatoires non posées ne font qu'avertir.
# lui-même (clé inconnue ou en double, interpolation mal formée).
# Story 15-13a (#551) — `docker-compose.yml` exige ses deux mots de passe
# MariaDB (`${…:?…}`) : validé AVEC des valeurs factices, puis le refus
# SANS elles est exigé (sortie en échec, variable nommée). Chaque
# variable est aussi retirée SEULE, l'autre posée (sinon le refus sur
# l'autre masquerait un défaut revenu) : le retour d'un défaut publié
# pour `MARIADB_ROOT_PASSWORD` fait rougir cette étape. Pour
# `MARIADB_PASSWORD`, non : la `DATABASE_URL` de `kesh-api` l'exige
# aussi, et Compose la nomme encore si le seul service `mariadb`
# retrouve un défaut — c'est le test Rust `configuration_transmise::
# mariadb` qui rougit alors. `docker-compose.prod.yml` n'a pas de
# variable obligatoire de cette forme : validé sans `.env`. La sortie
# d'erreur va sous `$RUNNER_TEMP`, hors du contexte de build Docker.
- name: Validate compose files
run: |
docker compose -f docker-compose.yml config -q
refus="$RUNNER_TEMP/refus.txt"
MARIADB_ROOT_PASSWORD=ci MARIADB_PASSWORD=ci \
docker compose -f docker-compose.yml config -q
if env -u MARIADB_ROOT_PASSWORD -u MARIADB_PASSWORD \
docker compose -f docker-compose.yml config -q 2> "$refus"; then
echo "docker-compose.yml doit refuser l'absence des mots de passe MariaDB"
exit 1
fi
cat "$refus"
grep -qE 'MARIADB_(ROOT_)?PASSWORD' "$refus"
for paire in MARIADB_ROOT_PASSWORD:MARIADB_PASSWORD \
MARIADB_PASSWORD:MARIADB_ROOT_PASSWORD; do
absente="${paire%%:*}"; posee="${paire#*:}"
if env -u MARIADB_ROOT_PASSWORD -u MARIADB_PASSWORD "$posee=ci" \
docker compose -f docker-compose.yml config -q 2> "$refus"; then
echo "docker-compose.yml doit refuser l'absence de $absente"
exit 1
fi
grep -q "required variable $absente is missing" "$refus"
done
docker compose -f docker-compose.prod.yml config -q
- uses: docker/setup-buildx-action@v3
- name: Build image (no push)
Expand Down
Loading
Loading