Overview
This part is optional. Your application is already accessible at its
cpln.app endpoint. Follow these steps to connect a domain you own.cpln.app endpoint. This part puts it behind a name you own. example.com is a placeholder, so wherever it appears on this page, in a form, a file, or a command, use a domain you own. The domain is what makes the deployment production-facing. Users reach your name, and Control Plane issues and renews the certificate for it once a DNS record proves the domain is yours.
What you’ll build:
- Your domain (
example.com) verified with Control Plane and routed to thefrontendworkload, with a TLS certificate issued and renewed for you and the same geo-routed load balancing your application already has. - The DNS records at your provider that make it resolve.
Prerequisites
- A domain name you own, at a DNS provider that accepts a CNAME (or ALIAS) record on the domain itself.
- Completed 2. Deploy your own application with the
frontendworkload running. That is all this part needs, so you can come here straight after part 2 or after finishing the series at 5. Observe your workload.
If your DNS provider does not accept a CNAME record on the domain itself, route a subdomain instead: use
app.example.com wherever this part says example.com, and the CNAME host becomes app instead of @.- Console
- CLI
- Terraform
- Pulumi
- AI Agent
Step 1: Describe the domain
1
Open the domain form
Click
Domains in the left menu, then click New.2
Name the domain and pick the workload
Enter your domain as the
Domain (this quickstart uses example.com), then select the frontend workload from the quickstart-gvc GVC.3
Read the records the domain needs
Click
Create, or click anywhere outside the workload field. The form checks the domain before creating anything and lists what it needs. Under Ownership Config is a TXT record whose value is your org’s name; it proves you own the domain. Under DNS Config is the CNAME record that points the domain at your GVC, with your GVC’s alias already filled in. Export Zone File downloads both.Step 2: Add the DNS records
Add both records at your DNS provider and wait for them to propagate.Step 3: Create the domain
ClickCreate again. If the TXT record has not propagated yet, the Console refuses with You need to prove ownership of the domain example.com by setting one of the following TXT records; wait and try again. Once created, Control Plane issues the domain’s TLS certificate as soon as the CNAME resolves and the workload is ready.Verify
Once the certificate is issued, open the domain in your browser. Your application loads over HTTPS with a valid TLS certificate, and its footer still names the location that served the request.Your application is served on your own domain with an automatic TLS certificate and geo-routed load balancing.
Routing modes
Control Plane supports two routing modes:Path-based routing examples
Path-based routing examples
Route different paths to different workloads:
https://example.com/apiroutes to the API workload.https://example.com/webroutes to the frontend workload.https://example.com/routes to the default workload.
Subdomain-based routing examples
Subdomain-based routing examples
Each workload receives its own subdomain automatically:
https://api.example.comroutes to the API workload.https://web.example.comroutes to the frontend workload.
What you’ve learned
- Ownership before certificates: Control Plane issues a certificate for a name only after a TXT record proves you control it, and refuses the domain until that record resolves.
- The CNAME carries everything: pointing the domain at the GVC’s alias brings the TLS termination, the certificate renewal, and the geo-routing the generated endpoint had.
- One domain, many workloads: a domain splits across workloads by path or by subdomain.
Next steps
3. Service-to-service communication
If you came here straight after part 2, this is where the series continues: the API, kept off the internet, reached by the frontend through the mesh.
Domain reference
Every domain option: NS mode, subdomain routing, your own certificate, CORS, and the ports a domain can expose.
Clean up
To remove everything the series has created. If you came here before finishing parts 3, 4, and 5, skip the policy, the release, thequickstart-db GVC, the secret, and the api image, since they do not exist yet:
- Console
- CLI
- Terraform
- Pulumi
- AI Agent
1
Delete the domain
Open
Domains, select your domain, click Actions, then Delete, and confirm.2
Delete the policy
Open
Policies, select api-db-policy, click Actions, then Delete, and confirm.3
Uninstall the database release
Under
Templates, click Releases, open db, click Actions, then Uninstall, and confirm.4
Delete the database GVC
Open
quickstart-db, click Actions, then Delete, type the GVC name to confirm, and click Delete.5
Delete the application GVC
Open
quickstart-gvc, click Actions, then Delete, type the GVC name to confirm, and click Delete. web, frontend, api, api-identity, and the tracing setting go with it.6
Delete the secret
Open
Secrets, select db-credentials, click Actions, then Delete, and confirm.7
Delete the images
Open
Images, select frontend, and click Actions, then Delete to remove all its tags. Repeat for api.Uninstalling the release removes its volume set and the data on it. Remove the DNS records from your DNS provider after deleting the domain. A
--remote build also pushes the build cache images frontend-cache:latest and api-cache:latest; delete those too if you built without Docker.