Docs
grovs.io Start for free

Architecture

The services in the Compose stack, how traffic reaches them and how the backend routes requests by hostname.

Request flow

Everything public enters through the proxy on ports 80 and 443. The databases are reachable only inside the Compose network.

Behind your own proxy (Coolify, Dokploy and other platforms) the proxy service is left out and your proxy routes the same hosts to dashboard:3000 and web:3000.

Services

ServiceRolePort (internal)VolumeScaling
proxyCaddy with automatic TLS. standalone profile only.80, 443, publishedcaddy_data, caddy_configOne per server
postgresPostgreSQL 16. The system of record.5432pg_dataLarger server
redisRedis 7. Queues, caches, dedup. AOF, no eviction.6379redis_dataLarger server
clickhouseClickHouse 25.3. Events and analytics.8123clickhouse_dataLarger server
migrateMigrates both databases, seeds the OAuth app and adminNonestorageRuns on every start, then exits
webRails (Puma): API, redirects, SDK, uploads3000storageWEB_CONCURRENCY
worker-1Sidekiq: scheduler, events, batchesNonestorageNever. Exactly one replica.
worker-2Sidekiq: maintenance and device updatesNonestorageLarger server
dashboardNext.js dashboard, configured from .env3000NoneStateless

Start order is fixed: the three databases become healthy, migrate exits with code 0, web becomes healthy, then the workers and dashboard start. Sizing covers the process settings, and Monitoring lists each healthcheck.

Uploaded images and exports live in the storage volume and are served through the API host. To use S3 or an S3-compatible store instead, set ACTIVE_STORAGE_SERVICE=amazon and the AWS_S3_* variables. Railway, Render, Easypanel and CapRover use object storage so the API and workers share the same uploads.

Hostname routing

The backend routes by hostname. Fixed hosts live under your app domain (SERVER_HOST). Links live under your links domain (DOMAIN_LIVE) and test links domain (DOMAIN_TEST). These default to the app domain and test.<links domain>.

HostServes
dashboard.Dashboard UI
api.Dashboard API, uploaded assets, health check
sdk.Mobile, web and server SDK endpoints. This is the SDK baseURL.
preview.Link preview pages
mcp.MCP (AI tool) OAuth and API
go.Reserved for the quick-link helper, which is not enabled on self-hosted deployments
*.<links domain>Per-project production link subdomains, for example a1b2c3d4.acme.link
*.<test links domain>Per-project test link subdomains, for example a1b2c3d4.test.acme.link

DNS lists the records each host needs.

Last updated 2026-10-26
Was this page helpful?