mirror of
https://github.com/bulwarkmail/dashboard.git
synced 2026-07-14 22:30:36 +00:00
No description
- TypeScript 81.2%
- Shell 16.8%
- JavaScript 2%
- Add package.json for project configuration and dependencies. - Implement dotenv loading in env.ts to manage environment variables. - Create structured logging in log.ts to capture important events without sensitive data. - Develop registry.ts to handle fetching and managing version entries from GitHub releases. - Introduce semver.ts for parsing and comparing semantic versions. - Set up server.ts to create an HTTP server that responds to health checks and version lookups. - Configure TypeScript with tsconfig.json for strict type checking and module resolution. |
||
|---|---|---|
| collector | ||
| grafana | ||
| nginx | ||
| postgres | ||
| prometheus | ||
| telemetry-collector | ||
| version-server | ||
| .env.example | ||
| .gitignore | ||
| deploy.sh | ||
| docker-compose.yml | ||
| README.md | ||
Bulwark Dashboard
Internal observability stack for the Bulwark org: Grafana + Prometheus + Postgres + Umami, plus a GitHub data collector.
Components
- Grafana - dashboards, behind nginx basic auth, host port
3006. - Prometheus - scrapes
/metricsfromrelay,stalwart, and the host. Internal docker network only. - Postgres 16 - backing store for Grafana, Umami, and the GitHub collector. Bound to
127.0.0.1:5432. - Umami - privacy-friendly web analytics. Public vhost; tracking script reachable from end-user browsers.
- collector (pm2) - periodically pulls per-repo GitHub stats (stars, issues, traffic, releases) and computes commits + LOC by cloning into
data/repos/. Writes to thedashboardPostgres DB. - telemetry-collector (pm2) - receives anonymous heartbeats from self-hosted instances, rolls them up, writes to the
telemetryPostgres DB.
Layout on the server
$APP_DIR/
├── docker-compose.yml # grafana, prometheus, postgres, umami
├── .env # secrets + site config, chmod 600
├── nginx/*.conf.template # rendered with envsubst by deploy.sh
├── prometheus/prometheus.yml
├── grafana/provisioning/...
├── grafana/dashboards/*.json
├── postgres/init.sql # creates grafana, umami, dashboard, telemetry DBs
├── collector/ # pm2 service
├── telemetry-collector/ # pm2 service
└── data/
├── postgres/
├── prometheus/
├── grafana/
└── repos/ # bare clones for LOC/commit scans
Deploy
./deploy.sh
First run: generates .env with random secrets and exits - fill in GRAFANA_DOMAIN, UMAMI_DOMAIN, TELEMETRY_DOMAIN, LE_EMAIL, then re-run.
Subsequent runs: render nginx vhost templates, request any missing Let's Encrypt certs, pull compose images, restart services, rebuild + reload the pm2 collectors.