Skip to main content
Skip to main content

Public Access on Zerops

Zerops offers three public access methods: zerops.app subdomains (dev only, 50MB upload limit), custom domains (production, needs IPv4/IPv6), and direct port access (TCP/UDP on 10-65435).

Access Methods

1. Zerops Subdomains (.zerops.app)

  • Shared HTTPS balancer (scalability bottleneck)
  • Max upload: 50 MB
  • Not for production — use for development/testing only
  • Auto-provisioned SSL
  • Pre-configure via import YAML: enableSubdomainAccess: true (works for all runtime/web types)
  • Activate routing via API: zerops_subdomain enable (only works on deployed/ACTIVE services) — call once after the first deploy of each new service, even if enableSubdomainAccess: true was set in import. Import pre-configures routing but does NOT activate L7 balancer; without the explicit enable call, the subdomain returns 502. Re-deploys do NOT deactivate it. Use zerops_discover to check current status and get the URL (subdomainEnabled + subdomainUrl fields).
  • Port-specific subdomains: If HTTP ports are defined in zerops.yml, each port gets its own subdomain: {hostname}-{subdomainHost_prefix}-{port}.{subdomainHost_rest}. Example: hostname appdev, subdomainHost 1df2.prg1.zerops.app, port 3000 → actual URL https://appdev-1df2-3000.prg1.zerops.app. Port 80 omits the port suffix: https://appdev-1df2.prg1.zerops.app
  • Internal network fallback: Every service is accessible internally via http://{hostname}:{port} (e.g., http://appdev:3000). Use this to verify the app is running when subdomain access is uncertain — curl http://appdev:3000/health from the ZCP container or any other service in the project
  • Works for: nodejs, static, nginx, go, python, php, java, rust, dotnet, and all other runtime types

2. Custom Domains (Production)

  • Per-project HTTPS balancer (2 containers, HA)
  • Round-robin load balancing + health checks
  • Full upload limit: 512 MB
  • Requires IP address assignment:
IP TypeCostProtocolNotes
Shared IPv4FreeHTTP/HTTPS onlyLimited connections, shorter timeouts
Dedicated IPv4$3/30 daysAll protocolsNon-refundable, auto-renews
IPv6FreeAll protocolsDedicated per project

3. Direct Port Access

  • Available for: Runtime services, PostgreSQL
  • Port range: 10-65435 (80, 443 reserved)
  • Protocols: TCP, UDP
  • Configurable firewall: blacklist or whitelist per port

DNS Setup (Custom Domain)

Point your domain to the project's IP:

  • A record → Dedicated IPv4
  • AAAA record → IPv6
  • Shared IPv4: Requires both A and AAAA records (AAAA needed for SNI routing)

Gotchas

  1. Shared IPv4 needs AAAA record: Without AAAA, SNI routing fails — always add both A and AAAA
  2. zerops.app 50MB limit: File uploads over 50MB fail on subdomains — use custom domain
  3. Dedicated IPv4 is non-refundable: $3/30 days, auto-renews — cannot get refund if removed early
  4. Ports 80/443 reserved: Your app cannot bind to these — Zerops uses them for SSL termination