DocHub
All deployed files, systemd units, and nginx configuration on OVH5

Files & Services

File Inventory on OVH5

File Purpose
/opt/dashboard/server.js Node.js HTTP server (127.0.0.1:3580)
/opt/dashboard/index.html Single-page dashboard UI
/opt/dashboard/.env Anthropic Admin API key
/usr/local/bin/collect-dashboard.sh Fast metrics collector (30s)
/usr/local/bin/collect-dashboard-slow.sh Slow metrics collector (5min)
/etc/systemd/system/dashboard.service Node.js server service
/etc/systemd/system/collect-dashboard.service Fast collector oneshot
/etc/systemd/system/collect-dashboard.timer Fast collector timer (30s)
/etc/systemd/system/collect-dashboard-slow.service Slow collector oneshot
/etc/systemd/system/collect-dashboard-slow.timer Slow collector timer (5min)
/etc/nginx/sites-available/admin-dashboard Nginx reverse proxy config
/etc/ssl/dashboard/cert.pem Self-signed SSL cert (10yr)
/etc/sudoers.d/dashboard Sudo rules for ubuntu user

Systemd Services

Dashboard Server

# dashboard.service
[Service]
User=ubuntu
ExecStart=/usr/bin/node /opt/dashboard/server.js
Restart=always

Fast Collector (30s)

# collect-dashboard.timer
[Timer]
OnBootSec=10
OnUnitActiveSec=30
AccuracySec=1s

Runs collect-dashboard.sh as root. Collects host metrics, per-container state, Claude/tmux status, Docker, SSH sessions. Writes to /tmp/dashboard-status.json.

Slow Collector (5min)

# collect-dashboard-slow.timer
[Timer]
OnBootSec=30
OnUnitActiveSec=300

Runs collect-dashboard-slow.sh as root. Collects disk usage, Claude Code version, token usage from JSONL files, snapshot info. Writes to /tmp/dashboard-status-slow.json.

Nginx Configuration

Reverse proxy on port 443 with self-signed SSL:

server {
    listen 443 ssl;
    server_name admin.ipnoelp.io;
    ssl_certificate /etc/ssl/dashboard/cert.pem;
    ssl_certificate_key /etc/ssl/dashboard/key.pem;
    location / {
        proxy_pass http://127.0.0.1:3580;
    }
}

Management Commands

# Check all services
ssh ovh5 "systemctl status dashboard collect-dashboard.timer collect-dashboard-slow.timer"

# Force collector run
ssh ovh5 "sudo /usr/local/bin/collect-dashboard.sh"
ssh ovh5 "sudo /usr/local/bin/collect-dashboard-slow.sh"

# Restart dashboard server
ssh ovh5 "sudo systemctl restart dashboard"

# View logs
ssh ovh5 "journalctl -u dashboard -n 20"

# Deploy updated HTML
scp -i ~/.ssh/ovh5_dev file ubuntu@15.204.90.153:/tmp/file
ssh ovh5 "sudo cp /tmp/file /opt/dashboard/ && sudo chown ubuntu:ubuntu /opt/dashboard/file"