Part of the Ping-Tower uptime monitoring system. 📖 Full project description and architecture →
Infrastructure for the PingTower platform: reverse proxy, all four
datastores, and log aggregation — deployed separately from the six
application services and shared with them via the external
pingtower_network Docker network.
| Component | What it does |
|---|---|
proxy/ |
Traefik — TLS termination (Let's Encrypt, TLS challenge) |
postgres/ |
PostgreSQL — transactional data (users, servers, ping settings, tokens) |
redis/ |
Redis — per-service state (ping-service target store, state-elevator status/cooldown) |
clickhouse/ |
ClickHouse — time-series ping metrics (server_pings), with init script and backup/restore scripts |
rabbitmq/ |
RabbitMQ broker — topology defined in config/definitions.json, contract documented in asyncapi.yaml |
logging/ |
Loki + Promtail + Grafana — centralized log aggregation for all services |
The root Makefile orchestrates every stack and service from one place:
make -C infra up # infra (postgres, redis, clickhouse, rabbitmq) + API migrations + all services
make -C infra down # stop everything
make -C infra infra-up # just the datastores + broker
make -C infra services-up # just api, workers and frontend (assumes infra is already up)
make -C infra migrate # run the API's EF Core migrator once
make -C infra ps # compose status across every stack
make -C infra logs # tail infra logsEach service also has its own <service>-up / <service>-down target
(api-up, email-up, metrics-up, ping-up, state-up, tg-bot-up,
frontend-up).
.gitlab-ci.yml — deploys over SSH: rsyncs this repo to the target host,
creates pingtower_network if missing, then brings up postgres, redis,
clickhouse, rabbitmq, the proxy, and logging via docker compose
(production only, main branch).