Skip to content

Environments

The platform runs two environments on one Kubernetes cluster (DigitalOcean, fra1): the same images, with different namespaces, tunnels, databases, secrets and Worker hostnames.

production staging
Workers afixo-web, afixo-api afixo-web-staging (staging.afixo.io, api-staging.afixo.io, behind an Access email policy), afixo-api-staging
Namespace afixo afixo-staging
Tunnel afixo-fra1origin. / origin-api. afixo-fra1-stagingorigin-staging. / origin-api-staging.
Databases afixo_auth, afixo_identity, afixo_policy, afixo_audit afixo_*_staging, on the same managed cluster
Access service token afixo-api-production afixo-api-staging — never shared across environments
GitHub OAuth app callback https://afixo.io/api/v1/auth/github/callback callback https://staging.afixo.io/api/v1/auth/github/callback
Deployed by workflow_dispatch → production, in every repo push to master, in every repo

Both namespaces share a single s-1vcpu-2gb node for now; requests are sized to fit (~175m CPU / ~225Mi per environment). Migrations run at service boot, so a deploy that ships a migration applies it on first start; they are written to stay compatible with the previous binary, which is still serving during the rollout.

docs.afixo.io has one environment. A push to master in the documents repository builds the site and runs wrangler deploy; there is no staging hostname for the docs. The Worker is assets only: a bad deploy is a wrong page, never a wrong decision.

The platform uses docker compose for Postgres and cargo run for the services; afixo-web’s astro dev registers afixo-api as an auxiliary Worker so a login can complete locally. This site is pnpm dev, or pnpm preview to see the production headers and the 404 page.