CRMcy Docs

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:

  1. Adding a CNAME record from crm.acme.com to <slug>.crmcy.app.
  2. Submitting the domain at Settings → Custom domain in the staff app.
  3. 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.