All checks were successful
Build and Push Docker Images / build-backend (push) Successful in 33s
Build and Push Docker Images / build-frontend (push) Successful in 18s
Build and Push Docker Images / build-website (push) Successful in 16s
Build and Push Docker Images / build-central-services-api (push) Successful in 38s
Build and Push Docker Images / build-central-services-admin (push) Successful in 1m0s
Build and Push Docker Images / build-docs (push) Successful in 17s
79 lines
2.5 KiB
Bash
Executable File
79 lines
2.5 KiB
Bash
Executable File
#!/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
|