Your servers,
under control
A lightweight server management dashboard. Deploy scripts, schedule cron jobs, stream real-time logs, and manage remote servers — all from one place.
Built for developers who need a real tool, not a toy dashboard.
The dashboard connects to lightweight Go workers running on your servers.
One command pulls the image, starts PostgreSQL, and runs the dashboard. Requires Docker.
curl -fsSL https://raw.githubusercontent.com/zgyant/devi-opps-worker/refs/heads/main/install.sh | sh
Dashboard at http://localhost:3000 ·
Worker binary at ~/.devi-ops/worker
Workers are small Go binaries you run on each server you want to manage. They connect back to the dashboard and execute scripts locally.
./worker.
curl -fsSL https://raw.githubusercontent.com/zgyant/devi-opps-worker/refs/heads/main/install.sh | sh
init command walks you through configuration
and writes a .env file automatically. You'll need
your Project ID from the dashboard.
./worker init
init.
./worker
pm2 so it restarts automatically on
failure.
[Unit]
Description=DeviOpps worker
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/devi-ops-worker
ExecStart=/opt/devi-ops-worker/worker
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
Both the dashboard and the worker are configured through environment variables.
.env
| Variable | Default | Description | |
|---|---|---|---|
DATABASE_URL |
— | PostgreSQL connection string | Required |
PORT |
3000 |
HTTP port the server listens on | Optional |
HOST |
localhost |
Bind address — set to 0.0.0.0 to accept external
connections
|
Optional |
NODE_ENV |
development |
Set to production for production builds |
Optional |
.env
./worker init generates and writes all of these automatically. Only set them by hand if you're scripting a deployment and want to skip the interactive setup.
| Variable | Default | Description | |
|---|---|---|---|
PROJECT_ID |
— | Project ID from the dashboard (Settings → Project) | Required |
WORKER_ID |
— | Unique ID for this worker — generated by init |
Required |
WORKER_TOKEN |
— | Auth token — generated by init, register it in the dashboard |
Required |
CLOUD_URL |
ws://localhost:3000/api/workers/socket |
WebSocket URL of your dashboard — change this to point at your server | Required |
WORKER_NAME |
hostname | Display name shown in the dashboard | Optional |
WORKER_HOST |
"" |
IP or hostname of this server (display only) | Optional |
.env
# Generated by `worker init`
PROJECT_ID=proj_abc123
WORKER_ID=b3f27a10-e4c2-4f8d-9b1e-2a3f0c6d8e9f
WORKER_NAME=prod-web-1
WORKER_TOKEN=a9c1d2e3f4b5c6d7e8f9a0b1c2d3e4f5
WORKER_HOST=192.168.1.10
CLOUD_URL=wss://dashboard.example.com/api/workers/socket
HEARTBEAT_INTERVAL_MS=15000
LOG_LINE_MAX_BYTES=65536