Crypto Rug Muncher
ops(t08): GlitchTip admin + projects setup script (idempotent, server-side)
cf3f8e5 | # T08 — GlitchTip admin user + project structure (server-side ops) | |
| # | |
| # Run on netcup to create/update the GlitchTip admin user and verify | |
| # the 4 project structure (rmi-backend, rmi-frontend, rmi-mcp, rmi-x402). | |
| # | |
| # GlitchTip on netcup uses apps.users.models.User (custom auth model) | |
| # with email as the lookup key. No rest_framework installed (lite build), | |
| # so we use Django ORM directly instead of Token API. | |
| # | |
| # Usage: bash scripts/ops/t08_glitchtip_admin.sh | |
| # Idempotent: safe to re-run. | |
| set -e | |
| CONTAINER="${GLITCHTIP_CONTAINER:-rmi-glitchtip}" | |
| EMAIL="${GLITCHTIP_ADMIN_EMAIL:-ops@rugmunch.io}" | |
| PASSWORD="${GLITCHTIP_ADMIN_PASSWORD:-GlitchTip-RMI-2026-ProD}" | |
| echo "=== T08: GlitchTip admin + projects ===" | |
| echo "container: $CONTAINER" | |
| echo "email: $EMAIL" | |
| echo "" | |
| echo "=== Step 1: Ensure admin superuser ===" | |
| docker exec -i $CONTAINER python manage.py shell << PYEOF | |
| from apps.users.models import User | |
| if not User.objects.filter(email='$EMAIL').exists(): | |
| User.objects.create_superuser(email='$EMAIL', password='$PASSWORD') | |
| print("CREATED admin") | |
| else: | |
| u = User.objects.get(email='$EMAIL') | |
| u.set_password('$PASSWORD') | |
| u.is_superuser = True | |
| u.is_staff = True | |
| u.save() | |
| print("UPDATED admin") | |
| admins = User.objects.filter(is_superuser=True) | |
| print(f"Total superusers: {admins.count()}") | |
| PYEOF | |
| echo "" | |
| echo "=== Step 2: Save creds to /root/.rmi-creds/ ===" | |
| mkdir -p /root/.rmi-creds | |
| cat > /root/.rmi-creds/glitchtip_admin.txt << CRED | |
| email=$EMAIL | |
| password=$PASSWORD | |
| url=https://glitchtip.rugmunch.io | |
| CRED | |
| chmod 600 /root/.rmi-creds/glitchtip_admin.txt | |
| echo "saved to /root/.rmi-creds/glitchtip_admin.txt" | |
| echo "" | |
| echo "=== Step 3: Verify 4 projects exist ===" | |
| docker exec $CONTAINER python manage.py shell -c " | |
| from django.apps import apps | |
| Project = apps.get_model('projects', 'Project') | |
| existing = sorted(Project.objects.values_list('name', flat=True)) | |
| print(f'Projects ({len(existing)}):') | |
| for p in existing: | |
| print(f' - {p}') | |
| " 2>&1 | tail -10 | |
| echo "" | |
| echo "=== Step 4: Verify admin can authenticate ===" | |
| docker exec $CONTAINER python manage.py shell -c " | |
| from apps.users.models import User | |
| u = User.objects.get(email='$EMAIL') | |
| ok = u.check_password('$PASSWORD') | |
| print(f'Login test for {u.email}: {\"OK\" if ok else \"FAIL\"}') | |
| print(f' superuser={u.is_superuser} staff={u.is_staff} active={u.is_active}') | |
| " 2>&1 | tail -3 | |
| echo "" | |
| echo "=== T08 COMPLETE ===" | |
| echo "Login at: https://glitchtip.rugmunch.io" | |
| echo "Email: $EMAIL" | |
| echo "Password: $PASSWORD" | |