Skip to main content
The vm-edge bundle under ilyama/infra/deploy/vm-edge/ deploys a production-like Golain stack with:
  • ZITADEL + Traefik wildcard TLS (Let’s Encrypt via Cloudflare DNS-01)
  • Internal PKI for Postgres, RabbitMQ, and Timescale mTLS
  • Optional HTTP APIs and MQTT pass-through for devices

vs local dev

Cloudflare DNS

Create API token with Zone DNS Edit + Zone Read. Set CF_DNS_API_TOKEN in .env. Sync A records to your VM public IP:

Internal PKI

Generates internal CA, MQTT broker CA, and leaf certs for services. Override SANs if hostnames differ:

Data plane (Postgres + Rabbit + Timescale)

Migrate from repo root with TLS client certs:

Application stack

Copy per-service env from infra/deploy/vm-edge/env/*.vm.env.example into services/apis/.env, services/domain-workers/.env, etc. Wire Zitadel settings:
  • ZITADEL_ENDPOINT
  • OAuth client IDs for apis, console, platform-tui

Device certificates

Production device mTLS goes through the cert worker RPCs — not ad-hoc issuance. JITR bootstrap certs tie to fleet provisioning.

platform-tui against vm-edge

Dev defaults pre-fill from infra/deploy/vm-edge/env/apis.vm.env: Do not use auth.ilyama.golain.io for this stack — that is a separate local Zitadel compose profile.

Full operator guide

Detailed steps, Zitadel compose fetch, smoke tests, and HTTP API overlays: ilyama/infra/deploy/vm-edge/README.md AWS VM bootstrap: ilyama/infra/deploy/aws-vm/README.md