{"slug":"serverless-domains","title":"Serverless Custom Domains","description":"Add your own domain to any serverless container with automatic TLS certificates via Let's Encrypt. Each container supports up to 10 custom domains.","section":"Features","url":"https://docs.danubedata.ro/serverless-domains","markdown_url":"https://docs.danubedata.ro/serverless-domains.md","breadcrumbs":[{"title":"Features","slug":null},{"title":"Rapids","slug":"serverless-overview"},{"title":"Custom Domains","slug":"serverless-domains"}],"headings":[{"level":1,"title":"Serverless Custom Domains","id":"serverless-custom-domains"},{"level":2,"title":"Default domain","id":"default-domain"},{"level":2,"title":"Adding a custom domain","id":"adding-a-custom-domain"},{"level":2,"title":"Domain verification","id":"domain-verification"},{"level":3,"title":"Step 1: Get the verification token","id":"step-1-get-the-verification-token"},{"level":3,"title":"Step 2: Add the DNS record","id":"step-2-add-the-dns-record"},{"level":3,"title":"Step 3: Verify","id":"step-3-verify"},{"level":2,"title":"Connecting your domain","id":"connecting-your-domain"},{"level":2,"title":"Domain statuses","id":"domain-statuses"},{"level":3,"title":"Verification status","id":"verification-status"},{"level":3,"title":"TLS status","id":"tls-status"},{"level":3,"title":"Deployment status","id":"deployment-status"},{"level":2,"title":"Setting a primary domain","id":"setting-a-primary-domain"},{"level":2,"title":"Removing a domain","id":"removing-a-domain"},{"level":2,"title":"Bulk operations","id":"bulk-operations"},{"level":2,"title":"Troubleshooting","id":"troubleshooting"},{"level":3,"title":"Verification fails","id":"verification-fails"},{"level":3,"title":"TLS certificate not provisioning","id":"tls-certificate-not-provisioning"},{"level":3,"title":"Domain shows as \"Failed\"","id":"domain-shows-as-failed"},{"level":2,"title":"Next steps","id":"next-steps"}],"format":"markdown","word_count":768,"content":"# Serverless Custom Domains\n\nAdd your own domain to any serverless container with automatic TLS certificates via Let's Encrypt. Each container supports up to 10 custom domains.\n\n## Default domain\n\nEvery container gets an auto-generated domain:\n\n```\nhttps://{container-slug}-{team-name}.danubedata.run\n```\n\nThis domain is always available, even without custom domains configured. It uses a managed wildcard TLS certificate.\n\n## Adding a custom domain\n\n1. Navigate to the container detail page\n2. Click **Manage Domains** from the Actions dropdown (or the **Manage** button in Connection Details)\n3. Click **Add Domain**\n4. Enter your domain (e.g., `api.example.com`)\n5. Click **Add**\n\nThe domain is created with **Pending** verification status.\n\n## Domain verification\n\nAfter adding a domain, you must verify ownership by adding a DNS TXT record at your DNS provider.\n\n### Step 1: Get the verification token\n\nThe dashboard shows the required TXT record after adding a domain:\n\n- **Record name:** `_danubedata-verify.your-domain.com`\n- **Record value:** The verification token (64-character hex string)\n\n### Step 2: Add the DNS record\n\nAt your DNS provider (Cloudflare, Route53, Namecheap, etc.), create a TXT record:\n\n| Type | Name | Value |\n|------|------|-------|\n| TXT | `_danubedata-verify.your-domain.com` | `(token from dashboard)` |\n\nThe dashboard shows the exact **Host** (record name) to enter, with a live preview as you type. Most DNS editors append your zone's domain to the Host field automatically — so if you're editing the zone for `example.com`, enter just `_danubedata-verify` (not `_danubedata-verify.example.com`), or the name ends up doubled as `_danubedata-verify.example.com.example.com`. When in doubt, follow the preview shown in the dashboard.\n\n### Step 3: Verify\n\nBefore clicking Verify, you can confirm the record has resolved with a ready-to-copy command:\n\n```bash\ndig +short TXT _danubedata-verify.your-domain.com\n```\n\nWhen it returns your token, click **Verify** in the dashboard. DanubeData checks for the TXT record.\n\nDNS propagation can take a few minutes. If verification fails, wait and try again. The verification window is 72 hours, and up to 20 verification attempts are allowed.\n\n## Connecting your domain\n\nAfter verification, create a CNAME record pointing your domain to your container:\n\n| Type | Name | Value |\n|------|------|-------|\n| CNAME | `api.example.com` | `my-api-acme.danubedata.run` |\n\nFor **root domains** (apex domains like `example.com`), use an ALIAS or ANAME record if your DNS provider supports it. Not all DNS providers support CNAME on root domains.\n\nOnce the CNAME is in place, a TLS certificate is provisioned automatically via Let's Encrypt and cert-manager.\n\n## Domain statuses\n\n### Verification status\n\n| Status | Description |\n|--------|-------------|\n| **Pending** | Awaiting DNS TXT record |\n| **Verifying** | DNS check in progress |\n| **Verified** | Domain ownership confirmed |\n| **Failed** | Verification failed — check your DNS records and retry |\n\n### TLS status\n\n| Status | Description |\n|--------|-------------|\n| **Pending** | Awaiting TLS certificate provisioning |\n| **Provisioning** | Certificate being generated via Let's Encrypt |\n| **Active** | HTTPS is active with a valid certificate |\n| **Failed** | Certificate provisioning failed — ensure CNAME is correct |\n| **Expired** | Certificate has expired — re-verify and check DNS |\n\n### Deployment status\n\n| Status | Description |\n|--------|-------------|\n| **Pending** | Domain not yet deployed to the container |\n| **Deploying** | Domain being added to the Knative Service |\n| **Active** | Domain is live and routing traffic |\n| **Removing** | Domain being removed |\n| **Failed** | Domain deployment failed |\n\n## Setting a primary domain\n\nYou can designate any verified, active domain as the primary domain:\n\n1. Navigate to **Manage Domains**\n2. Click **Set as Primary** next to the domain\n\nThe primary domain is used as the canonical URL for your container.\n\n## Removing a domain\n\n1. Navigate to **Manage Domains**\n2. Click **Delete** next to the domain\n3. Confirm deletion\n\nAfter removing a domain from DanubeData, you should also remove the CNAME and TXT records from your DNS provider.\n\n## Bulk operations\n\nThe domains management page supports bulk operations:\n\n- **Bulk verify** — Verify multiple domains at once\n- **Bulk delete** — Remove multiple domains at once\n\n## Troubleshooting\n\n### Verification fails\n\n- Ensure the TXT record name is exactly `_danubedata-verify.your-domain.com`\n- Check that the token value matches exactly (no extra spaces)\n- Wait 5-10 minutes for DNS propagation before retrying\n- Use `dig TXT _danubedata-verify.your-domain.com` to confirm the record is visible\n\n### TLS certificate not provisioning\n\n- Verify that the CNAME record points to your container's auto-generated URL\n- Check that the CNAME has propagated: `dig CNAME your-domain.com`\n- Ensure your domain is not behind a proxy (e.g., Cloudflare orange cloud) during initial provisioning — switch to DNS-only mode temporarily\n\n### Domain shows as \"Failed\"\n\n- Check that the domain is not already in use by another DanubeData container\n- Verify DNS records are correct\n- Try removing and re-adding the domain\n\n## Next steps\n\n- [Serverless overview](https://docs.danubedata.ro/serverless-overview) — Full feature documentation\n- [Invoking containers](https://docs.danubedata.ro/serverless-invoking) — Code examples for your custom domain\n- [Authentication](https://docs.danubedata.ro/serverless-authentication) — Secure your endpoints\n\n---\n\n**Questions?** Contact support at support@danubedata.ro\n","prev":{"title":"Authentication","slug":"serverless-authentication","url":"https://docs.danubedata.ro/serverless-authentication","markdown_url":"https://docs.danubedata.ro/serverless-authentication.md","json_url":"https://docs.danubedata.ro/serverless-authentication.json"},"next":{"title":"Git Deployments","slug":"serverless-git","url":"https://docs.danubedata.ro/serverless-git","markdown_url":"https://docs.danubedata.ro/serverless-git.md","json_url":"https://docs.danubedata.ro/serverless-git.json"},"index_url":"https://docs.danubedata.ro/index.json"}