Hetzner Deployment
SpacetimeDB deployen op een Hetzner VPS.
Server Specificaties
Aanbevolen Setup
| Tier | vCPU | RAM | Storage | Spelers |
|---|---|---|---|---|
| Development | 2 | 4GB | 40GB | 1-50 |
| Production | 4 | 8GB | 80GB | 50-500 |
| Scale | 8 | 16GB | 160GB | 500+ |
Hetzner Cloud Console
- Ga naar console.hetzner.cloud
- Create Server
- Kies CPX21 (2 vCPU, 4GB) voor start
- Image: Ubuntu 22.04
- Location: Falkenstein (Duitsland, dichtbij)
- SSH key toevoegen
Server Setup
SSH Verbinden
ssh root@your-server-ip
System Updates
apt update && apt upgrade -y
apt install -y curl git build-essential
Firewall
ufw allow 22/tcp # SSH
ufw allow 80/tcp # HTTP (voor health checks)
ufw allow 443/tcp # HTTPS
ufw allow 3000/tcp # SpacetimeDB WebSocket
ufw enable
Gebruiker Aanmaken
adduser spacetime
usermod -aG sudo spacetime
su - spacetime
SpacetimeDB Installeren
Als spacetime user
# Rust installeren
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
rustup target add wasm32-unknown-unknown
# SpacetimeDB CLI
curl -fsSL https://install.spacetimedb.com | bash
Module Deployen
Van lokale machine
# Build lokaal
cd server
spacetime build
# Upload naar server
scp target/wasm32-unknown-unknown/release/milenas_treehouse.wasm \
spacetime@your-server:/home/spacetime/
Op server
# Start server
spacetime start --listen-addr 0.0.0.0:3000 &
# Publish module
spacetime publish milenas-treehouse \
--path /home/spacetime/milenas_treehouse.wasm \
--clear-database
Systemd Service
Service bestand
sudo nano /etc/systemd/system/spacetimedb.service
[Unit]
Description=SpacetimeDB Server
After=network.target
[Service]
Type=simple
User=spacetime
WorkingDirectory=/home/spacetime
ExecStart=/home/spacetime/.spacetime/bin/spacetime start --listen-addr 0.0.0.0:3000
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Service beheren
# Activeren en starten
sudo systemctl daemon-reload
sudo systemctl enable spacetimedb
sudo systemctl start spacetimedb
# Status checken
sudo systemctl status spacetimedb
# Logs
sudo journalctl -u spacetimedb -f
Nginx Reverse Proxy (Optioneel)
Voor SSL en betere WebSocket handling:
Installeren
sudo apt install nginx certbot python3-certbot-nginx
Configuratie
sudo nano /etc/nginx/sites-available/spacetime
server {
server_name game.yourdomain.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 86400;
}
}
SSL Certificaat
sudo ln -s /etc/nginx/sites-available/spacetime /etc/nginx/sites-enabled/
sudo certbot --nginx -d game.yourdomain.com
sudo systemctl restart nginx
Deployment Script
deploy.sh (lokaal)
#!/bin/bash
set -e
SERVER="spacetime@your-server-ip"
MODULE="milenas-treehouse"
echo "Building..."
cd server
spacetime build
echo "Uploading..."
scp target/wasm32-unknown-unknown/release/milenas_treehouse.wasm \
$SERVER:/home/spacetime/
echo "Publishing..."
ssh $SERVER "spacetime publish $MODULE --path /home/spacetime/milenas_treehouse.wasm"
echo "Done!"
Gebruik
chmod +x deploy.sh
./deploy.sh
Monitoring
Basic Health Check
# Check of server draait
curl -s http://your-server:3000/health || echo "Server down!"
Uptime Kuma (Self-hosted)
- Installeer Uptime Kuma
- Monitor WebSocket endpoint
- Stel alerts in via Discord/Email
Log Monitoring
# Live logs
sudo journalctl -u spacetimedb -f
# Errors only
sudo journalctl -u spacetimedb -p err
Backups
Database Export
# Exporteer alle data
spacetime sql milenas-treehouse "SELECT * FROM player" > backup_players.json
spacetime sql milenas-treehouse "SELECT * FROM player_container" > backup_containers.json
# etc...
Automated Backup Script
#!/bin/bash
# /home/spacetime/backup.sh
BACKUP_DIR="/home/spacetime/backups/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
tables=("player" "player_container" "container_item" "player_resource")
for table in "${tables[@]}"; do
spacetime sql milenas-treehouse "SELECT * FROM $table" > "$BACKUP_DIR/$table.json"
done
# Compress
tar -czf "$BACKUP_DIR.tar.gz" "$BACKUP_DIR"
rm -rf "$BACKUP_DIR"
# Keep only last 7 days
find /home/spacetime/backups -name "*.tar.gz" -mtime +7 -delete
Cron Job
crontab -e
0 3 * * * /home/spacetime/backup.sh
Scaling
Verticaal (Bigger Server)
- Snapshot huidige server in Hetzner console
- Upgrade naar groter type
- Restore snapshot
Horizontaal (Multiple Instances)
SpacetimeDB ondersteunt clustering - zie officiële docs.