Deployment
Two deployment modes: embedded UI (recommended, v0.7.0+) where a single xe binary serves everything, or legacy stack with Caddy as reverse proxy.
Embedded UI (Recommended)
Single binary deployment. No Caddy, no static file rsync, no separate builds. The xe binary embeds the web UI via //go:embed.
xe node --ui --wallet --provide \
-dial /ip4/45.77.226.208/tcp/9000/p2p/12D3KooWSm1c... \
-api-bind 0.0.0.0 \
-ssh-port 2222 Legacy Architecture (Caddy + pm2)
┌─────────────┐
│ Caddy │ :80/:443
└──────┬──────┘
┌────────────┼────────────┬────────────┐
▼ ▼ ▼ ▼
/api/* /wallet/* /docs/* /*
┌─────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ xe-node │ │ Static │ │ Static │ │ Static │
│ :8080 │ │ wallet/ │ │ docs/ │ │ explorer/│
└─────────┘ └──────────┘ └──────────┘ └──────────┘ Bootstrap Node Setup
Ubuntu 24.04 with Caddy, Node.js 22, pm2, QEMU, Lima. The setup-node.sh script automates installation.
- Install Caddy (disable systemd, managed by pm2)
- Install Node.js 22 + pm2
- Install QEMU + Lima 1.0.6
- Create
xeservice user with KVM access - Create directories at
/opt/xe/
Directory Layout
/opt/xe/deploy/.env, ecosystem.config.js
/opt/xe/web/explorer/, wallet/, docs/
/etc/caddy/Caddyfile
/usr/local/bin/xe-node
/var/lib/xe-node/badger/, host.key, node.key, lima/, images/ Data Directory
| Path | Content |
|---|---|
badger/ | BadgerDB database |
host.key | libp2p identity |
node.key | Node account key |
ssh_host_key | SSH gateway host key |
lima/ | Lima VM state |
lima-templates/ | Lima YAML templates |
images/ | VM base images |
Provider Node Setup
Bare-metal provider using systemd instead of pm2. No Caddy or web interfaces needed.
- Requirements: Ubuntu 24.04,
/dev/kvm, QEMU, Lima 1.0.6 - Advertise 60–70% of physical resources
Bootstrap Peers
/ip4/45.77.226.208/tcp/9000/p2p/12D3KooWSm1c8hj3EfnBFNXSW8ELcFN2fxqigDn5FTeQwSVoa4LC
/ip4/192.248.176.245/tcp/9000/p2p/12D3KooWJgnFGZZ5y8zKJ64yV9hT8WqctCnWXvbzcNiowoRzEr9w
/ip4/144.202.4.117/tcp/9000/p2p/12D3KooWDBc6s7pPW8jhix5LsG9wRgzuGN1Ur8zcbE2T94aJSnsD | Node | Location | IP |
|---|---|---|
| ldn | London | 45.77.226.208 |
| ffm | Frankfurt | 192.248.176.245 |
| nyc | New York | 144.202.4.117 |
Current Providers
| Host | vCPUs | Memory | Disk |
|---|---|---|---|
| bm1 (Frankfurt) | 4 | 8 GB | 50 GB |
| bm2 (London) | 8 | 16 GB | 100 GB |
CI/CD Pipeline
Push to master → Build (per repo) → Deploy (parallel to 3 hosts)
core: go build → scp binary → pm2 restart
explorer: npm build → rsync → /opt/xe/web/explorer/
wallet: npm build → rsync → /opt/xe/web/wallet/
docs: mkdocs build → rsync → /opt/xe/web/docs/