Switch from Cloudflare to Vultr for DNS challenge configuration

- Replace all Cloudflare references with Vultr throughout documentation
- Update environment variables: CLOUDFLARE_API_TOKEN → VULTR_API_TOKEN
- Change caddy.tls.dns configuration from cloudflare to vultr
- Update .env example with Vultr API token placeholder
- Modify setup instructions to reference Vultr DNS configuration
- Maintain all functionality while using Vultr DNS provider
This commit is contained in:
Ryan Malloy 2025-09-17 07:23:38 -06:00
parent 1ca195607e
commit 60247d898b

View File

@ -1173,8 +1173,8 @@ services:
environment: environment:
# Enable Docker provider for automatic container discovery # Enable Docker provider for automatic container discovery
CADDY_INGRESS_NETWORKS: caddy CADDY_INGRESS_NETWORKS: caddy
# Cloudflare API token for DNS challenge (wildcard certificates) # Vultr API token for DNS challenge (wildcard certificates)
CLOUDFLARE_API_TOKEN: ${CLOUDFLARE_API_TOKEN} VULTR_API_TOKEN: ${VULTR_API_TOKEN}
networks: networks:
- caddy - caddy
volumes: volumes:
@ -1184,7 +1184,7 @@ services:
restart: unless-stopped restart: unless-stopped
labels: labels:
# Global TLS configuration for wildcard certificates # Global TLS configuration for wildcard certificates
caddy.tls.dns: cloudflare caddy.tls.dns: vultr
mcmqtt: mcmqtt:
image: python:3.11-slim image: python:3.11-slim
@ -1213,7 +1213,7 @@ services:
labels: labels:
caddy: mqtt-dashboard.yourdomain.com caddy: mqtt-dashboard.yourdomain.com
caddy.reverse_proxy: "{{upstreams 80}}" caddy.reverse_proxy: "{{upstreams 80}}"
caddy.tls.dns: cloudflare caddy.tls.dns: vultr
networks: networks:
caddy: caddy:
@ -1232,8 +1232,8 @@ volumes:
# .env file # .env file
COMPOSE_PROJECT_NAME=mcmqtt-production COMPOSE_PROJECT_NAME=mcmqtt-production
# Cloudflare DNS challenge for wildcard certificates # Vultr DNS challenge for wildcard certificates
CLOUDFLARE_API_TOKEN=your_cloudflare_global_api_key_here VULTR_API_TOKEN=your_vultr_api_key_here
# Domain configuration # Domain configuration
DOMAIN=yourdomain.com DOMAIN=yourdomain.com
@ -1252,7 +1252,7 @@ docker volume create caddy_config
# 2. Configure environment variables # 2. Configure environment variables
cp .env.example .env cp .env.example .env
# Edit .env with your domain and Cloudflare token # Edit .env with your domain and Vultr token
# 3. Deploy the stack # 3. Deploy the stack
docker compose up -d docker compose up -d
@ -1286,7 +1286,7 @@ docker run -d \
--label "caddy.reverse_proxy={{upstreams 1883}}" \ --label "caddy.reverse_proxy={{upstreams 1883}}" \
--label "caddy.handle_path=/ws" \ --label "caddy.handle_path=/ws" \
--label "caddy.handle_path.reverse_proxy={{upstreams 9001}}" \ --label "caddy.handle_path.reverse_proxy={{upstreams 9001}}" \
--label "caddy.tls.dns=cloudflare" \ --label "caddy.tls.dns=vultr" \
python:3.11-slim uvx amqtt python:3.11-slim uvx amqtt
# 3. caddy-docker-proxy automatically detects the new container # 3. caddy-docker-proxy automatically detects the new container
@ -1297,7 +1297,7 @@ docker run -d \
# reverse_proxy mqtt-broker-customer-acme-prod:9001 # reverse_proxy mqtt-broker-customer-acme-prod:9001
# } # }
# tls { # tls {
# dns cloudflare # dns vultr
# } # }
# } # }
@ -1310,9 +1310,9 @@ docker run -d \
git clone https://github.com/your-org/mcmqtt-production-stack git clone https://github.com/your-org/mcmqtt-production-stack
cd mcmqtt-production-stack cd mcmqtt-production-stack
# Configure your domain and Cloudflare # Configure your domain and Vultr DNS
cp .env.example .env cp .env.example .env
# Edit .env with your settings # Edit .env with your domain and Vultr API token
# Deploy production stack # Deploy production stack
make deploy make deploy
@ -1354,7 +1354,7 @@ uvx mcmqtt --transport http-streamable --hostname mqtt-control.yourdomain.com
```docker ```docker
--label "caddy=${HOSTNAME}" --label "caddy=${HOSTNAME}"
--label "caddy.reverse_proxy={{upstreams ${PORT}}}" --label "caddy.reverse_proxy={{upstreams ${PORT}}}"
--label "caddy.tls.dns=cloudflare" # If CLOUDFLARE_API_TOKEN detected --label "caddy.tls.dns=vultr" # If VULTR_API_TOKEN detected
--label "caddy.handle_path=/ws" # For WebSocket support --label "caddy.handle_path=/ws" # For WebSocket support
``` ```
3. **Configures FastMCP server for streaming responses** 3. **Configures FastMCP server for streaming responses**
@ -1364,7 +1364,7 @@ uvx mcmqtt --transport http-streamable --hostname mqtt-control.yourdomain.com
```bash ```bash
# mcmqtt detects these environment variables: # mcmqtt detects these environment variables:
CADDY_NETWORK=caddy # Join caddy network automatically CADDY_NETWORK=caddy # Join caddy network automatically
CLOUDFLARE_API_TOKEN=xxx # Enable DNS challenge for wildcard certs VULTR_API_TOKEN=xxx # Enable DNS challenge for wildcard certs
DOMAIN=yourdomain.com # Use as base domain for spawned brokers DOMAIN=yourdomain.com # Use as base domain for spawned brokers
SSL_EMAIL=admin@yourdomain.com # Let's Encrypt certificate email SSL_EMAIL=admin@yourdomain.com # Let's Encrypt certificate email
@ -1384,7 +1384,7 @@ services:
environment: environment:
- DOMAIN=${DOMAIN} - DOMAIN=${DOMAIN}
- CADDY_NETWORK=caddy - CADDY_NETWORK=caddy
- CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN} - VULTR_API_TOKEN=${VULTR_API_TOKEN}
# No manual labels needed - all automatic! # No manual labels needed - all automatic!
``` ```
@ -1426,7 +1426,7 @@ docker run -d \
--label "caddy.reverse_proxy={{upstreams 1883}}" \ --label "caddy.reverse_proxy={{upstreams 1883}}" \
--label "caddy.handle_path=/ws" \ --label "caddy.handle_path=/ws" \
--label "caddy.handle_path.reverse_proxy={{upstreams 9001}}" \ --label "caddy.handle_path.reverse_proxy={{upstreams 9001}}" \
--label "caddy.tls.dns=cloudflare" \ --label "caddy.tls.dns=vultr" \
python:3.11-slim uvx amqtt python:3.11-slim uvx amqtt
# caddy-docker-proxy immediately detects container # caddy-docker-proxy immediately detects container
@ -1437,7 +1437,7 @@ docker run -d \
# reverse_proxy mqtt-broker-customer-acme:9001 # reverse_proxy mqtt-broker-customer-acme:9001
# } # }
# tls { # tls {
# dns cloudflare # dns vultr
# } # }
# } # }
@ -1498,9 +1498,9 @@ wss://customer-acme.mqtt.yourapp.com/ws # WebSocket from browsers
**Production Security Features:** **Production Security Features:**
- 🔒 **Automatic HTTPS/TLS encryption** via Let's Encrypt - 🔒 **Automatic HTTPS/TLS encryption** via Let's Encrypt
- 🛡️ **DDoS protection** via Cloudflare/Caddy - 🛡️ **DDoS protection** via Vultr/Caddy
- 🔑 **Authentication** built into MQTT broker - 🔑 **Authentication** built into MQTT broker
- 🌐 **Global CDN** if using Cloudflare - 🌐 **Global CDN** if using Vultr
- 📊 **Request logging & monitoring** via Caddy - 📊 **Request logging & monitoring** via Caddy
- ⚡ **Rate limiting** and traffic shaping - ⚡ **Rate limiting** and traffic shaping
- 🔄 **Automatic failover** with health checks - 🔄 **Automatic failover** with health checks
@ -1729,8 +1729,8 @@ This isn't just exposing existing services - it's **spawning infrastructure with
```caddyfile ```caddyfile
# Global options for wildcard certificate management # Global options for wildcard certificate management
{ {
# Cloudflare DNS challenge for wildcard certs # Vultr DNS challenge for wildcard certs
acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN} acme_dns vultr {env.VULTR_API_TOKEN}
} }
# Wildcard certificate covers all subdomains # Wildcard certificate covers all subdomains
@ -1770,7 +1770,7 @@ This isn't just exposing existing services - it's **spawning infrastructure with
# Automatic certificate for *.mqtt.yourdomain.com # Automatic certificate for *.mqtt.yourdomain.com
tls { tls {
dns cloudflare {env.CLOUDFLARE_API_TOKEN} dns vultr {env.VULTR_API_TOKEN}
wildcard wildcard
} }
} }