3.6 KiB
Dev Container Bugsink Setup
Local Bugsink instance for development - NOT connected to production.
Quick Reference
| Item | Value |
|---|---|
| UI | https://localhost:8443 (nginx proxy from 8000) |
| Credentials | admin@localhost / admin |
| Projects | Backend (Dev) = Project ID 1, Frontend (Dev) = Project ID 2 |
| Backend DSN | SENTRY_DSN=http://<key>@localhost:8000/1 |
| Frontend DSN | VITE_SENTRY_DSN=http://<key>@localhost:8000/2 |
Configuration Files
| File | Purpose |
|---|---|
compose.dev.yml |
Initial DSNs using 127.0.0.1:8000 (container startup) |
.env.local |
OVERRIDES compose.dev.yml with localhost:8000 (app runtime) |
CRITICAL: .env.local takes precedence over compose.dev.yml environment variables.
Why localhost vs 127.0.0.1?
The .env.local file uses localhost while compose.dev.yml uses 127.0.0.1. Both work in practice - localhost was chosen when .env.local was created separately.
HTTPS Setup
- Self-signed certificates auto-generated with mkcert on container startup
- CSRF Protection: Django configured with
CSRF_TRUSTED_ORIGINSfor bothlocalhostand127.0.0.1(see below) - HTTPS proxy: nginx on port 8443 proxies to Bugsink on port 8000
- HTTPS is for UI access only - Sentry SDK uses HTTP directly
CSRF Configuration
Django 4.0+ requires CSRF_TRUSTED_ORIGINS for HTTPS POST requests. The Bugsink configuration (Dockerfile.dev) includes:
CSRF_TRUSTED_ORIGINS = [
"https://localhost:8443",
"https://127.0.0.1:8443",
"http://localhost:8000",
"http://127.0.0.1:8000",
]
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
Both hostnames are required because browsers treat localhost and 127.0.0.1 as different origins.
If you get "CSRF verification failed" errors, see BUGSINK-SETUP.md for troubleshooting.
Isolation Benefits
- Dev errors stay local, don't pollute production/test dashboards
- No Gitea secrets needed - everything self-contained
- Independent testing of error tracking without affecting metrics
Accessing Errors
Via Browser
- Open
https://localhost:8443 - Login with credentials above
- Navigate to Issues to view captured errors
Via MCP (bugsink-dev)
Configure in .claude/mcp.json:
{
"bugsink-dev": {
"command": "node",
"args": ["d:\\gitea\\bugsink-mcp\\dist\\index.js"],
"env": {
"BUGSINK_URL": "http://localhost:8000",
"BUGSINK_API_TOKEN": "<token-from-local-bugsink>",
"BUGSINK_ORG_SLUG": "sentry"
}
}
}
Get auth token:
API tokens must be created via Django management command (Bugsink 2.0.11 does not have a "Settings > API Keys" UI):
podman exec flyer-crawler-dev sh -c 'cd /opt/bugsink/conf && \
DATABASE_URL=postgresql://bugsink:bugsink_dev_password@postgres:5432/bugsink \
SECRET_KEY=dev-bugsink-secret-key-minimum-50-characters-for-security \
DJANGO_SETTINGS_MODULE=bugsink_conf \
PYTHONPATH=/opt/bugsink/conf:/opt/bugsink/lib/python3.10/site-packages \
/opt/bugsink/bin/python -m django create_auth_token'
This will output a 40-character lowercase hex token. Copy it to your MCP configuration.
MCP Tools: Use mcp__bugsink-dev__* tools (not mcp__bugsink__* which connects to production).