Set three values once, run each command block in order, then paste the public URL into Archimedes (or AiMANAC Connections if you use HELM).
LLM: copy panel 11 into your assistant. AiMANAC: paste the same into HELM after you have AiMANAC installed. Never paste generated passwords into chat.
# --- edit these three lines --- export VPS_IP=203.0.113.10 export ARCH_HOST=archimedes.yourdomain.com export DEPLOY_DIR="$HOME/archimedes-deploy" # ----------------------------- mkdir -p "$DEPLOY_DIR" cd "$DEPLOY_DIR"
Create an Ubuntu VPS in your provider UI (8 GB RAM min, 16 GB recommended), attach your SSH key, open ports 22/80/443, then set VPS_IP.
- DNS
A record
$ARCH_HOST→$VPS_IP, TTL 300. Cloudflare: proxy off. - 03–07
Command blocks below — bootstrap, secrets, patch hostname, source, deploy.
- 09
Verify curls — gate before the phone.
- 10
Paste
https://$ARCH_HOSTinto the app.
Copy block 03
cd "$DEPLOY_DIR" curl -fsSLO "https://aimanac.llmtech.net/apps/archimedes/setup/vps/cloud-init.sh" ssh root@"$VPS_IP" 'bash -s' < cloud-init.sh
Safe to re-run. Installs Docker, Caddy, firewall (22/80/443), and /opt/archimedes/ layout.
Copy block 04
cd "$DEPLOY_DIR" mkdir -p secrets openssl rand -hex 32 > secrets/postgres_password.txt JWT=$(openssl rand -hex 32) JWT_REFRESH=$(openssl rand -hex 32) cat > .env <
Copy block 05
cd "$DEPLOY_DIR" curl -fsSLO "https://aimanac.llmtech.net/apps/archimedes/setup/vps/docker-compose.yml" curl -fsSLO "https://aimanac.llmtech.net/apps/archimedes/setup/vps/Caddyfile" sed -i.bak "s/archimedes.example.com/$ARCH_HOST/g" Caddyfile docker-compose.yml grep -E "BACKEND_PUBLIC_URL|$ARCH_HOST" docker-compose.yml Caddyfile
On macOS without GNU sed, edit both files manually: hostname must match $ARCH_HOST everywhere.
The server ships as a Docker image on GitHub Container Registry. You pull it; you do not clone archimedes-server from GitHub. Pin the tag from For AI assistants or this page’s release note.
Copy block 06
export ARCH_IMAGE_TAG=rust-cutover-20260520-ghcr-pipeline # After compose is on the VPS: ssh root@"$VPS_IP" "export ARCH_IMAGE_TAG=$ARCH_IMAGE_TAG && docker pull ghcr.io/everplay-tech/archimedes-server:\$ARCH_IMAGE_TAG"
Copy block 07
cd "$DEPLOY_DIR" scp docker-compose.yml root@"$VPS_IP":/opt/archimedes/ scp .env root@"$VPS_IP":/opt/archimedes/ scp secrets/postgres_password.txt root@"$VPS_IP":/opt/archimedes/secrets/ scp Caddyfile root@"$VPS_IP":/etc/caddy/Caddyfile ssh root@"$VPS_IP" "export ARCH_IMAGE_TAG=$ARCH_IMAGE_TAG && chmod 700 /opt/archimedes/secrets && systemctl reload caddy && cd /opt/archimedes && docker compose pull && docker compose up -d"
Copy block 08
dig +short "$ARCH_HOST" # Expect: $VPS_IP
Copy block 09
export ARCH_URL="https://$ARCH_HOST" curl -fsSI "$ARCH_URL/health" | head -1 curl -fsSI "$ARCH_URL/ready" | head -1 curl -fsSI -H "Connection: Upgrade" -H "Upgrade: websocket" \ -H "Sec-WebSocket-Version: 13" \ -H "Sec-WebSocket-Key: $(openssl rand -base64 16)" \ "$ARCH_URL/ihp-ws" | head -1 ssh root@"$VPS_IP" 'docker compose -f /opt/archimedes/docker-compose.yml ps'
/health and /ready → HTTP/2 200. WebSocket route → 101 or 426. Containers → server + postgres Up.
Your backend URL (copy this line)
https://$ARCH_HOST
- Archimedes app
First boot → paste
https://$ARCH_HOST(no trailing path) → Sign in with Apple. - AiMANAC + HELM
Settings → Connections → Add Backend with the same URL once you orchestrate from AiMANAC.
Select everything in the box below and paste into ChatGPT, Claude, or HELM. The assistant should run blocks 01–09 in order on your machine; you type secrets locally only.
I am deploying Archimedes on my own VPS. Help me run these steps on my laptop (macOS or Linux). I will set VPS_IP, ARCH_HOST, and DEPLOY_DIR myself and will NOT paste JWT or database passwords into this chat. 1) export VPS_IP=<my server IPv4> export ARCH_HOST=archimedes.<my-domain> export DEPLOY_DIR=$HOME/archimedes-deploy mkdir -p "$DEPLOY_DIR" && cd "$DEPLOY_DIR" 2) DNS: A record ARCH_HOST → VPS_IP, TTL 300. Cloudflare proxy OFF. 3) curl cloud-init from https://aimanac.llmtech.net/apps/archimedes/setup/vps/cloud-init.sh ssh root@$VPS_IP 'bash -s' < cloud-init.sh 4) In DEPLOY_DIR: openssl rand for postgres_password.txt; build .env with POSTGRES_PASSWORD, JWT_SECRET, JWT_REFRESH_SECRET, RUST_LOG=info; chmod 600. 5) curl docker-compose.yml and Caddyfile from the same VPS setup URL; replace archimedes.example.com with ARCH_HOST in both files. 6) export ARCH_IMAGE_TAG=rust-cutover-20260520-ghcr-pipeline (or tag from setup/llm spec). docker pull ghcr.io/everplay-tech/archimedes-server:$ARCH_IMAGE_TAG on the VPS. No git clone. 7) scp compose, .env, postgres secret, Caddyfile; ssh reload caddy; cd /opt/archimedes && docker compose pull && docker compose up -d (no --build). 8) dig +short ARCH_HOST must return VPS_IP. 9) Verify: curl -I https://ARCH_HOST/health and /ready (200); WebSocket probe on /ihp-ws; docker compose ps shows server and postgres Up. 10) I will paste https://ARCH_HOST into Archimedes iOS FirstBoot. Canonical page: https://aimanac.llmtech.net/apps/archimedes/setup/vps/ Ask me for VPS_IP and ARCH_HOST when you need them; never ask me to paste .env.
Logs
ssh root@"$VPS_IP" 'cd /opt/archimedes && docker compose logs -f --tail=80 archimedes-server'
Restart app
ssh root@"$VPS_IP" 'cd /opt/archimedes && docker compose restart archimedes-server'
- /ready 503 xvfb_not_running: container must run entrypoint before binary — check image start command.
- TLS stuck: port 80 open; DNS points at VPS; Cloudflare proxy off until cert issued.
- Why not Railway? Archimedes runs a headless desktop + browser; many PaaS fair-use rules discourage that workload. HTTP-only siblings (BROILR, MailSloth, base AiMANAC API) may use simpler hosted paths.