Target: Hetzner CX21 · Ubuntu 22.04 LTS · Native binary + systemd · Caddy TLS
Prerequisites:
- Hetzner VPS provisioned
- Domain A record pointing to VPS IP
- Repo pushed with
scripts/deploy.sh,scripts/genesis.service,scripts/Caddyfile,scripts/firewall.sh,scripts/validate.sh
From your local machine:
nslookup YOUR_DOMAINMust resolve to Hetzner IP.
git status
git pushEnsure all deployment scripts are committed and pushed.
ssh root@YOUR_IPapt update && apt upgrade -y
adduser genesis
usermod -aG sudo genesis
su - genesisgit clone YOUR_REPO_URL ~/genesis-protocol
cd ~/genesis-protocol
bash scripts/deploy.sh YOUR_DOMAINdeploy.sh handles: Rust install, release build, Caddy install + config, systemd service, firewall, endpoint verification.
No manual steps.
journalctl -u genesis -fExpected output:
Genesis Gateway listening on 0.0.0.0:3000
Epoch tick epoch=...
Verify endpoints:
curl http://localhost:3000/status
curl https://YOUR_DOMAIN/statusBoth must return JSON with no null fields.
GENESIS_DOMAIN=YOUR_DOMAIN GENESIS_PROTO=https bash scripts/validate.sh hour0Confirm:
- TLS valid
- Shield active
- No null telemetry
- Rate limiter responding
- No memory anomalies
nano .envSet:
MOLTBOOK_API_KEY=moltbook_sk_your_key_here
MOLTBOOK_SUBMOLT=general
MOLTBOT_POST_INTERVAL=1800
sudo systemctl restart genesis
journalctl -u genesis -fExpected:
Heartbeat posted total_sent=1
Moltbot adapter alive snapshots=60 heartbeats=1 milestones=0
No retry storms. No 401s. No timeouts.
- Service stable
- TLS stable
- Firewall intact
- First heartbeat confirmed
- Adapter alive logs visible
- Run:
bash scripts/validate.sh hour1
- Memory steady, no CPU spikes
ps -o rss,vsz,pid -p $(pidof genesis-protocol)
sudo lsof -p $(pidof genesis-protocol) | wc -l- Run:
bash scripts/validate.sh hour2
GENESIS_DOMAIN=YOUR_DOMAIN GENESIS_PROTO=https bash scripts/validate.sh stressGENESIS_DOMAIN=YOUR_DOMAIN GENESIS_PROTO=https bash scripts/validate.sh hour5If clean → public announcement allowed.
sudo apt install fail2ban -y
sudo systemctl enable fail2banOptional:
- Add Cloudflare proxy
- Lock SSH to key-only auth (
PasswordAuthentication noin/etc/ssh/sshd_config) - Reduce heartbeat interval from 300s to 60s
# Stop the organism
sudo systemctl stop genesis
# Restart
sudo systemctl restart genesis
# Check status
sudo systemctl status genesis
# Last 100 log lines
journalctl -u genesis -n 100 --no-pager
# Memory/CPU snapshot
ps -o rss,vsz,%cpu,%mem,pid -p $(pidof genesis-protocol)
# Open file descriptors
sudo lsof -p $(pidof genesis-protocol) | wc -lIf adapter alive logs continue but heartbeats_sent stops incrementing:
Moltbook is returning non-success responses. Check:
journalctl -u genesis --since "5 minutes ago" | grep -i "heartbeat\|error\|retry"No improvisation. No feature creep. No mid-flight architecture changes. Just ignition.