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
This commit is contained in:
2026-06-26 16:07:02 -04:00
parent 0fc2b8d0d6
commit a2e466c074
9 changed files with 118 additions and 51 deletions
+22
View File
@@ -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
+1 -1
View File
@@ -108,7 +108,7 @@ sudo chown -R $USER:$USER /opt/docker-scripts /srv/docker
# 2. Cloner les scripts # 2. Cloner les scripts
cd /opt 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 # 3. Installer
bash /opt/docker-scripts/setup.sh bash /opt/docker-scripts/setup.sh
+13 -10
View File
@@ -11,26 +11,29 @@
set -euo pipefail 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)" 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 # shellcheck source=/dev/null
source "$CONFIG_FILE" source "$GLOBAL_CONFIG"
fi fi
# ─── Nom de l'application (défaut si pas dans la config) ───────────────────── # ─── Nom de l'application (défaut si pas dans la config) ─────────────────────
DOCKER_APP_NAME="${DOCKER_APP_NAME:-gitea}" 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_DIR="${COMPOSE_DIR:-/srv/docker/$DOCKER_APP_NAME}"
COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.yml}" COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.yml}"
APP_SERVICE="${APP_SERVICE:-${DOCKER_APP_NAME}_server}"
APP_CONTAINER="${APP_CONTAINER:-${DOCKER_APP_NAME}_server}" # Charger la config spécifique à l'application (surcharge la config globale)
DB_CONTAINER="${DB_CONTAINER:-${DOCKER_APP_NAME}_db}" APP_CONFIG="${COMPOSE_DIR}/docker-scripts.conf"
IMAGE_NAME="${IMAGE_NAME:-gitea/gitea}" if [[ -f "$APP_CONFIG" ]] && [[ "$APP_CONFIG" != "$GLOBAL_CONFIG" ]]; then
IMAGE_TAG="${IMAGE_TAG:-latest}" # shellcheck source=/dev/null
source "$APP_CONFIG"
fi
# Base de données # Base de données
DB_NAME="${DB_NAME:-$DOCKER_APP_NAME}" DB_NAME="${DB_NAME:-$DOCKER_APP_NAME}"
+14 -7
View File
@@ -17,23 +17,30 @@
set -euo pipefail 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)" 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 # shellcheck source=/dev/null
source "$CONFIG_FILE" source "$GLOBAL_CONFIG"
fi fi
# ─── Nom de l'application (défaut si pas dans la config) ───────────────────── # ─── Nom de l'application (défaut si pas dans la config) ─────────────────────
DOCKER_APP_NAME="${DOCKER_APP_NAME:-gitea}" 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) ────
BACKUP_DIR="${BACKUP_DIR:-/NFS/BACKUP/DOCKER/$HOSTNAME/$DOCKER_APP_NAME}" COMPOSE_DIR="${COMPOSE_DIR:-/srv/docker/$DOCKER_APP_NAME}"
COMPOSE_DIR="${COMPOSE_DIR:-$HOME/dev/git/outils/$DOCKER_APP_NAME}"
COMPOSE_FILE="${COMPOSE_FILE:-docker-compose.yml}" 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) # Conteneurs (dérivés de DOCKER_APP_NAME)
DB_CONTAINER="${DB_CONTAINER:-${DOCKER_APP_NAME}_db}" DB_CONTAINER="${DB_CONTAINER:-${DOCKER_APP_NAME}_db}"
APP_CONTAINER="${APP_CONTAINER:-${DOCKER_APP_NAME}_server}" APP_CONTAINER="${APP_CONTAINER:-${DOCKER_APP_NAME}_server}"
+10 -10
View File
@@ -8,14 +8,14 @@ services:
image: gitea/gitea:latest image: gitea/gitea:latest
container_name: gitea_server container_name: gitea_server
environment: environment:
- USER_UID=1000 - USER_UID=${USER_UID:-1000}
- USER_GID=1000 - USER_GID=${USER_GID:-1000}
- GITEA__database__DB_TYPE=mysql - GITEA__database__DB_TYPE=mysql
- GITEA__database__HOST=gitea_db:3306 - GITEA__database__HOST=gitea_db:3306
- GITEA__database__NAME=gitea - GITEA__database__NAME=${MYSQL_DATABASE:-gitea}
- GITEA__database__USER=gitea - GITEA__database__USER=${MYSQL_USER:-gitea}
- GITEA__database__PASSWD=chab30 - GITEA__database__PASSWD=${GITEA_DB_PASSWORD:-${MYSQL_PASSWORD:-change_me}}
- GITEA__DISABLE_REGISTRATION=true - GITEA__DISABLE_REGISTRATION=${GITEA_DISABLE_REGISTRATION:-true}
restart: always restart: always
networks: networks:
- gitea - gitea
@@ -42,10 +42,10 @@ services:
container_name: gitea_db container_name: gitea_db
restart: always restart: always
environment: environment:
- MYSQL_ROOT_PASSWORD=gitea - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-gitea}
- MYSQL_USER=gitea - MYSQL_USER=${MYSQL_USER:-gitea}
- MYSQL_PASSWORD=chab30 - MYSQL_PASSWORD=${MYSQL_PASSWORD:-change_me}
- MYSQL_DATABASE=gitea - MYSQL_DATABASE=${MYSQL_DATABASE:-gitea}
networks: networks:
- gitea - gitea
volumes: volumes:
+16 -7
View File
@@ -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). # Ce fichier dans /opt/docker-scripts/ est le TEMPLATE par défaut.
# Les valeurs peuvent être surchargées par des variables d'environnement. # 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 # DOCKER_APP_NAME=monapp bash docker-backup.sh
# ============================================================================= # =============================================================================
@@ -13,10 +18,11 @@
HOSTNAME="${HOSTNAME:-$(hostname)}" HOSTNAME="${HOSTNAME:-$(hostname)}"
# Dépôt Git source (utilisé par setup.sh pour clone/mise à jour) # 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}" GIT_BRANCH="${GIT_BRANCH:-main}"
# Nom de l'application Docker (définit tous les dérivés) # 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}" DOCKER_APP_NAME="${DOCKER_APP_NAME:-gitea}"
# ─── Chemins (dérivés de DOCKER_APP_NAME et HOSTNAME) ───────────────────────── # ─── 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}" DB_CONTAINER="${DB_CONTAINER:-${DOCKER_APP_NAME}_db}"
# ─── Image Docker ───────────────────────────────────────────────────────────── # ─── Image Docker ─────────────────────────────────────────────────────────────
# 🔧 À CHANGER pour chaque app
IMAGE_NAME="${IMAGE_NAME:-gitea/gitea}" IMAGE_NAME="${IMAGE_NAME:-gitea/gitea}"
IMAGE_TAG="${IMAGE_TAG:-latest}" IMAGE_TAG="${IMAGE_TAG:-latest}"
# ─── Base de données (dérivés de DOCKER_APP_NAME) ───────────────────────────── # ─── Base de données (dérivés de DOCKER_APP_NAME) ─────────────────────────────
DB_NAME="${DB_NAME:-$DOCKER_APP_NAME}" DB_NAME="${DB_NAME:-$DOCKER_APP_NAME}"
DB_USER="${DB_USER:-$DOCKER_APP_NAME}" DB_USER="${DB_USER:-$DOCKER_APP_NAME}"
DB_PASSWORD="${DB_PASSWORD:-chab30}" # 🔧 À CHANGER : mots de passe (doivent correspondre à .env)
DB_ROOT_PASSWORD="${DB_ROOT_PASSWORD:-gitea}" 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) ─────────────── # ─── Volumes Docker - chemins HÔTE (dérivés de DOCKER_APP_NAME) ───────────────
# Co-localisés dans /srv/docker/ pour faciliter backup et migration # 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}" VOLUME_MYSQL="${VOLUME_MYSQL:-/srv/docker/$DOCKER_APP_NAME/mysql}"
# ─── URLs ───────────────────────────────────────────────────────────────────── # ─── URLs ─────────────────────────────────────────────────────────────────────
# 🔧 À CHANGER pour chaque app
HEALTH_CHECK_URL="${HEALTH_CHECK_URL:-http://localhost:3000}" HEALTH_CHECK_URL="${HEALTH_CHECK_URL:-http://localhost:3000}"
HEALTH_CHECK_TIMEOUT="${HEALTH_CHECK_TIMEOUT:-30}" HEALTH_CHECK_TIMEOUT="${HEALTH_CHECK_TIMEOUT:-30}"
# Endpoint version (ex: /api/v1/version pour Gitea). Laisser vide pour détection auto. # Endpoint version (ex: /api/v1/version pour Gitea). Laisser vide pour détection auto.
+18 -5
View File
@@ -14,17 +14,30 @@
set -euo pipefail 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)" 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 # shellcheck source=/dev/null
source "$CONFIG_FILE" source "$GLOBAL_CONFIG"
fi fi
# ─── Nom de l'application (défaut si pas dans la config) ─────────────────────
DOCKER_APP_NAME="${DOCKER_APP_NAME:-gitea}" 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 ──────────────────────────────────────────────────── # ─── Configuration locale ────────────────────────────────────────────────────
SCRIPTS_DIR="${SCRIPTS_DIR:-/opt/docker-scripts}" SCRIPTS_DIR="${SCRIPTS_DIR:-/opt/docker-scripts}"
CRON_BACKUP_SCHEDULE="${CRON_BACKUP_SCHEDULE:-0 2 * * *}" CRON_BACKUP_SCHEDULE="${CRON_BACKUP_SCHEDULE:-0 2 * * *}"
@@ -211,7 +224,7 @@ do_install() {
echo "" echo ""
err "Prérequis manquants. Placez les scripts dans $SCRIPTS_DIR/" err "Prérequis manquants. Placez les scripts dans $SCRIPTS_DIR/"
echo "" 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 "" echo ""
exit 1 exit 1
} }
+17 -4
View File
@@ -14,17 +14,30 @@
set -euo pipefail 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)" 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 # shellcheck source=/dev/null
source "$CONFIG_FILE" source "$GLOBAL_CONFIG"
fi fi
# ─── Nom de l'application (défaut si pas dans la config) ─────────────────────
DOCKER_APP_NAME="${DOCKER_APP_NAME:-gitea}" 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 ─────────────────────────────────────────────────────────────── # ─── Couleurs ───────────────────────────────────────────────────────────────
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; NC='\033[0m' 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"; } ok() { echo -e " ${GREEN}✅${NC} $1"; }
+7 -7
View File
@@ -20,13 +20,19 @@
set -euo pipefail 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)" SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
if [[ -f "$SCRIPT_DIR/docker-scripts.conf" ]]; then if [[ -f "$SCRIPT_DIR/docker-scripts.conf" ]]; then
# shellcheck source=/dev/null # shellcheck source=/dev/null
source "$SCRIPT_DIR/docker-scripts.conf" source "$SCRIPT_DIR/docker-scripts.conf"
fi 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 ─────────────────────────────────────────────────────────────── # ─── Couleurs ───────────────────────────────────────────────────────────────
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; BLUE='\033[0;34m'; NC='\033[0m' 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"; } ok() { echo -e " ${GREEN}✅${NC} $1"; }
@@ -35,12 +41,6 @@ err() { echo -e " ${RED}❌${NC} $1"; }
info() { echo -e " ${CYAN}📋${NC} $1"; } info() { echo -e " ${CYAN}📋${NC} $1"; }
step() { echo -e "\n${BLUE}════════════════════════════════════════════════════════${NC}"; echo -e "${BLUE}🔧 $1${NC}"; echo -e "${BLUE}════════════════════════════════════════════════════════${NC}"; } 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 ──────────────────────────────────────────────────────────────────
usage() { usage() {
cat << EOF cat << EOF