title: "TICKET_050: Hetzner Infrastructure Prep — Swap, tmux, Node.js, Docker Compose"
type: ticket
subtype: execution
purpose: "Prepare Hetzner CPX32 for Bus MCP Server deployment: approve swap, install tmux, verify Node.js 20+, update Docker Compose for new services."
Get Hetzner CPX32 ready for the Bus MCP Server stack (Postgres, Bus, Paperclip, Caddy).
# In the existing terminal on Hetzner, hit 1 (Yes) to approve swap
# If terminal is gone, re-run:
ssh root@89.167.96.154
fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile none swap sw 0 0' >> /etc/fstab
free -h # verify swap shows 4G
apt-get update && apt-get install -y tmux
# Create persistent session
tmux new-session -d -s struxio
node --version # need 20+
npm --version
# If not installed:
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt-get install -y nodejs
docker --version
docker compose version
# Both should already be installed. If not:
apt-get install -y docker.io docker-compose-plugin
mkdir -p /opt/struxio/bus
mkdir -p /opt/struxio/paperclip
mkdir -p /opt/struxio/backups
mkdir -p /var/lib/struxio-bus/spool
# Check nothing is using our target ports
ss -tlnp | grep -E '(8088|3100|80|443)'
# Port 80/443: should be free (Caddy will take these)
# Port 8088: should be free (Bus)
# Port 3100: should be free (Paperclip)
# If occupied, identify and resolve
docker ps
curl -s http://localhost:8010/health || echo "BEP engine check"
# Ensure existing DEVXIO services are unaffected
free -h shows 4GB swaptmux ls worksnode --version returns v20+docker compose version worksNo destructive changes. tmux and directories can be removed if needed.
STRUXIO.ai // Confidential & Proprietary // © 2026