Initial PlayBull release with Trilogy Hub integration.

Includes homelab deploy tooling, image position/zoom manifest persistence, and full trading/casino stack.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-02 08:31:36 +02:00
commit 94b6cc3be9
60 changed files with 9206 additions and 0 deletions

View File

@@ -0,0 +1,114 @@
#!/usr/bin/env bash
# trilogyhub.de mit Homelab-Website verbinden (Nginx + optional Certbot + Tunnel-Hinweis)
set -euo pipefail
DOMAIN="${1:-trilogyhub.de}"
PORT="${APP_PORT:-3080}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
APP_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
ENV_FILE="${APP_DIR}/deploy/env.homelab"
if [[ "${EUID}" -ne 0 ]]; then
echo "sudo bash deploy/connect-trilogyhub.sh" >&2
exit 1
fi
[[ -f "${ENV_FILE}" ]] || { echo "${ENV_FILE} fehlt" >&2; exit 1; }
sed -i 's/\r$//' "${ENV_FILE}" 2>/dev/null || true
# shellcheck source=/dev/null
source "${ENV_FILE}"
PORT="${APP_PORT:-3080}"
DOMAIN="${APP_DOMAIN:-${DOMAIN}}"
echo "==> Verbinde ${DOMAIN} → 127.0.0.1:${PORT}"
# env aktualisieren
grep -q '^APP_DOMAIN=' "${ENV_FILE}" && sed -i "s|^APP_DOMAIN=.*|APP_DOMAIN=${DOMAIN}|" "${ENV_FILE}" || echo "APP_DOMAIN=${DOMAIN}" >> "${ENV_FILE}"
# LAN (Fritz-Netz)
sed -i 's/\r$//' "${APP_DIR}/deploy/nginx/bestewebsite-lan.conf" 2>/dev/null || true
cp "${APP_DIR}/deploy/nginx/trilogyhub.conf" /etc/nginx/sites-available/trilogyhub 2>/dev/null || \
cp "${APP_DIR}/deploy/nginx/bestewebsite.conf" /etc/nginx/sites-available/trilogyhub
# HTTP-only zuerst (fuer Certbot)
cat > /etc/nginx/sites-available/trilogyhub <<EOF
server {
listen 80;
listen [::]:80;
server_name ${DOMAIN} www.${DOMAIN};
client_max_body_size 30m;
location / {
proxy_pass http://127.0.0.1:${PORT};
proxy_http_version 1.1;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme;
proxy_read_timeout 86400;
}
}
EOF
if [[ -f "${APP_DIR}/deploy/nginx/bestewebsite-lan.conf" ]]; then
cp "${APP_DIR}/deploy/nginx/bestewebsite-lan.conf" /etc/nginx/sites-available/bestewebsite-lan
ln -sf /etc/nginx/sites-available/bestewebsite-lan /etc/nginx/sites-enabled/00-bestewebsite-lan
fi
ln -sf /etc/nginx/sites-available/trilogyhub /etc/nginx/sites-enabled/trilogyhub
# alte DuckDNS-Sites nicht loeschen — nur Redirect optional
if [[ -f /etc/nginx/sites-available/bestewebsite ]]; then
cat > /etc/nginx/sites-available/bestewebsite-legacy <<'LEG'
server {
listen 80;
listen [::]:80;
server_name halmc.duckdns.org pimmelschwanz.duckdns.org;
return 301 https://trilogyhub.de$request_uri;
}
LEG
ln -sf /etc/nginx/sites-available/bestewebsite-legacy /etc/nginx/sites-enabled/bestewebsite-legacy 2>/dev/null || true
fi
nginx -t
systemctl reload nginx
# App muss laufen
if ! curl -sf "http://127.0.0.1:${PORT}/" >/dev/null; then
echo "WARNUNG: nichts auf Port ${PORT} — playbull.service starten" >&2
systemctl restart playbull 2>/dev/null || true
fi
# Certbot wenn DNS auf diesen Server zeigt
if command -v certbot >/dev/null 2>&1; then
echo "==> Versuche Let's Encrypt fuer ${DOMAIN}..."
if certbot --nginx -d "${DOMAIN}" -d "www.${DOMAIN}" \
--non-interactive --agree-tos --redirect \
-m "admin@${DOMAIN}" 2>/dev/null; then
echo " SSL OK"
else
echo " SSL noch nicht moeglich (DNS/Cloudflare noch nicht aktiv) — HTTP auf Port 80 ist vorbereitet"
fi
fi
# Cloudflare Tunnel
if [[ -n "${CLOUDFLARE_TUNNEL_TOKEN:-}" ]]; then
echo "==> Cloudflare Tunnel"
cloudflared service uninstall 2>/dev/null || true
cloudflared service install "${CLOUDFLARE_TUNNEL_TOKEN}"
systemctl enable cloudflared
systemctl restart cloudflared
echo " Im Cloudflare-Dashboard Public Hostname setzen:"
echo " ${DOMAIN} + www.${DOMAIN} → http://127.0.0.1:${PORT}"
fi
nginx -t && systemctl reload nginx
echo ""
echo "=== Fertig ==="
echo "App: http://127.0.0.1:${PORT}/"
echo "LAN: http://192.168.178.49/"
echo "Domain: http://${DOMAIN}/ (sobald DNS auf Homelab/Cloudflare zeigt)"
echo "HTTPS: https://${DOMAIN}/ (nach Cloudflare Active + Tunnel ODER Certbot)"