Multi-server Setup
Connect multiple remote servers to DevPanel and deploy services across your entire infrastructure from one dashboard.
Overview
DevPanel uses a hub-and-spoke model. Your local DevPanel installation (the hub) communicates with lightweight agent containers running on each remote server (spokes).
DevPanel (hub) :33000 / :33001
↓ HTTP
Server A agent :33002 → Docker
Server B agent :33002 → Docker
Server C agent :33002 → Docker
Step 1: Add a remote server in DevPanel
- 1Go to Servers → New Server.
- 2Enter the server's name and public IP or hostname.
- 3Click Create — a server token is generated.
- 4Copy the server token (shown once — save it now).
Step 2: Start the agent on the remote server
SSH into your remote server and run:
docker run -d \
--name devpanel-agent \
--restart unless-stopped \
-p 33002:33002 \
-v /var/run/docker.sock:/var/run/docker.sock \
-e API_URL=http://<your-devpanel-ip>:33001 \
-e SERVER_TOKEN=<token-from-step-1> \
ghcr.io/nnvanhao/devpanel-agent:latestReplace <your-devpanel-ip> with the IP of the machine running DevPanel.
Step 3: Verify the connection
Back in DevPanel, the server status changes from pending to online within 30 seconds once the agent starts and registers.
Step 4: Deploy to specific servers
When creating a new service, use the server selector to choose which server the service deploys to. You can run different services on different servers — all from one dashboard.
Firewall requirements
| Port | Direction | Purpose |
|---|---|---|
| 33001 | Remote → DevPanel | Agent registers and receives commands |
| 33002 | DevPanel → Remote | API sends Docker commands to agent |
Tips
- ✓Use a private network (e.g. Tailscale, WireGuard) between DevPanel and agents for better security.
- ✓Name servers descriptively — e.g. 'prod-us-east', 'staging-eu' — to avoid confusion when deploying.
- ✓The agent container auto-restarts on crash and re-registers with DevPanel automatically.
- ✓Deleting a server from DevPanel stops tracking it but does NOT stop the agent container — stop it manually if needed.