proxmox: create-openbureau-lxc env-überschreibbar + domain-fähig
- Alle CONFIG-Werte per Env überschreibbar (ROOTFS_STORAGE, HOSTNAME, DISK_GB, RAM_MB, CORES, BRIDGE, IP, GATEWAY) — vorher teils hardcodet, was auf ZFS-Hosts (local-zfs statt local-lvm) non-interaktiv scheiterte. - Neue Variable SITE_DOMAIN: setzt SITE_URL + API_EXTERNAL_URL auf https://<domain> (Same-Origin, Pfad-Routing am Reverse-Proxy) statt Container-IP. Abschluss zeigt passenden Caddy-Block. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -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 <<EOF
|
||||
|
||||
Öffentlich: https://${SITE_DOMAIN} (sobald der Reverse-Proxy auf ${IPADDR:-<ip>} zeigt)
|
||||
Caddy-Block: ${SITE_DOMAIN} {
|
||||
@sb path /auth/* /rest/* /storage/* /realtime/*
|
||||
reverse_proxy @sb ${IPADDR:-<ip>}:8000
|
||||
reverse_proxy ${IPADDR:-<ip>}:8080
|
||||
}
|
||||
EOF
|
||||
fi
|
||||
|
||||
cat <<EOF
|
||||
|
||||
Admin: http://${IPADDR:-<ip>}:8080/admin/
|
||||
|
||||
Reference in New Issue
Block a user