make -C infra up.
Production domains
Hosted Control and gateway are still being commissioned. Publishing the website,
docs and sign-in page does not mean a workspace can already execute agent traffic.
Public and private networking
Control API Machines run two route sets in one supervised process:- Public port 8000 serves operator APIs and OAuth routes. It has no internal router.
- Private port 8001 serves health and service-authenticated internal routes. This port is not advertised to Fly Proxy.
[::]:8080 and calls
http://api.process.obol-control.internal:8001 over Fly’s private IPv6 network.
Process-qualified DNS excludes worker Machines. Both Control listeners drain
before the shared database pool closes (ADR-0065).
GATEWAY_FEATURES=kek-aws; it receives no
PostgreSQL or Stripe credentials. Its /readyz check requires Redis and a valid
loaded policy snapshot. Do not disable this check for an empty installation.
There is no connectors worker deployment. Reviewed native packs use the gateway
HTTP executor, and remote MCP servers federate directly. See
trusted workers.
Production credentials
Store owner-only environment files outside the repository, then import runtime values into Fly through standard input. Never place private keys in build arguments. The release helper validates separation from local development before staging secrets; provider authentication must be checked separately.
Control and gateway use separate AWS principals. Only gateway may decrypt vendor
credentials. Production Clerk uses
pk_live_/sk_live_; local development keeps
its test instance. Stripe platform billing uses a restricted rk_live_ runtime
key in Control; local billing remains in the sandbox.
First application release
Provision managed PostgreSQL, Redis and AWS KMS, and complete the production configuration first. Deploy Control and web individually:make -C infra fly-deploy deploys
Control, web and gateway in that order. API and worker must share the same live
Stripe catalog and webhook configuration before paid enrollment.
Website and documentation releases
The website uses the existing landing Dockerfile. Its public sign-in URL is compiled ashttps://app.tryobol.dev. It receives no customer or platform API
credentials. Optional waitlist and connector-request webhooks are separate
runtime settings; without them submissions return an unavailable response.
DNS and TLS
Create certificates usingfly certs add for each app’s real hostnames. Use the
returned A/AAAA or CNAME values in Namecheap; preserve existing email and domain
verification records. Verify certificate readiness and HTTPS responses before
sending visitors to a hostname. Marketing canonical URLs, robots and sitemap use
https://tryobol.dev; docs navigation links back to the website and dashboard.