Operate SIMS through the office jump host.
Everything routes through one machine that already holds the Simoldes VPN — no Horizon, no FortiClient on your own laptop. RDP in, connect the VPN, and you can deploy, view the frontend, and check health on the pilot.
Office VM · jump host
- Reach
procimo-office-linux/100.79.8.19- RDP
:3390- Login
procimo/Admin#03
Pilot VM · deployed SIMS
pocprocimo).- Reach
172.30.1.160(via VPN)- Login
procimo/*SP.pr0c1m0#- Auth
- office→pilot is passwordless (key)
Prerequisites & setup
Mark doneDo these once. After this, every session is just steps 1–4.
A. Install the Remote Desktop app
Microsoft renamed it Windows App (formerly Microsoft Remote Desktop).
Mac App Store → search “Windows App” → install. (The legacy “Microsoft Remote Desktop” also works.)
It’s built in — search “Remote Desktop Connection” (mstsc).
B. Add the office machine as a PC
In Windows App → + Add → Add PC:
- PC name:
procimo-office-linux:3390(or100.79.8.19:3390) - User account:
procimo/Admin#03 - Gateway: None — on first connect, accept the certificate (self-signed, expected).
C. Tailscale on the admin@procimo.com account
Tailscale is how you reach the office VM from anywhere. Install from tailscale.com/download, then make sure you’re on the procimo.com tailnet (ask Gabriel for an invite if not).
tailscale status | grep procimo-office-linux # if you're on the wrong account: tailscale switch admin@procimo.com
D. Install your SSH key on the office VM
So you don’t type the office password on every command. Run once (prompts for Admin#03):
ssh-copy-id procimo@100.79.8.19Connect the VPN
Mark doneThe VPN lives on the office VM and is connected interactively (SSO + 2FA) each session.
- RDP into the office VM: Windows App →
procimo-office-linux:3390(userprocimo, passAdmin#03). - Open FortiClient → REMOTE ACCESS → SAML Login (connection
VPN CNCs). - Firefox opens → log in with Simoldes SSO + your authenticator 2FA.
- Status goes to Connected.
Confirm it’s up (from your Mac, no RDP needed):
ssh -i ~/.ssh/<your-key> -o IdentitiesOnly=yes procimo@100.79.8.19 \ 'ip route | grep fctvpn && echo VPN_UP || echo VPN_DOWN'
Deploy packages to the pilot
Mark doneBuild the images on your Mac (amd64), then transfer through the office VM to the pilot.
1. Build on your Mac
docker build --platform linux/amd64 -t sims-backend ./sims-backend docker build --platform linux/amd64 -t sims-frontend ./sims-frontend docker save sims-backend | gzip > sims-backend.tar.gz docker save sims-frontend | gzip > sims-frontend.tar.gz
2. Transfer — one-shot Mac → pilot (relayed via the office VM)
scp -i ~/.ssh/<your-key> -o IdentitiesOnly=yes \
-o ProxyJump=procimo@100.79.8.19 \
sims-*.tar.gz procimo@172.30.1.160:~/If ProxyJump misbehaves, do it in two explicit hops:
# Mac -> office scp -i ~/.ssh/<your-key> -o IdentitiesOnly=yes sims-*.tar.gz procimo@100.79.8.19:~/ # office -> pilot (passwordless via office VM key) ssh -i ~/.ssh/<your-key> -o IdentitiesOnly=yes procimo@100.79.8.19 \ 'scp -i ~/.ssh/id_ed25519 -o IdentitiesOnly=yes ~/sims-*.tar.gz procimo@172.30.1.160:~/'
3. Load + restart on the pilot
# SSH to the pilot through the office VM: ssh -i ~/.ssh/<your-key> -o IdentitiesOnly=yes -J procimo@100.79.8.19 procimo@172.30.1.160 # On the pilot: docker load < sims-backend.tar.gz && docker load < sims-frontend.tar.gz cd /opt/sims/sims-backend docker compose stop backend front-end docker rm -f sims-api sims-frontend # remove old containers FIRST docker compose up -d backend front-end
- VM service names are
backend/front-end/ingestion(notapi/frontend). docker restartdoes not re-read.env→ alwaysrm -f+compose up -d.- Env (root-owned):
/opt/sims/sims-backend/.env. Compose:/opt/sims/sims-backend/docker-compose.yml. - Backend 500s with missing columns →
docker exec sims-api alembic upgrade head, then restart it.
View the running frontend
Mark doneOpen an SSH tunnel that forwards the pilot’s port 80 to a local port, through the office VM.
# Mac -> office VM -> pilot:80, exposed locally as http://localhost:8080 ssh -i ~/.ssh/<your-key> -o IdentitiesOnly=yes \ -L 8080:172.30.1.160:80 procimo@100.79.8.19
Leave that terminal open, then open http://localhost:8080 in your browser.
Frontend login: admin@simoldes.com / admin123
-L 8080:localhost:80 procimo@172.30.1.160 — the tunnel now goes via the office VM, so you don’t need the VPN on your own laptop. Forward :8000 the same way to hit the API directly.Check containers & health
Mark doneSSH to the pilot (ssh … -J procimo@100.79.8.19 procimo@172.30.1.160), then run any of these. No sudo needed.
Container status + health
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
Healthy looks like:
NAMES STATUS PORTS sims-frontend Up 5 weeks 0.0.0.0:80->80/tcp sims-api Up 5 weeks (healthy) 0.0.0.0:8000->8000/tcp sims-ingestion Up ... (healthy) sims-db Up 5 weeks (healthy) 5432/tcp sims-redis Up 5 weeks (healthy) 6379/tcp
Quick endpoint health
curl -s -o /dev/null -w "FE :80 = %{http_code}\n" http://localhost:80 curl -s -o /dev/null -w "API :8000 = %{http_code}\n" http://localhost:8000/health # both should be 200
Logs
docker logs --tail 100 sims-api docker logs -f sims-frontend # follow; Ctrl+C to stop docker logs sims-api 2>&1 | grep "progrow sync" # proGrow running?
Resources & database
docker stats # live CPU/mem; q to quit # Postgres (role sims_user, db sims_db — NOT -U postgres) docker exec sims-db psql -U sims_user -d sims_db -c "SELECT count(*) FROM machines;" # Restart a stuck service (env changes need rm -f + up -d instead) cd /opt/sims/sims-backend && docker compose restart front-end
Troubleshooting
| Symptom | Fix |
|---|---|
Can’t reach 100.79.8.19 at all | tailscale status must show procimo-office-linux. Wrong account → tailscale switch admin@procimo.com. |
RDP error 0x204 / 0x4 | Usually transient. Fully quit + reopen Windows App. If still failing, the office VM’s tailscale0 may be down — a watchdog auto-restarts it within ~30s; wait and retry. |
Pilot 172.30.1.160 unreachable | VPN not connected on the office VM. RDP in & reconnect FortiClient (step 1). Verify with ip route | grep fctvpn. |
scp/ssh to pilot asks for a password | You’re SSHing as yourself instead of via the office VM. Use -J procimo@100.79.8.19 — office→pilot uses the office VM’s installed key. |
| FortiClient GUI froze the desktop | Use SAML Login (external Firefox), not the embedded browser. It’s already configured for external browser. |
Frontend localhost:8080 blank / refused | Tunnel not up or VPN down. Ensure the VPN is connected on the office VM, then re-run the step 3 command. |
Credentials
| What | Value |
|---|---|
| Office VM | procimo / Admin#03 — RDP :3390, SSH over Tailscale 100.79.8.19 |
| Pilot VM | procimo / *SP.pr0c1m0# — only via VPN; office→pilot passwordless by key |
| FortiClient VPN | Procimo@simoldes.pt + Simoldes SSO + your 2FA (connection VPN CNCs) |
| SIMS frontend | admin@simoldes.com / admin123 |
Full credential docs: Linear “Accesses & Quick Links” + “Simoldes (legacy) VPN connection”. Deploy details: docs/deploy-runbook.md.
Escalation
While Joaquim is away: