#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" ENV_FILE="$ROOT_DIR/.env" ENV_EXAMPLE="$ROOT_DIR/.env.example" prompt() { local label="$1" local default_value="$2" local value read -r -p "$label [$default_value]: " value printf '%s' "${value:-$default_value}" } replace_env() { local key="$1" local value="$2" local escaped escaped="${value//\\/\\\\}" escaped="${escaped//&/\\&}" escaped="${escaped//|/\\|}" if grep -q "^${key}=" "$ENV_FILE"; then sed -i "s|^${key}=.*$|${key}=${escaped}|" "$ENV_FILE" else printf '%s=%s\n' "$key" "$value" >> "$ENV_FILE" fi } random_secret() { openssl rand -hex "$1" } command -v docker >/dev/null 2>&1 || { echo "Docker ist nicht installiert." >&2; exit 1; } docker compose version >/dev/null 2>&1 || { echo "Docker Compose Plugin ist nicht installiert." >&2; exit 1; } command -v openssl >/dev/null 2>&1 || { echo "OpenSSL ist nicht installiert." >&2; exit 1; } if [[ ! -f "$ENV_FILE" ]]; then cp "$ENV_EXAMPLE" "$ENV_FILE" echo ".env wurde aus .env.example angelegt." fi echo "FEDEO Central Services Setup" echo api_domain="$(prompt "API-Domain" "services.fedeo.de")" admin_domain="$(prompt "Admin-Domain" "services-admin.fedeo.de")" contact_email="$(prompt "E-Mail für Let's Encrypt" "admin@example.com")" replace_env "CENTRAL_API_DOMAIN" "$api_domain" replace_env "CENTRAL_ADMIN_DOMAIN" "$admin_domain" replace_env "CONTACT_EMAIL" "$contact_email" replace_env "PUBLIC_BASE_URL" "https://$api_domain" replace_env "NUXT_PUBLIC_API_BASE" "https://$api_domain" grep -q '^POSTGRES_PASSWORD=change-me-' "$ENV_FILE" && replace_env "POSTGRES_PASSWORD" "$(random_secret 24)" grep -q '^ADMIN_TOKEN=change-me-' "$ENV_FILE" && replace_env "ADMIN_TOKEN" "$(random_secret 32)" grep -q '^PUSH_SECRET_ENCRYPTION_KEY=change-me-' "$ENV_FILE" && replace_env "PUSH_SECRET_ENCRYPTION_KEY" "$(random_secret 32)" mkdir -p "$ROOT_DIR/traefik/letsencrypt" touch "$ROOT_DIR/traefik/letsencrypt/acme.json" chmod 600 "$ROOT_DIR/traefik/letsencrypt/acme.json" echo echo "Konfiguration: $ENV_FILE" echo "API: https://$api_domain" echo "Admin: https://$admin_domain" echo echo "Bitte OPENAI_API_KEY sowie GOCARDLESS_SECRET_ID und GOCARDLESS_SECRET_KEY in .env ergänzen." echo "Die DNS-A/AAAA-Records beider Domains müssen auf diesen Server zeigen." if [[ "${1:-}" == "--start" ]]; then cd "$ROOT_DIR" docker compose pull docker compose up -d docker compose ps else echo "Start: cd $ROOT_DIR && docker compose pull && docker compose up -d" fi