diff --git a/cms/proxmox/create-openbureau-lxc.sh b/cms/proxmox/create-openbureau-lxc.sh index 0bc928b..fcb85fd 100755 --- a/cms/proxmox/create-openbureau-lxc.sh +++ b/cms/proxmox/create-openbureau-lxc.sh @@ -13,23 +13,30 @@ set -euo pipefail ############################ CONFIG ############################ +# Alle Werte sind per Umgebungsvariable überschreibbar, z.B.: +# ROOTFS_STORAGE=local-zfs HOSTNAME=openbureau-dev SITE_DOMAIN=dev.openbureau.ch \ +# IP=192.168.1.134/24 GATEWAY=192.168.1.1 bash create-openbureau-lxc.sh CTID="${CTID:-$(pvesh get /cluster/nextid)}" -HOSTNAME="openbureau" +HOSTNAME="${HOSTNAME:-openbureau}" # Storage -TEMPLATE_STORAGE="local" -ROOTFS_STORAGE="local-lvm" -DISK_GB="20" # Supabase + CMS +TEMPLATE_STORAGE="${TEMPLATE_STORAGE:-local}" +ROOTFS_STORAGE="${ROOTFS_STORAGE:-local-lvm}" +DISK_GB="${DISK_GB:-20}" # Supabase + CMS # Ressourcen -RAM_MB="4096" -SWAP_MB="1024" -CORES="2" +RAM_MB="${RAM_MB:-4096}" +SWAP_MB="${SWAP_MB:-1024}" +CORES="${CORES:-2}" # Netzwerk -BRIDGE="vmbr0" -IP="dhcp" # "dhcp" ODER statisch z.B. "192.168.1.50/24" -GATEWAY="" # nur bei statischer IP +BRIDGE="${BRIDGE:-vmbr0}" +IP="${IP:-dhcp}" # "dhcp" ODER statisch z.B. "192.168.1.50/24" +GATEWAY="${GATEWAY:-}" # nur bei statischer IP + +# Öffentliche Domain hinter einem Reverse-Proxy (Caddy o.ä.) mit Pfad-Routing +# (/auth/* + /rest/* → :8000, Rest → :8080). Leer = LAN-Direktzugriff per IP:Port. +SITE_DOMAIN="${SITE_DOMAIN:-}" # Zugang SSH_PUBKEY_FILE="${SSH_PUBKEY_FILE:-$HOME/.ssh/id_ed25519.pub}" @@ -142,16 +149,23 @@ pct exec "$CTID" -- bash -euo pipefail -c " sed -i \"s|^ANON_KEY=.*|ANON_KEY=\${ANON}|\" .env sed -i \"s|^SERVICE_ROLE_KEY=.*|SERVICE_ROLE_KEY=\${SVC}|\" .env - # URLs auf die Container-IP setzen + # URLs setzen — bei gesetzter SITE_DOMAIN auf die öffentliche HTTPS-Domain + # (Browser ruft /auth/* + /rest/* same-origin auf, der Proxy routet sie an + # :8000), sonst auf die Container-IP fürs LAN. HOSTIP=\$(hostname -I | awk '{print \$1}') - sed -i \"s|^SITE_URL=.*|SITE_URL=http://\${HOSTIP}:8080|\" .env - sed -i \"s|^API_EXTERNAL_URL=.*|API_EXTERNAL_URL=http://\${HOSTIP}:8000|\" .env + SITE_DOMAIN='${SITE_DOMAIN}' + if [ -n \"\$SITE_DOMAIN\" ]; then + SITE_URL=\"https://\$SITE_DOMAIN\"; API_URL=\"https://\$SITE_DOMAIN\" + else + SITE_URL=\"http://\${HOSTIP}:8080\"; API_URL=\"http://\${HOSTIP}:8000\" + fi + sed -i \"s|^SITE_URL=.*|SITE_URL=\${SITE_URL}|\" .env + sed -i \"s|^API_EXTERNAL_URL=.*|API_EXTERNAL_URL=\${API_URL}|\" .env sed -i \"s|^ADMIN_EMAILS=.*|ADMIN_EMAILS=${ADMIN_EMAIL}|\" .env - # Out-of-box LAN-Direktzugriff (kein Reverse-Proxy) → auf allen Interfaces - # lauschen. Für Domain/HTTPS hinter Proxy: BIND_ADDR=127.0.0.1 setzen. + # Auf allen Interfaces lauschen, damit Reverse-Proxy bzw. LAN drankommen. sed -i \"s|^BIND_ADDR=.*|BIND_ADDR=0.0.0.0|\" .env # CORS auf die Browser-Origin (= SITE_URL) festnageln statt „*\". - sed -i \"s|__CORS_ORIGIN__|http://\${HOSTIP}:8080|g\" kong.yml + sed -i \"s|__CORS_ORIGIN__|\${SITE_URL}|g\" kong.yml echo 'OK: .env generiert.' fi @@ -173,6 +187,18 @@ pct exec "$CTID" -- bash -euo pipefail -c " IPADDR="$(pct exec "$CTID" -- hostname -I 2>/dev/null | awk '{print $1}')" say "Fertig. LXC $CTID läuft${IPADDR:+ unter $IPADDR}." +if [ -n "$SITE_DOMAIN" ]; then +cat <} zeigt) + Caddy-Block: ${SITE_DOMAIN} { + @sb path /auth/* /rest/* /storage/* /realtime/* + reverse_proxy @sb ${IPADDR:-}:8000 + reverse_proxy ${IPADDR:-}:8080 + } +EOF +fi + cat <}:8080/admin/