Skip to main content

Overview

This part is optional. Your application is already accessible at its cpln.app endpoint. Follow these steps to connect a domain you own.
Since part 2 your application has answered on a generated 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 the frontend workload, 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.
A TXT record at _cpln.example.com verifies domain ownership, and a CNAME record points example.com at abc123xyz.cpln.app. The domain routes to the frontend workload, with a certificate Control Plane manages.

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 frontend workload 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 @.

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

Click Create 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.
Create the domain in your production org as a best practice.

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:
Route different paths to different workloads:
  • https://example.com/api routes to the API workload.
  • https://example.com/web routes to the frontend workload.
  • https://example.com/ routes to the default workload.
Each workload receives its own subdomain automatically:
  • https://api.example.com routes to the API workload.
  • https://web.example.com routes to the frontend workload.
Requires NS record delegation to Control Plane.

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, the quickstart-db GVC, the secret, and the api image, since they do not exist yet:
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.