Skip to content

Custom Domains

Quick Setup

  1. Add your domain to exodus.yml:
yaml
targets:
  default:
    server: my-vps
    domain:
      - example.com
      - www.example.com
  1. Add DNS records at your registrar:
TypeNameValue
A@YOUR_SERVER_IP
AwwwYOUR_SERVER_IP
  1. Deploy:
bash
exodus deploy

DNS Propagation

DNS changes can take 1-48 hours to propagate globally. Most propagate within 5-30 minutes.

Deploy After DNS

SSL certificates are provisioned on first deploy. If DNS hasn't propagated yet, SSL will fail. Wait for DNS to resolve, then redeploy.

Common Providers

Cloudflare

  1. Go to DNS settings
  2. Add A record: @YOUR_SERVER_IP
  3. Add A record: wwwYOUR_SERVER_IP

Cloudflare Proxy

If using Cloudflare proxy (orange cloud), set SSL/TLS mode to Full or Full (Strict) to avoid redirect loops.

Namecheap

  1. Go to Domain List → Manage → Advanced DNS
  2. Add A record: @YOUR_SERVER_IP
  3. Add A record: wwwYOUR_SERVER_IP

GoDaddy

  1. Go to My Products → DNS
  2. Add A record: @YOUR_SERVER_IP
  3. Add A record: wwwYOUR_SERVER_IP

Google Domains / Squarespace

  1. Go to DNS settings
  2. Add A record: @YOUR_SERVER_IP
  3. Add A record: wwwYOUR_SERVER_IP

Subdomains

For subdomains like app.example.com:

yaml
targets:
  default:
    domain:
      - app.example.com

DNS record:

TypeNameValue
AappYOUR_SERVER_IP

Multiple Domains

Point multiple domains to the same project:

yaml
targets:
  default:
    domain:
      - example.com
      - www.example.com
      - myapp.io
      - www.myapp.io

Each domain needs its own A records pointing to your server.

Wildcard Domains

Not currently supported. Add each subdomain explicitly.

Troubleshooting

ERR_SSL_PROTOCOL_ERROR / SSL_ERROR_RX_RECORD_TOO_LONG

SSL certificate failed to provision. DNS wasn't ready when you deployed.

Fix: Wait for DNS propagation, then redeploy:

bash
exodus deploy

ERR_TOO_MANY_REDIRECTS (HTTP 301/302 loop)

Cloudflare proxy with wrong SSL setting.

Fix: Set Cloudflare SSL/TLS mode to Full or Full (Strict).

ERR_CONNECTION_REFUSED / ERR_CONNECTION_TIMED_OUT

Domain not pointing to your server, or firewall blocking.

Fix:

  1. Verify DNS: dig example.com +short should return your server IP
  2. Check firewall: exodus ssh then sudo ufw status

502 Bad Gateway

Container crashed or not running.

Fix:

bash
exodus ps      # Check if container is running
exodus logs    # Check for errors
exodus restart # Restart container

404 Not Found

Caddy not configured for this domain.

Fix: Redeploy to regenerate Caddy config:

bash
exodus deploy

DNS Not Resolving (NXDOMAIN)

  1. Check DNS records are correct at registrar
  2. Wait for propagation (check dnschecker.org)
  3. Verify: dig example.com +short

Wrong IP / Old Site Showing

Cached DNS records. Wait for TTL to expire, or flush local DNS:

bash
# macOS
sudo dscacheutil -flushcache

# Linux
sudo systemd-resolve --flush-caches

# Windows
ipconfig /flushdns