From a2e466c074a888419f5eb5aa05995cf4ff31b173 Mon Sep 17 00:00:00 2001 From: Bruno Charest Date: Fri, 26 Jun 2026 16:07:02 -0400 Subject: [PATCH] Transformer en template docker-stack-template avec .env.example - Ajout .env.example : variables Docker Compose - docker-compose.yml : mots de passe variabilises - Scripts : chargement de config a 2 niveaux (global + per-app) - docker-scripts.conf : renomme docker-stack-template - URLs mises a jour dans setup, install_cron, README --- .env.example | 22 ++++++++++++++++++++++ README.md | 2 +- docker-auto-update.sh | 23 +++++++++++++---------- docker-backup.sh | 21 ++++++++++++++------- docker-compose.yml | 20 ++++++++++---------- docker-scripts.conf | 23 ++++++++++++++++------- install_cron.sh | 23 ++++++++++++++++++----- restore.sh | 21 +++++++++++++++++---- setup.sh | 14 +++++++------- 9 files changed, 118 insertions(+), 51 deletions(-) create mode 100644 .env.example diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..0cea271 --- /dev/null +++ b/.env.example @@ -0,0 +1,22 @@ +# ============================================================================= +# .env.example — Variables d'environnement pour Docker Compose +# ============================================================================= +# Copiez ce fichier en .env et modifiez les valeurs avant le déploiement. +# cp .env.example .env +# +# Ce fichier est lu automatiquement par docker compose. +# ============================================================================= + +# ─── MySQL ──────────────────────────────────────────────────────────────────── +MYSQL_ROOT_PASSWORD=gitea +MYSQL_DATABASE=gitea +MYSQL_USER=gitea +MYSQL_PASSWORD=change_me_in_production + +# ─── Application ────────────────────────────────────────────────────────────── +GITEA_DB_PASSWORD=${MYSQL_PASSWORD} +GITEA_DISABLE_REGISTRATION=true + +# ─── Utilisateur conteneur ──────────────────────────────────────────────────── +USER_UID=1000 +USER_GID=1000 diff --git a/README.md b/README.md index 576cb4f..d2d891c 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,7 @@ sudo chown -R $USER:$USER /opt/docker-scripts /srv/docker # 2. Cloner les scripts cd /opt -git clone https://git.dracodev.net/Outils/docker-generic-scripts.git docker-scripts +git clone https://git.dracodev.net/Outils/docker-stack-template.git docker-scripts # 3. Installer bash /opt/docker-scripts/setup.sh diff --git a/docker-auto-update.sh b/docker-auto-update.sh index a0b712d..1968eb8 100644 --- a/docker-auto-update.sh +++ b/docker-auto-update.sh @@ -11,26 +11,29 @@ set -euo pipefail -# ─── Charger la configuration commune ───────────────────────────────────────── +# ─── Charger la configuration ──────────────────────────────────────────────── +# Ordre : 1) config globale (template) → 2) config spécifique à l'app (surcharge) SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -CONFIG_FILE="${CONFIG_FILE:-$SCRIPT_DIR/docker-scripts.conf}" -if [[ -f "$CONFIG_FILE" ]]; then +GLOBAL_CONFIG="${SCRIPT_DIR}/docker-scripts.conf" +if [[ -f "$GLOBAL_CONFIG" ]]; then # shellcheck source=/dev/null - source "$CONFIG_FILE" + source "$GLOBAL_CONFIG" fi # ─── Nom de l'application (défaut si pas dans la config) ───────────────────── DOCKER_APP_NAME="${DOCKER_APP_NAME:-gitea}" -# ─── Configuration locale (après chargement conf, permet surcharge env) ────── +# ─── Configuration locale (après chargement global, permet surcharge env) ──── COMPOSE_DIR="${COMPOSE_DIR:-/srv/docker/$DOCKER_APP_NAME}" COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.yml}" -APP_SERVICE="${APP_SERVICE:-${DOCKER_APP_NAME}_server}" -APP_CONTAINER="${APP_CONTAINER:-${DOCKER_APP_NAME}_server}" -DB_CONTAINER="${DB_CONTAINER:-${DOCKER_APP_NAME}_db}" -IMAGE_NAME="${IMAGE_NAME:-gitea/gitea}" -IMAGE_TAG="${IMAGE_TAG:-latest}" + +# Charger la config spécifique à l'application (surcharge la config globale) +APP_CONFIG="${COMPOSE_DIR}/docker-scripts.conf" +if [[ -f "$APP_CONFIG" ]] && [[ "$APP_CONFIG" != "$GLOBAL_CONFIG" ]]; then + # shellcheck source=/dev/null + source "$APP_CONFIG" +fi # Base de données DB_NAME="${DB_NAME:-$DOCKER_APP_NAME}" diff --git a/docker-backup.sh b/docker-backup.sh index f0230e2..21a3798 100644 --- a/docker-backup.sh +++ b/docker-backup.sh @@ -17,23 +17,30 @@ set -euo pipefail -# ─── Charger la configuration commune ───────────────────────────────────────── +# ─── Charger la configuration ──────────────────────────────────────────────── +# Ordre : 1) config globale (template) → 2) config spécifique à l'app (surcharge) SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -CONFIG_FILE="${CONFIG_FILE:-$SCRIPT_DIR/docker-scripts.conf}" -if [[ -f "$CONFIG_FILE" ]]; then +GLOBAL_CONFIG="${SCRIPT_DIR}/docker-scripts.conf" +if [[ -f "$GLOBAL_CONFIG" ]]; then # shellcheck source=/dev/null - source "$CONFIG_FILE" + source "$GLOBAL_CONFIG" fi # ─── Nom de l'application (défaut si pas dans la config) ───────────────────── DOCKER_APP_NAME="${DOCKER_APP_NAME:-gitea}" -# ─── Configuration locale (après chargement conf, permet surcharge env) ────── -BACKUP_DIR="${BACKUP_DIR:-/NFS/BACKUP/DOCKER/$HOSTNAME/$DOCKER_APP_NAME}" -COMPOSE_DIR="${COMPOSE_DIR:-$HOME/dev/git/outils/$DOCKER_APP_NAME}" +# ─── Configuration locale (après chargement global, permet surcharge env) ──── +COMPOSE_DIR="${COMPOSE_DIR:-/srv/docker/$DOCKER_APP_NAME}" COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.yml}" +# Charger la config spécifique à l'application (surcharge la config globale) +APP_CONFIG="${COMPOSE_DIR}/docker-scripts.conf" +if [[ -f "$APP_CONFIG" ]] && [[ "$APP_CONFIG" != "$GLOBAL_CONFIG" ]]; then + # shellcheck source=/dev/null + source "$APP_CONFIG" +fi + # Conteneurs (dérivés de DOCKER_APP_NAME) DB_CONTAINER="${DB_CONTAINER:-${DOCKER_APP_NAME}_db}" APP_CONTAINER="${APP_CONTAINER:-${DOCKER_APP_NAME}_server}" diff --git a/docker-compose.yml b/docker-compose.yml index b5ae39e..659dfc6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,14 +8,14 @@ services: image: gitea/gitea:latest container_name: gitea_server environment: - - USER_UID=1000 - - USER_GID=1000 + - USER_UID=${USER_UID:-1000} + - USER_GID=${USER_GID:-1000} - GITEA__database__DB_TYPE=mysql - GITEA__database__HOST=gitea_db:3306 - - GITEA__database__NAME=gitea - - GITEA__database__USER=gitea - - GITEA__database__PASSWD=chab30 - - GITEA__DISABLE_REGISTRATION=true + - GITEA__database__NAME=${MYSQL_DATABASE:-gitea} + - GITEA__database__USER=${MYSQL_USER:-gitea} + - GITEA__database__PASSWD=${GITEA_DB_PASSWORD:-${MYSQL_PASSWORD:-change_me}} + - GITEA__DISABLE_REGISTRATION=${GITEA_DISABLE_REGISTRATION:-true} restart: always networks: - gitea @@ -42,10 +42,10 @@ services: container_name: gitea_db restart: always environment: - - MYSQL_ROOT_PASSWORD=gitea - - MYSQL_USER=gitea - - MYSQL_PASSWORD=chab30 - - MYSQL_DATABASE=gitea + - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-gitea} + - MYSQL_USER=${MYSQL_USER:-gitea} + - MYSQL_PASSWORD=${MYSQL_PASSWORD:-change_me} + - MYSQL_DATABASE=${MYSQL_DATABASE:-gitea} networks: - gitea volumes: diff --git a/docker-scripts.conf b/docker-scripts.conf index 8d47570..afbb819 100644 --- a/docker-scripts.conf +++ b/docker-scripts.conf @@ -1,10 +1,15 @@ # ============================================================================= -# docker-scripts.conf — Configuration unifiée pour scripts Docker génériques +# docker-scripts.conf — Configuration pour scripts Docker (TEMPLATE GLOBAL) # ============================================================================= -# Ce fichier est sourcé par tous les scripts (backup, auto-update, install_cron). -# Les valeurs peuvent être surchargées par des variables d'environnement. +# Ce fichier dans /opt/docker-scripts/ est le TEMPLATE par défaut. +# Toutes les valeurs utilisent ${VAR:-defaut} pour être surchargeables. # -# Pour réutiliser avec une autre app Docker, changer DOCKER_APP_NAME : +# Pour déployer une nouvelle app : +# 1. cp /opt/docker-scripts/docker-scripts.conf /srv/docker/monapp/ +# 2. Éditer DOCKER_APP_NAME, IMAGE_NAME et les mots de passe +# 3. Les scripts chargent automatiquement la config de l'app en priorité +# +# Surcharge possible par variable d'environnement : # DOCKER_APP_NAME=monapp bash docker-backup.sh # ============================================================================= @@ -13,10 +18,11 @@ HOSTNAME="${HOSTNAME:-$(hostname)}" # Dépôt Git source (utilisé par setup.sh pour clone/mise à jour) -GIT_REPO="${GIT_REPO:-https://git.dracodev.net/Outils/docker-generic-scripts.git}" +GIT_REPO="${GIT_REPO:-https://git.dracodev.net/Outils/docker-stack-template.git}" GIT_BRANCH="${GIT_BRANCH:-main}" # Nom de l'application Docker (définit tous les dérivés) +# 🔧 À CHANGER pour chaque app : DOCKER_APP_NAME="monapp" DOCKER_APP_NAME="${DOCKER_APP_NAME:-gitea}" # ─── Chemins (dérivés de DOCKER_APP_NAME et HOSTNAME) ───────────────────────── @@ -35,14 +41,16 @@ DB_SERVICE="${DB_SERVICE:-${DOCKER_APP_NAME}_db}" DB_CONTAINER="${DB_CONTAINER:-${DOCKER_APP_NAME}_db}" # ─── Image Docker ───────────────────────────────────────────────────────────── +# 🔧 À CHANGER pour chaque app IMAGE_NAME="${IMAGE_NAME:-gitea/gitea}" IMAGE_TAG="${IMAGE_TAG:-latest}" # ─── Base de données (dérivés de DOCKER_APP_NAME) ───────────────────────────── DB_NAME="${DB_NAME:-$DOCKER_APP_NAME}" DB_USER="${DB_USER:-$DOCKER_APP_NAME}" -DB_PASSWORD="${DB_PASSWORD:-chab30}" -DB_ROOT_PASSWORD="${DB_ROOT_PASSWORD:-gitea}" +# 🔧 À CHANGER : mots de passe (doivent correspondre à .env) +DB_PASSWORD="${DB_PASSWORD:-change_me_in_production}" +DB_ROOT_PASSWORD="${DB_ROOT_PASSWORD:-change_me_in_production}" # ─── Volumes Docker - chemins HÔTE (dérivés de DOCKER_APP_NAME) ─────────────── # Co-localisés dans /srv/docker/ pour faciliter backup et migration @@ -50,6 +58,7 @@ VOLUME_DATA="${VOLUME_DATA:-/srv/docker/$DOCKER_APP_NAME/data}" VOLUME_MYSQL="${VOLUME_MYSQL:-/srv/docker/$DOCKER_APP_NAME/mysql}" # ─── URLs ───────────────────────────────────────────────────────────────────── +# 🔧 À CHANGER pour chaque app HEALTH_CHECK_URL="${HEALTH_CHECK_URL:-http://localhost:3000}" HEALTH_CHECK_TIMEOUT="${HEALTH_CHECK_TIMEOUT:-30}" # Endpoint version (ex: /api/v1/version pour Gitea). Laisser vide pour détection auto. diff --git a/install_cron.sh b/install_cron.sh index 78e0a63..c3dd95e 100755 --- a/install_cron.sh +++ b/install_cron.sh @@ -14,17 +14,30 @@ set -euo pipefail -# ─── Charger la configuration commune ───────────────────────────────────────── +# ─── Charger la configuration ──────────────────────────────────────────────── +# Ordre : 1) config globale (template) → 2) config spécifique à l'app (surcharge) SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -CONFIG_FILE="${CONFIG_FILE:-$SCRIPT_DIR/docker-scripts.conf}" -if [[ -f "$CONFIG_FILE" ]]; then +GLOBAL_CONFIG="${SCRIPT_DIR}/docker-scripts.conf" +if [[ -f "$GLOBAL_CONFIG" ]]; then # shellcheck source=/dev/null - source "$CONFIG_FILE" + source "$GLOBAL_CONFIG" fi +# ─── Nom de l'application (défaut si pas dans la config) ───────────────────── DOCKER_APP_NAME="${DOCKER_APP_NAME:-gitea}" +# ─── Configuration locale (après chargement global, permet surcharge env) ──── +COMPOSE_DIR="${COMPOSE_DIR:-/srv/docker/$DOCKER_APP_NAME}" +COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.yml}" + +# Charger la config spécifique à l'application (surcharge la config globale) +APP_CONFIG="${COMPOSE_DIR}/docker-scripts.conf" +if [[ -f "$APP_CONFIG" ]] && [[ "$APP_CONFIG" != "$GLOBAL_CONFIG" ]]; then + # shellcheck source=/dev/null + source "$APP_CONFIG" +fi + # ─── Configuration locale ──────────────────────────────────────────────────── SCRIPTS_DIR="${SCRIPTS_DIR:-/opt/docker-scripts}" CRON_BACKUP_SCHEDULE="${CRON_BACKUP_SCHEDULE:-0 2 * * *}" @@ -211,7 +224,7 @@ do_install() { echo "" err "Prérequis manquants. Placez les scripts dans $SCRIPTS_DIR/" echo "" - echo " git clone https://git.dracodev.net/Outils/docker-generic-scripts.git $SCRIPTS_DIR" + echo " git clone https://git.dracodev.net/Outils/docker-stack-template.git $SCRIPTS_DIR" echo "" exit 1 } diff --git a/restore.sh b/restore.sh index f18f150..bb1535e 100644 --- a/restore.sh +++ b/restore.sh @@ -14,17 +14,30 @@ set -euo pipefail -# ─── Charger la configuration commune ───────────────────────────────────────── +# ─── Charger la configuration ──────────────────────────────────────────────── +# Ordre : 1) config globale (template) → 2) config spécifique à l'app (surcharge) SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -CONFIG_FILE="${CONFIG_FILE:-$SCRIPT_DIR/docker-scripts.conf}" -if [[ -f "$CONFIG_FILE" ]]; then +GLOBAL_CONFIG="${SCRIPT_DIR}/docker-scripts.conf" +if [[ -f "$GLOBAL_CONFIG" ]]; then # shellcheck source=/dev/null - source "$CONFIG_FILE" + source "$GLOBAL_CONFIG" fi +# ─── Nom de l'application (défaut si pas dans la config) ───────────────────── DOCKER_APP_NAME="${DOCKER_APP_NAME:-gitea}" +# ─── Configuration locale (après chargement global, permet surcharge env) ──── +COMPOSE_DIR="${COMPOSE_DIR:-/srv/docker/$DOCKER_APP_NAME}" +COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.yml}" + +# Charger la config spécifique à l'application (surcharge la config globale) +APP_CONFIG="${COMPOSE_DIR}/docker-scripts.conf" +if [[ -f "$APP_CONFIG" ]] && [[ "$APP_CONFIG" != "$GLOBAL_CONFIG" ]]; then + # shellcheck source=/dev/null + source "$APP_CONFIG" +fi + # ─── Couleurs ─────────────────────────────────────────────────────────────── RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; NC='\033[0m' ok() { echo -e " ${GREEN}✅${NC} $1"; } diff --git a/setup.sh b/setup.sh index 78ec9c5..429f3e1 100644 --- a/setup.sh +++ b/setup.sh @@ -20,13 +20,19 @@ set -euo pipefail -# ─── Charger la configuration si présente (permet de centraliser tous les défauts) ─ +# ─── Charger la configuration du template (si présent dans le même dossier) ──── SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" if [[ -f "$SCRIPT_DIR/docker-scripts.conf" ]]; then # shellcheck source=/dev/null source "$SCRIPT_DIR/docker-scripts.conf" fi +# ─── Configuration (fallbacks après chargement du template) ────────────────── +GIT_REPO="${GIT_REPO:-https://git.dracodev.net/Outils/docker-stack-template.git}" +SCRIPTS_DIR="${SCRIPTS_DIR:-/opt/docker-scripts}" +BRANCH="${GIT_BRANCH:-main}" +DOCKER_APP_NAME="${DOCKER_APP_NAME:-gitea}" + # ─── Couleurs ─────────────────────────────────────────────────────────────── RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; BLUE='\033[0;34m'; NC='\033[0m' ok() { echo -e " ${GREEN}✅${NC} $1"; } @@ -35,12 +41,6 @@ err() { echo -e " ${RED}❌${NC} $1"; } info() { echo -e " ${CYAN}📋${NC} $1"; } step() { echo -e "\n${BLUE}════════════════════════════════════════════════════════${NC}"; echo -e "${BLUE}🔧 $1${NC}"; echo -e "${BLUE}════════════════════════════════════════════════════════${NC}"; } -# ─── Configuration (fallbacks après chargement de la config) ────────────────── -GIT_REPO="${GIT_REPO:-https://git.dracodev.net/Outils/docker-generic-scripts.git}" -SCRIPTS_DIR="${SCRIPTS_DIR:-/opt/docker-scripts}" -BRANCH="${GIT_BRANCH:-main}" -DOCKER_APP_NAME="${DOCKER_APP_NAME:-gitea}" - # ─── Usage ────────────────────────────────────────────────────────────────── usage() { cat << EOF