Ga naar hoofdinhoud

Hetzner Deployment

SpacetimeDB deployen op een Hetzner VPS.

Server Specificaties

Aanbevolen Setup

TiervCPURAMStorageSpelers
Development24GB40GB1-50
Production48GB80GB50-500
Scale816GB160GB500+

Hetzner Cloud Console

  1. Ga naar console.hetzner.cloud
  2. Create Server
  3. Kies CPX21 (2 vCPU, 4GB) voor start
  4. Image: Ubuntu 22.04
  5. Location: Falkenstein (Duitsland, dichtbij)
  6. 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)

  1. Installeer Uptime Kuma
  2. Monitor WebSocket endpoint
  3. 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)

  1. Snapshot huidige server in Hetzner console
  2. Upgrade naar groter type
  3. Restore snapshot

Horizontaal (Multiple Instances)

SpacetimeDB ondersteunt clustering - zie officiële docs.

Volgende