Setup by Platform
Step-by-step setup for Windows, macOS, and Linux — plus copy-paste AI prompts to get help instantly.
Pick your platform. Each section has two paths: a prompt you can paste directly into any AI assistant (ChatGPT, Claude, Copilot), and manual steps if you prefer to do it yourself.
Windows
Windows can't run dynamoip natively. Use Docker — it works the same way on every machine.
Copy this prompt into your AI assistant
Fill in your port(s), domain, and service names, then paste into ChatGPT, Claude, or Copilot.
I want to set up dynamoip on Windows using Docker (Max mode — Cloudflare Tunnel, public internet).
Here's how dynamoip works in Docker:
- dynamoip runs in its own container built from a custom Dockerfile (node:22-alpine + socat + cloudflared pre-installed)
- Each app service has its own container with no exposed ports
- dynamoip uses FORWARD_<service>=<port> env vars to bridge localhost:PORT → the Docker service via socat
- The config is mounted at /config/dynamoip.config.json
- Tunnel credentials are cached in a dynamoip-tunnels volume
- No LAN_IP needed for Max mode — it uses CNAME records, not A records
My setup:
- Services: [e.g. "app on port 3000" or "api on 4000, frontend on 3000"]
- Domain (Cloudflare-managed): [e.g. myapp.com]
- I have a CF_API_TOKEN with Zone:DNS:Edit + Account:Cloudflare Tunnel:Edit
Please create:
1. dynamoip/Dockerfile — node:22-alpine, installs socat + cloudflared binary (linux-amd64), copies entrypoint.sh
2. dynamoip/entrypoint.sh — loops over FORWARD_* env vars, starts socat forwarders, then runs: node node_modules/.bin/dynamoip --config /config/dynamoip.config.json
3. dynamoip.config.json — baseDomain, tunnel: true, domains map
4. docker-compose.yml — one service per app (healthchecks), plus dynamoip service with FORWARD_ vars, volume mount for config + tunnels volume, env_file: .env
5. .env — just CF_API_TOKEN
Then show me how to start it: docker compose up --buildManual setup
What you need: Docker Desktop for Windows, a Cloudflare-managed domain, a Cloudflare API token with Zone:DNS:Edit + Account:Cloudflare Tunnel:Edit.
The quickest path is cloning the official example and swapping in your domain:
git clone https://github.com/foundanand/dynamoip-examples
cd dynamoip-examples/tunnelCopy .env.example to .env and add your token:
CF_API_TOKEN=your_cloudflare_api_token_hereEdit dynamoip.config.json with your domain:
{
"baseDomain": "yourdomain.com",
"tunnel": true,
"domains": {
"app": 3000
}
}Then start:
docker compose up --buildFirst run takes 20–30 seconds (installs cloudflared, creates the tunnel). After that it's instant.
Adapting it to your own project — the key files are:
dynamoip/Dockerfile— builds the dynamoip container (Alpine + socat + cloudflared)dynamoip/entrypoint.sh— starts socat port forwarders then runs dynamoipFORWARD_<service>=<port>env vars indocker-compose.yml— one per app service- Config mounted at
/config/dynamoip.config.json dynamoip-tunnelsvolume — caches tunnel credentials between restarts
Copy these files from the example into your project and adjust the service names and ports.
macOS
macOS can run dynamoip natively — no Docker needed.
Copy this prompt into your AI assistant
I want to set up dynamoip on macOS to give my local dev server a real HTTPS domain on my LAN.
dynamoip is an npm reverse proxy + DNS tool. I want to use Pro mode: it sets a Cloudflare DNS A record pointing to my LAN IP and gets a wildcard Let's Encrypt cert. All devices on my network trust it automatically.
My setup:
- App port: [e.g. 3000]
- Domain (Cloudflare-managed): [e.g. myapp.com]
- Package manager: [npm / pnpm / yarn]
- Cloudflare API token with Zone:DNS:Edit
Please:
1. Show me dynamoip.config.json
2. Add a dev:proxy script to package.json
3. Show the .env file I need
4. Show me how to run it
Notes:
- Always invoke via package manager: sudo npm run dev:proxy (sudo required for ports 80/443)
- First run takes ~60s for the Let's Encrypt cert — subsequent runs are instantManual setup
1. Install:
npm install --save-dev dynamoip2. Create dynamoip.config.json:
{
"baseDomain": "yourdomain.com",
"domains": {
"app": 3000
}
}3. Add to package.json:
{
"scripts": {
"dev:proxy": "dynamoip --config dynamoip.config.json"
}
}4. Create .env:
CF_API_TOKEN=your_cloudflare_api_token_here
CF_EMAIL=you@example.com5. Run (two terminals):
# Terminal 1 — your app
npm run dev
# Terminal 2 — dynamoip
sudo npm run dev:proxyYour service will be live at https://app.yourdomain.com, trusted on every device on your LAN.
No domain? Omit baseDomain from the config to use Quick mode — you'll get .local hostnames instead.
Linux
Same as macOS natively. If you're in Docker, network_mode: host makes it simpler than macOS/Windows.
Copy this prompt into your AI assistant
I want to set up dynamoip on Linux to give my local dev server a real HTTPS domain on my LAN.
dynamoip is an npm reverse proxy + DNS tool. Pro mode: Cloudflare DNS A record → my LAN IP, wildcard Let's Encrypt cert.
My setup:
- App port: [e.g. 3000]
- Domain (Cloudflare-managed): [e.g. myapp.com]
- Package manager: [npm / pnpm / yarn]
- Cloudflare API token with Zone:DNS:Edit
Please:
1. Show me dynamoip.config.json
2. Add a dev:proxy script to package.json
3. Show the .env file
4. Show me how to run it
Notes:
- sudo npm run dev:proxy (ports 80/443 need root)
- If I'm running in Docker, use network_mode: host — LAN_IP is auto-detected, no extra config neededManual setup
1. Install:
npm install --save-dev dynamoip2. Create dynamoip.config.json:
{
"baseDomain": "yourdomain.com",
"domains": {
"app": 3000
}
}3. Add to package.json:
{
"scripts": {
"dev:proxy": "dynamoip --config dynamoip.config.json"
}
}4. Create .env:
CF_API_TOKEN=your_cloudflare_api_token_here
CF_EMAIL=you@example.com5. Run:
# Terminal 1
npm run dev
# Terminal 2
sudo npm run dev:proxyIn Docker on Linux? Use network_mode: host — dynamoip auto-detects your LAN IP inside the container and you don't need to set LAN_IP:
services:
dynamoip:
build: ./dynamoip
network_mode: host
env_file: .env
environment:
FORWARD_app: 3000
volumes:
- dynamoip-certs:/root/.localmap/certs
- ./dynamoip.config.json:/config/dynamoip.config.json:ro
volumes:
dynamoip-certs: