> ## Documentation Index
> Fetch the complete documentation index at: https://docs.repocloud.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Custom Domains

> Connect your own domain to Container Apps (CNAME + ACME SSL) or VPS Apps (A-record to your dedicated IPv4)

## Custom Domains

Every deployment receives an auto-generated HTTPS URL. You can add your own domain for a professional, branded experience. The setup process differs between Container Apps and VPS Apps.

## Container Apps: CNAME-Based Setup

Container Apps use CNAME records with automatic ACME SSL certificate issuance.

<Steps>
  <Step title="Click Add Custom Domain">
    Go to your Container App's manage page and click **Add Custom Domain**.
  </Step>

  <Step title="Enter Your Domain">
    Enter your domain (e.g., `app.yourdomain.com`). If you enter a root domain (e.g., `yourdomain.com`), RepoCloud warns that your DNS provider must support ANAME, ALIAS, or CNAME-flattening records, and offers to use a `www` subdomain instead.
  </Step>

  <Step title="Add DNS Records">
    RepoCloud displays two CNAME records to add at your domain registrar:

    1. **Routing CNAME** — your subdomain pointing to your app's auto-generated address
    2. **ACME challenge CNAME** — `_acme-challenge` pointing to the SSL verification target

    Each record includes a copy button and a live status indicator.
  </Step>

  <Step title="Wait for DNS Propagation">
    DNS changes can take up to 24–48 hours to propagate, though they often take effect much sooner.
  </Step>

  <Step title="Confirm and Check Status">
    Click **Confirm and Check Status**. Once both records verify, RepoCloud automatically issues an SSL certificate and routes your domain to your application.
  </Step>
</Steps>

<Warning>
  Do not delete the `_acme-challenge` CNAME record after setup — it is required for automatic certificate renewal.
</Warning>

### Multiple Subdomains

If you use multiple subdomains of the same root domain (e.g., `app1.yourdomain.com` and `app2.yourdomain.com`) for different RepoCloud applications, we recommend using Cloudflare as your DNS provider. Cloudflare's proxy functionality helps resolve ACME challenge validation issues that can arise with multiple subdomains.

### Removing a Custom Domain

Return to the manage page and click **Remove Domain** to disconnect your custom domain.

## VPS Apps: A-Record Setup

VPS Apps have a dedicated IPv4 address. Point your domain directly to it with an A record.

<Steps>
  <Step title="Get Your IPv4 Address">
    Find your VPS's dedicated IPv4 address in the **Access** section of the manage page.
  </Step>

  <Step title="Create a DNS A Record">
    At your domain registrar, create an **A record** pointing your domain (e.g., `app.yourdomain.com`) to your VPS IPv4 address.
  </Step>

  <Step title="Register in the Dashboard">
    On the VPS manage page, go to the **Custom Domain** section and enter the domain you configured.
  </Step>

  <Step title="Wait for Verification">
    The dashboard checks DNS propagation. Once verified, the domain is active.
  </Step>
</Steps>

### Cloudflare Detection

If your domain uses Cloudflare (detected via IP range or NS records), the dashboard shows a Cloudflare-specific confirmation prompt. This is because Cloudflare proxied domains require manual confirmation that DNS is configured correctly. Click **Confirm** to proceed.

### VPS Apps with Built-In Domain Management

For VPS apps like Coolify and Dokploy that manage their own domains through Traefik:

* Use the **application's built-in domain management** (inside Coolify/Dokploy) for individual services deployed within the VPS
* Use the **RepoCloud custom domain** in the manage page for the VPS itself (the top-level server domain)

<Warning>
  Do not use the RepoCloud custom domain feature for domains intended for individual applications running inside Coolify or Dokploy. Use the application's own domain management (Traefik-based) instead.
</Warning>

## Apex (Root) Domains

An apex domain (e.g., `example.com` without a subdomain) normally cannot use a CNAME record. To use an apex domain with a Container App, your DNS provider must support one of:

* ALIAS records
* ANAME records
* CNAME flattening

Providers like GoDaddy do not support these features. Options:

* Use a subdomain like `www.yourdomain.com` instead (RepoCloud offers this automatically)
* Switch to a DNS provider that supports ALIAS/ANAME (Cloudflare, Route 53, DNSimple)

VPS Apps do not have this limitation — A records work at the apex.

## SSL Certificates

* **Container Apps**: SSL certificates are provisioned automatically via ACME (DNS-based validation) once both CNAME records verify. Certificates renew automatically.
* **VPS Apps**: SSL is managed by the application running on the VPS (e.g., Certbot, Traefik's Let's Encrypt integration). RepoCloud does not provision certificates for VPS custom domains.

## Troubleshooting

<AccordionGroup>
  <Accordion title="DNS verification failed">
    Verify that your DNS records match the values shown in the dashboard. Allow up to 48 hours for propagation. Use [DNS Checker](https://dnschecker.org) to verify your records are visible globally.
  </Accordion>

  <Accordion title="SSL certificate not issuing (Container Apps)">
    Ensure the `_acme-challenge` CNAME is correctly configured. Wait 30 minutes after DNS verification for certificate issuance. Contact support if it takes more than 24 hours.
  </Accordion>

  <Accordion title="Domain shows 'Not Secure'">
    The SSL certificate has not been issued yet. Verify DNS configuration and allow time for issuance. Ensure you are accessing the site via HTTPS.
  </Accordion>
</AccordionGroup>

## Next Steps

<CardGroup>
  <Card title="Container App Management" icon="box" href="/manage/container-apps">
    Other management features for container-based deployments
  </Card>

  <Card title="VPS App Management" icon="server" href="/manage/vps-apps">
    All management features for VPS instances
  </Card>

  <Card title="Troubleshooting" icon="wrench" href="/resources/troubleshooting">
    Resolve common issues with your applications
  </Card>
</CardGroup>
