- Ajout scripts/ reproduisant chaque étape (secrets, render config, up CLI, init Garage, bootstrap prod, admin, vérif E2E, adoption Coolify, backup) - Templates envsubst (config.yml, garage.toml, cantaloupe.properties) + .example - deploy.conf (config non-secrète : domaine, versions, uuids Coolify) - docs/ : ARCHITECTURE, TROUBLESHOOTING (11 problèmes/fixes), RUNBOOK, SECURITY - Makefile (raccourcis) - .gitignore + retrait du suivi de .env/.secrets.env/config.yml/garage.toml (fichiers conservés sur disque ; secrets restent dans l'historique -> voir SECURITY.md) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
54 lines
2.6 KiB
Bash
Executable File
54 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Adopte la stack comme ressource "Docker Compose" gérée par Coolify (via l'API).
|
|
# Prérequis : token API Coolify dans $COOLIFY_TOKEN_FILE (Settings -> API Tokens, read/write).
|
|
#
|
|
# ⚠️ Coolify remappe les volumes nommés en <uuid>_* et IGNORE `external:` -> la stack repart sur
|
|
# des volumes VIDES. Sur un déploiement neuf : ré-init ensuite (20/30/40). Sur une stack avec
|
|
# données : préférer des bind-mounts absolus (host dirs) plutôt que des volumes nommés.
|
|
source "$(dirname "$0")/lib.sh"
|
|
load_secrets
|
|
[ -f "$COOLIFY_TOKEN_FILE" ] || { echo "❌ Token Coolify absent ($COOLIFY_TOKEN_FILE)"; exit 1; }
|
|
|
|
COMPOSE_FILE="$ROOT/docker-compose.coolify.yml"
|
|
|
|
log "1) Projet 'arkindex' (si absent)"
|
|
if [ -z "${COOLIFY_PROJECT_UUID:-}" ]; then
|
|
COOLIFY_PROJECT_UUID=$(capi POST /projects -d '{"name":"arkindex","description":"Arkindex full stack"}' \
|
|
| python3 -c 'import sys,json;print(json.load(sys.stdin)["uuid"])')
|
|
echo " project_uuid=$COOLIFY_PROJECT_UUID (à reporter dans deploy.conf)"
|
|
fi
|
|
|
|
log "2) Création du service (docker_compose_raw en BASE64)"
|
|
BODY=$(python3 - "$COMPOSE_FILE" <<PY
|
|
import base64,json,sys
|
|
raw=open(sys.argv[1]).read()
|
|
print(json.dumps({
|
|
"server_uuid":"$COOLIFY_SERVER_UUID","project_uuid":"$COOLIFY_PROJECT_UUID",
|
|
"environment_name":"$COOLIFY_ENV_NAME","environment_uuid":"$COOLIFY_ENV_UUID",
|
|
"name":"arkindex","description":"Arkindex full stack",
|
|
"docker_compose_raw":base64.b64encode(raw.encode()).decode(),"instant_deploy":False}))
|
|
PY
|
|
)
|
|
RESP=$(capi POST /services -d "$BODY")
|
|
SVC=$(echo "$RESP" | python3 -c 'import sys,json;print(json.load(sys.stdin).get("uuid",""))' 2>/dev/null)
|
|
[ -n "$SVC" ] || { echo "❌ Échec création service: $RESP"; exit 1; }
|
|
echo " service_uuid=$SVC (à reporter dans deploy.conf : COOLIFY_SERVICE_UUID + CONTAINER_SUFFIX=-$SVC)"
|
|
|
|
log "3) Variables d'env (secrets) sur le service"
|
|
for K in PG_PASS GK_ID GK_SECRET; do
|
|
V="${!K}"
|
|
capi PATCH "/services/$SVC/envs" -d "{\"key\":\"$K\",\"value\":\"$V\"}" >/dev/null \
|
|
|| capi POST "/services/$SVC/envs" -d "{\"key\":\"$K\",\"value\":\"$V\"}" >/dev/null
|
|
done
|
|
ok "Env posées."
|
|
|
|
warn "Étape suivante MANUELLE (coupure) :"
|
|
echo " cd $ROOT && docker compose down # arrête la stack CLI (garde les volumes)"
|
|
echo " # UNE SEULE fois :"
|
|
echo " curl -s -X POST -H \"Authorization: Bearer \$(cat $COOLIFY_TOKEN_FILE)\" \\"
|
|
echo " \"$COOLIFY_API/deploy?uuid=$SVC\""
|
|
echo " # puis ré-init sur les volumes neufs :"
|
|
echo " CONTAINER_SUFFIX=-$SVC scripts/20-garage-init.sh"
|
|
echo " CONTAINER_SUFFIX=-$SVC scripts/30-arkindex-init.sh"
|
|
echo " CONTAINER_SUFFIX=-$SVC scripts/40-create-admin.sh"
|