Custom domains
Map your customer's domain (crm.acme.com) to a CRMcy tenant.
Last updated 2026-05-05
By default each tenant lives at <slug>.crmcy.app. Customers can map a custom domain (e.g. crm.acme.com) by:
- Adding a
CNAMErecord fromcrm.acme.comto<slug>.crmcy.app. - Submitting the domain at Settings → Custom domain in the staff app.
- Waiting ~60 seconds for the platform to issue a Let's Encrypt cert via DNS-01 challenge (handled by
infra/scripts/issue-custom-domain.sh).
The nginx edge then proxies the custom domain to the same upstream as the slug subdomain. Customers can switch their canonical URL via a toggle that flips the SEO <link rel="canonical"> and the customer-portal email links — useful when migrating from a slug to a custom domain or vice versa.
Operator workflow
Custom-domain certs auto-renew 30 days before expiry via infra/scripts/renew-certs.sh. Failed renewals raise an alert in the monitoring stack. The platform supports up to 200 custom domains per node before nginx config-reload time becomes noticeable; past that, shard tenants across nodes.
See the source at infra/scripts/issue-custom-domain.sh and infra/nginx/conf.d/custom-domains.conf.