Self-hosting on a VPS¶
The bare-VPS path uses systemd + Caddy on Ubuntu 22.04+. Cheaper than fly (~$19/mo for the full 3-node setup) at the cost of operating systemd yourself.
Topology¶
| VPS | Role | Inbound ports |
|---|---|---|
| 1 | Entropy aggregator | 443 (via Caddy) |
| 2 | dApp + seed + miner #1 | 443 (chat UI), 18333 (P2P) |
| 3 | Miner #2 | 18333 (P2P) — optional public, or fully private |
Three $6/mo droplets gets you the whole testnet. The dApp node should be the largest (consider $12/mo) since it runs the most services.
Entropy VPS¶
ssh root@entropy.example.com
git clone https://github.com/DosseyRichards/Fermi-Mining-ASIC-Software.git /opt/waveledger
sudo bash /opt/waveledger/deploy/testnet/setup_entropy_vps.sh
# Put TLS in front:
ENTROPY_HOST=entropy.example.com \
sudo -E bash /opt/waveledger/deploy/testnet/setup_entropy_proxy.sh
The setup script:
- Installs
python3,pip,ufw,curl,jq - Creates the
waveledgersystem user - Clones the repo into
/opt/waveledger - Opens port 8420 on UFW
- Drops a systemd unit
waveledger-entropy.serviceand starts it
The proxy script puts Caddy on 443 with auto-issued Let's Encrypt certs, reverse-proxying to 127.0.0.1:8420.
dApp + seed + miner VPS¶
ssh root@chat.example.com
git clone https://github.com/DosseyRichards/Fermi-Mining-ASIC-Software.git /opt/waveledger
# Install deps
sudo apt-get update && sudo apt-get install -y python3 python3-pip git ufw curl jq caddy
sudo pip3 install --break-system-packages -r /opt/waveledger/deploy/requirements-seed.txt
# Service user + dirs
sudo useradd --system --create-home --shell /bin/bash waveledger || true
sudo mkdir -p /var/lib/waveledger-testnet
sudo chown waveledger:waveledger /var/lib/waveledger-testnet /opt/waveledger
# Firewall
sudo ufw allow OpenSSH && sudo ufw allow 18333/tcp && sudo ufw allow 80/tcp \
&& sudo ufw allow 443/tcp && yes | sudo ufw enable
# Drop the systemd unit + miner config (see deploy/testnet/ for templates)
sudo cp /opt/waveledger/deploy/testnet/config-testnet.toml \
/opt/waveledger/deploy/testnet/config-chat.toml
# Caddyfile
sudo tee /etc/caddy/Caddyfile <<CADDY
chat.example.com {
encode gzip
reverse_proxy 127.0.0.1:8081
}
CADDY
sudo systemctl daemon-reload
sudo systemctl enable --now waveledger-chat.service caddy
Set the admin password before first start:
sudo systemctl edit waveledger-chat.service
# Add under [Service]:
# Environment=WAVELEDGER_ADMIN_USER=admin
# Environment=WAVELEDGER_ADMIN_PASSWORD=your-strong-password
sudo systemctl restart waveledger-chat.service
Miner #2 VPS¶
ssh root@miner2.example.com
git clone https://github.com/DosseyRichards/Fermi-Mining-ASIC-Software.git /opt/waveledger
ENTROPY_HOST=entropy.example.com ENTROPY_PORT=443 \
sudo -E bash /opt/waveledger/deploy/testnet/setup_miner_vps.sh
The script installs deps, opens port 18333, writes a config-miner.toml that points at your entropy host, and drops a waveledger-testnet-miner.service systemd unit.
DNS¶
Same idea as the fly path but with your VPS IPs:
| Type | Name | Value |
|---|---|---|
| A | chat | <chat-vps-public-ipv4> |
| AAAA | chat | <chat-vps-public-ipv6> |
| A | entropy | <entropy-vps-public-ipv4> |
| AAAA | entropy | <entropy-vps-public-ipv6> |
| A | seed | <chat-vps-public-ipv4> (same box) |
| AAAA | seed | <chat-vps-public-ipv6> |
Smoke test¶
curl -sI https://chat.example.com | head -3
curl -s https://entropy.example.com/api/health | jq .pool
nc -zv seed.example.com 18333
Operations¶
| Task | Command |
|---|---|
| Tail logs | journalctl -u waveledger-chat -f |
| Restart | sudo systemctl restart waveledger-chat |
| Reset chain | sudo systemctl stop waveledger-chat && sudo rm -rf /var/lib/waveledger-testnet && sudo systemctl start waveledger-chat |
| Update | cd /opt/waveledger && sudo -u waveledger git pull && sudo systemctl restart waveledger-chat |
For the full operational reference see Runbook.