First Use¶
You've deployed Dreadnought and it's running. This guide walks through logging in and setting up your first domain and DNS record.
Logging In¶
Open the web dashboard in your browser:
- Local access:
http://localhost:8082 - LAN access:
http://your-server-ip:8082 - Public access:
https://ddns.yourdomain.com(if you've set up a reverse proxy)
Enter the ADMIN_EMAIL and ADMIN_PASSWORD you set in your .env file and click Log In.
First-time setup: The admin user is created automatically from your
.envvalues the first time the API starts. You don't need to register or confirm an email.
The Dashboard¶
After logging in, you'll see the Dashboard:
- Current IP (IPv4): The public IP address the worker last detected
- Current IP (IPv6): Detected IPv6 address (if
IPV6_ENABLED=true) - Last Sync: When the worker last ran its sync cycle
- Last Sync Result: Summary of what the last sync did
- Record Count: How many DNS records are being tracked
The worker polls your IP every POLL_INTERVAL_SECONDS (default: 5 minutes). If you just deployed, it may show "No sync yet" until the first poll completes.
Step 1 — Add a Domain¶
Before adding DNS records, you need to register the Cloudflare zone (domain) in Dreadnought.
- Click Domains in the navigation bar
- Click Add Domain
- Fill in:
- Domain Name: The root domain, e.g.
example.com - Zone ID: The Cloudflare Zone ID for this domain
- Click Save
Finding your Zone ID:
1. Log into Cloudflare
2. Click on your domain
3. On the Overview page, look in the right sidebar
4. Copy the Zone ID (a 32-character string like a1b2c3...)
See Cloudflare Setup for more detail.
You can add multiple domains if you manage multiple Cloudflare zones.
Step 2 — Add DNS Records¶
Now tell Dreadnought which DNS records to keep updated.
- Click Records in the navigation
- Click Add Record
- Fill in:
| Field | Description | Example |
|---|---|---|
| Domain | Select from your registered domains | example.com |
| Host | Subdomain prefix, or @ for the root domain |
vpn, @, www |
| Type | Record type — A for IPv4, AAAA for IPv6 |
A |
| Proxied | Enable Cloudflare proxy (orange cloud) | ✓ or ☐ |
| TTL | Time-to-live in seconds. 1 = Cloudflare Auto |
300 |
- Click Create
The record is immediately synced to Cloudflare with your current public IP — no waiting for the next poll cycle.
Host Examples¶
| What you want | Host value | Resulting FQDN |
|---|---|---|
Root domain (example.com) |
@ |
example.com |
| www subdomain | www |
www.example.com |
| VPN endpoint | vpn |
vpn.example.com |
| Home server | home |
home.example.com |
| Wildcard | * |
*.example.com |
Proxied vs. Non-Proxied¶
| Setting | Traffic flows through | Use when |
|---|---|---|
| Proxied (orange cloud) | Cloudflare's CDN | Website or service where you want Cloudflare protection/caching |
| Not proxied (grey cloud) | Directly to your IP | VPN endpoints, game servers, anything that needs a real IP |
Note: Proxied records always use TTL 300 (Auto) regardless of the TTL value you set — this is a Cloudflare limitation.
Step 3 — Verify the Record in Cloudflare¶
After creating a record in Dreadnought:
- Go to your domain in Cloudflare
- Click DNS → Records
- You should see an A record (or AAAA if IPv6) with your current public IP
If the record doesn't appear within a minute, check:
- The Dreadnought API logs: docker compose logs api
- That your CF_API_TOKEN has the correct permissions
The Audit Log¶
Every sync is logged. To view the history:
- Click Audit Log (or similar) in the navigation
- Each entry shows:
- Timestamp
- Action (e.g.
bulk_sync,immediate_sync) - Details (records updated, IP addresses, duration)
This is useful for verifying that syncs are happening and diagnosing issues.
Settings Page¶
The Settings page lets you adjust runtime configuration without editing .env:
| Setting | What it does |
|---|---|
| Poll Interval | Change how often the worker checks for IP changes (60–7200 seconds) |
| IPv6 Enabled | Toggle IPv6 detection on/off |
| Discord Webhook URL | Set or update the Discord notification webhook |
Changes take effect on the next worker cycle. The worker picks up new settings from the database automatically.
Common First-Use Scenarios¶
"My record was created but has the wrong IP"¶
The record was synced with the current detected IP. If that IP is wrong:
1. Check Dashboard to see what IP was detected
2. Test IP detection manually: curl https://api.ipify.org
3. If the IPs match but it's still wrong, your IP detection may be going through a VPN or proxy
"I created a record but it doesn't appear in Cloudflare"¶
Check the API logs:
docker compose logs api --tail 30
Look for errors referencing the Cloudflare API. Common causes:
- CF_API_TOKEN missing or invalid
- Token doesn't have Zone → DNS → Edit permission
- Zone ID doesn't match the domain
"I want to manage records for two different Cloudflare accounts"¶
Not currently supported — one CF_API_TOKEN manages one Cloudflare account. If you have multiple accounts, you'd need separate Dreadnought instances.
"I enabled IPv6 but AAAA records aren't being created"¶
- Check that
IPV6_ENABLED=truein your.env - Check that your server actually has IPv6 connectivity:
curl https://api6.ipify.org - Restart the worker:
docker compose restart worker - Check worker logs:
docker compose logs worker
If your server doesn't have an IPv6 address, the worker will log a detection failure and skip AAAA records.