#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" ENV_FILE="${ENV_FILE:-$ROOT_DIR/docker/.env.multisite}" REPORT_ONLY=false usage() { cat <<'EOF' Usage: netgescon-prepare-multisite-host-paths.sh [--report] [--env-file /path/to/.env.multisite] Creates and reports the host directories used by docker-compose.multisite.yml for prod/demo data persistence. EOF } load_env_file() { local env_file="$1" local line key value while IFS= read -r line || [[ -n "$line" ]]; do line="${line%$'\r'}" [[ -z "$line" || "$line" =~ ^[[:space:]]*# ]] && continue [[ "$line" != *=* ]] && continue key="${line%%=*}" value="${line#*=}" export "$key=$value" done < "$env_file" } while [[ $# -gt 0 ]]; do case "$1" in --env-file) ENV_FILE="$2" shift 2 ;; --report) REPORT_ONLY=true shift ;; -h|--help) usage exit 0 ;; *) echo "Unknown option: $1" >&2 usage exit 1 ;; esac done if [[ ! -f "$ENV_FILE" ]]; then echo "Env file not found: $ENV_FILE" >&2 exit 1 fi load_env_file "$ENV_FILE" TRAEFIK_LETSENCRYPT_PATH="${TRAEFIK_LETSENCRYPT_PATH:-/srv/netgescon/traefik/letsencrypt}" PROD_DB_DATA_PATH="${PROD_DB_DATA_PATH:-/srv/netgescon/prod/mysql}" PROD_STORAGE_PATH="${PROD_STORAGE_PATH:-/srv/netgescon/prod/storage}" PROD_CACHE_PATH="${PROD_CACHE_PATH:-/srv/netgescon/prod/bootstrap-cache}" PROD_PUBLIC_PATH="${PROD_PUBLIC_PATH:-/srv/netgescon/prod/public}" PROD_REDIS_DATA_PATH="${PROD_REDIS_DATA_PATH:-/srv/netgescon/prod/redis}" DEMO_DB_DATA_PATH="${DEMO_DB_DATA_PATH:-/srv/netgescon/demo/mysql}" DEMO_STORAGE_PATH="${DEMO_STORAGE_PATH:-/srv/netgescon/demo/storage}" DEMO_CACHE_PATH="${DEMO_CACHE_PATH:-/srv/netgescon/demo/bootstrap-cache}" DEMO_PUBLIC_PATH="${DEMO_PUBLIC_PATH:-/srv/netgescon/demo/public}" DEMO_REDIS_DATA_PATH="${DEMO_REDIS_DATA_PATH:-/srv/netgescon/demo/redis}" MULTISITE_BACKUP_PATH="${MULTISITE_BACKUP_PATH:-$ROOT_DIR/storage/backups/multisite}" declare -a all_paths=( "$TRAEFIK_LETSENCRYPT_PATH" "$PROD_DB_DATA_PATH" "$PROD_STORAGE_PATH" "$PROD_CACHE_PATH" "$PROD_PUBLIC_PATH" "$PROD_REDIS_DATA_PATH" "$DEMO_DB_DATA_PATH" "$DEMO_STORAGE_PATH" "$DEMO_CACHE_PATH" "$DEMO_PUBLIC_PATH" "$DEMO_REDIS_DATA_PATH" "$MULTISITE_BACKUP_PATH" ) declare -a app_runtime_paths=( "$PROD_STORAGE_PATH/app" "$PROD_STORAGE_PATH/framework/cache/data" "$PROD_STORAGE_PATH/framework/sessions" "$PROD_STORAGE_PATH/framework/views" "$PROD_STORAGE_PATH/logs" "$PROD_CACHE_PATH" "$PROD_PUBLIC_PATH" "$DEMO_STORAGE_PATH/app" "$DEMO_STORAGE_PATH/framework/cache/data" "$DEMO_STORAGE_PATH/framework/sessions" "$DEMO_STORAGE_PATH/framework/views" "$DEMO_STORAGE_PATH/logs" "$DEMO_CACHE_PATH" "$DEMO_PUBLIC_PATH" ) for path in "${all_paths[@]}"; do mkdir -p "$path" done for path in "${app_runtime_paths[@]}"; do mkdir -p "$path" done if command -v chown >/dev/null 2>&1; then chown -R 33:33 \ "$PROD_STORAGE_PATH" "$PROD_CACHE_PATH" "$PROD_PUBLIC_PATH" \ "$DEMO_STORAGE_PATH" "$DEMO_CACHE_PATH" "$DEMO_PUBLIC_PATH" 2>/dev/null || true fi if [[ "$REPORT_ONLY" == "true" ]]; then echo "ENV_FILE=$ENV_FILE" echo "TRAEFIK_LETSENCRYPT_PATH=$TRAEFIK_LETSENCRYPT_PATH" echo "PROD_DB_DATA_PATH=$PROD_DB_DATA_PATH" echo "PROD_STORAGE_PATH=$PROD_STORAGE_PATH" echo "PROD_CACHE_PATH=$PROD_CACHE_PATH" echo "PROD_PUBLIC_PATH=$PROD_PUBLIC_PATH" echo "PROD_REDIS_DATA_PATH=$PROD_REDIS_DATA_PATH" echo "DEMO_DB_DATA_PATH=$DEMO_DB_DATA_PATH" echo "DEMO_STORAGE_PATH=$DEMO_STORAGE_PATH" echo "DEMO_CACHE_PATH=$DEMO_CACHE_PATH" echo "DEMO_PUBLIC_PATH=$DEMO_PUBLIC_PATH" echo "DEMO_REDIS_DATA_PATH=$DEMO_REDIS_DATA_PATH" echo "MULTISITE_BACKUP_PATH=$MULTISITE_BACKUP_PATH" fi