Skip to content

Server Deployment

Coolify builds the signaling server from the public Git repository using the root Dockerfile. The production application tracks main, exposes port 8081, and checks GET /api/config for health. TeamCity validates and packages the server, but the production Coolify deployment does not use that package or call a deployment webhook. A separate Docker registry is not required for this hosted flow.

On release tags, TeamCity publishes a server image and a companion web image to GitHub Container Registry. These are for the self-hosted Compose installation; the production Coolify application can continue building from the public source repository.

The read-only deploy key provides Git access, but it does not install a GitHub webhook. Deploy manually in Coolify until a repository webhook can reach Coolify, then enable automatic deployment for the production branch.

Production configuration

The public hostname is https://api.shilling.finance. Route it through the Cloudflare tunnel to Coolify's proxy. In Coolify, set the production application domain to http://api.shilling.finance and disable Force HTTPS. Cloudflare serves HTTPS to visitors and connects to Coolify over HTTP. Do not attach a public hostname until the server starts in Supabase auth mode.

The unraid tunnel routes api.shilling.finance to http://192.168.1.88:80. The DNS zone has a proxied api record that points to the tunnel. A wildcard route or DNS record is not needed for this server. The Coolify proxy returns 200 for this host over HTTP when the application domain uses the HTTP scheme; an HTTPS scheme caused an origin redirect.

Set these Coolify application variables for runtime only:

Application variableProject shared variable
SHILLING_AUTH_MODEsupabase
SHILLING_SUPABASE_URL{{project.supabase_project_url}}
SHILLING_SUPABASE_ANON_KEY{{project.supabase_publishable_key}}
SHILLING_SUPABASE_SERVICE_KEY{{project.supabase_secret_service_key}}

The service key is used only on the server for public.user_profiles lookups. For the current Supabase project, the legacy service_role key works for that REST request; the newer sb_secret key returned 401 Invalid API key when tested. Keep the service key out of Git and client builds.

After deployment, confirm the Coolify container is healthy, its logs say Auth mode: supabase, and GET /api/config on the public hostname reports Supabase auth. The client default server URL is the same hostname.