netgescon-day0/scripts/ops/netgescon-prepare-multisite-host-paths.sh

135 lines
3.7 KiB
Bash
Executable File

#!/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