Zielserver-Entscheidung durch optionales Install-Script aufgelöst statt festgeschrieben: deploy/glitchtip-install.sh installiert GlitchTip per Docker Compose auf einem beliebigen, selbst gewählten Host - nichts automatisch/ungefragt. DSN wird zur Laufzeit über eine neue Admin-GUI-Seite ein-/ausschaltbar (Systemeinstellung-Singleton, GET/PATCH /einstellungen/sentry), statt nur per .env - kein Redeploy zum Umschalten nötig. Frontend lädt @sentry/react nur dynamisch nach, wenn tatsächlich aktiv. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
139 lines
4.0 KiB
Bash
Executable File
139 lines
4.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# FOUND-013: GlitchTip (Sentry-API-kompatibles Error-Tracking) optional
|
|
# installieren. GlitchTip wird offiziell nur als Docker-Image vertrieben,
|
|
# widerspricht NICHT "kein Docker-Zwang" aus CLAUDE.md (das gilt für MABEA
|
|
# selbst) — für diese Fremdsoftware ist Docker die einzige praktikable,
|
|
# isolierte Betriebsart.
|
|
#
|
|
# Läuft AUF dem Zielserver, unabhängig vom MABEA-Server (kann derselbe oder
|
|
# ein separater Host sein - siehe arbeitskacheln/01_foundation.md FOUND-013).
|
|
# Danach in MABEA (Admin > Fehler-Tracking) die vom GlitchTip-Projekt
|
|
# angezeigte DSN-URL eintragen.
|
|
#
|
|
# Nutzung:
|
|
# DOMAIN=glitchtip.example.org ./glitchtip-install.sh
|
|
# ./glitchtip-install.sh # fragt Domain/Port interaktiv ab
|
|
#
|
|
# Deinstallation:
|
|
# cd /opt/glitchtip && docker compose down -v # -v löscht auch die Daten
|
|
set -euo pipefail
|
|
|
|
INSTALL_DIR="/opt/glitchtip"
|
|
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
echo "Muss als root laufen." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v docker >/dev/null 2>&1; then
|
|
echo "Docker nicht gefunden. Installiere Docker Engine + Compose-Plugin..."
|
|
curl -fsSL https://get.docker.com | sh
|
|
fi
|
|
if ! docker compose version >/dev/null 2>&1; then
|
|
echo "Docker-Compose-Plugin fehlt (docker compose). Bitte manuell nachinstallieren." >&2
|
|
exit 1
|
|
fi
|
|
|
|
DOMAIN="${DOMAIN:-}"
|
|
if [ -z "$DOMAIN" ]; then
|
|
read -rp "Domain oder IP, unter der GlitchTip erreichbar sein soll: " DOMAIN
|
|
fi
|
|
PORT="${PORT:-8000}"
|
|
|
|
if [ -d "$INSTALL_DIR" ] && [ -f "$INSTALL_DIR/docker-compose.yml" ]; then
|
|
echo "GlitchTip ist bereits unter $INSTALL_DIR installiert."
|
|
read -rp "Neu konfigurieren und neu starten? (j/N) " ANTWORT
|
|
if [ "$ANTWORT" != "j" ] && [ "$ANTWORT" != "J" ]; then
|
|
echo "Abgebrochen, bestehende Installation unverändert."
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
mkdir -p "$INSTALL_DIR"
|
|
cd "$INSTALL_DIR"
|
|
|
|
SECRET_KEY="$(openssl rand -hex 32)"
|
|
DB_PASSWORD="$(openssl rand -hex 20)"
|
|
|
|
cat > docker-compose.yml <<EOF
|
|
services:
|
|
web:
|
|
image: glitchtip/glitchtip:latest
|
|
depends_on:
|
|
- postgres
|
|
- redis
|
|
ports:
|
|
- "${PORT}:8000"
|
|
environment:
|
|
DATABASE_URL: postgresql://glitchtip:${DB_PASSWORD}@postgres:5432/glitchtip
|
|
SECRET_KEY: "${SECRET_KEY}"
|
|
PORT: 8000
|
|
EMAIL_URL: "consolemail://"
|
|
GLITCHTIP_DOMAIN: "https://${DOMAIN}"
|
|
DEFAULT_FROM_EMAIL: "glitchtip@${DOMAIN}"
|
|
CELERY_WORKER_AUTOSCALE: "1,3"
|
|
CELERY_WORKER_MAX_TASKS_PER_CHILD: "10000"
|
|
restart: unless-stopped
|
|
volumes:
|
|
- uploads:/code/uploads
|
|
|
|
worker:
|
|
image: glitchtip/glitchtip:latest
|
|
command: ./bin/run-celery-with-beat.sh
|
|
depends_on:
|
|
- postgres
|
|
- redis
|
|
environment:
|
|
DATABASE_URL: postgresql://glitchtip:${DB_PASSWORD}@postgres:5432/glitchtip
|
|
SECRET_KEY: "${SECRET_KEY}"
|
|
EMAIL_URL: "consolemail://"
|
|
GLITCHTIP_DOMAIN: "https://${DOMAIN}"
|
|
restart: unless-stopped
|
|
volumes:
|
|
- uploads:/code/uploads
|
|
|
|
postgres:
|
|
image: postgres:16
|
|
environment:
|
|
POSTGRES_DB: glitchtip
|
|
POSTGRES_USER: glitchtip
|
|
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
|
restart: unless-stopped
|
|
volumes:
|
|
- postgres_data:/var/lib/postgresql/data
|
|
|
|
redis:
|
|
image: redis:7
|
|
restart: unless-stopped
|
|
volumes:
|
|
- redis_data:/data
|
|
|
|
volumes:
|
|
postgres_data:
|
|
redis_data:
|
|
uploads:
|
|
EOF
|
|
|
|
chmod 600 docker-compose.yml
|
|
|
|
echo "==> Container starten"
|
|
docker compose up -d
|
|
|
|
echo "==> Warte auf Postgres/Web-Start"
|
|
sleep 10
|
|
|
|
echo "==> Datenbank-Migrationen"
|
|
docker compose exec -T web ./manage.py migrate
|
|
|
|
echo ""
|
|
echo "OK: GlitchTip läuft auf Port ${PORT}."
|
|
echo "Admin-Account anlegen mit:"
|
|
echo " cd ${INSTALL_DIR} && docker compose exec web ./manage.py createsuperuser"
|
|
echo ""
|
|
echo "Danach im Browser http://<server>:${PORT} öffnen (oder per nginx/Reverse-Proxy"
|
|
echo "auf https://${DOMAIN} legen), Organisation + Projekt anlegen, DSN kopieren"
|
|
echo "und in MABEA unter Admin > Fehler-Tracking eintragen."
|
|
echo ""
|
|
echo "Zugangsdaten liegen ausschließlich in ${INSTALL_DIR}/docker-compose.yml (chmod 600) -"
|
|
echo "keine separate Sicherung dieser Datei vergessen, falls der Server neu aufgesetzt wird."
|