# Runbook: First Production Deployment Prerequisites: Proxmox installed (`infra/proxmox/README.md`), VMs created (`infra/terraform/`), DNS pointed at rn-platform-01's public IP. ```bash # 1. Generate Docker TLS material (offline, on your own machine — never on either VM) cd infra/scripts/docker-tls ./generate-docker-tls.sh --out-dir ./out --lab-host-ip --lab-host-dns rn-lab-host-01.internal ./verify-docker-tls.sh ./out # 2. Fill in real values cd ../../ansible cp group_vars/production.vault.yml.template group_vars/production.vault.yml $EDITOR group_vars/production.vault.yml # real passwords/secrets — openssl rand -hex 32 etc. ansible-vault encrypt group_vars/production.vault.yml $EDITOR group_vars/production.yml # real IPs, domain, CIDRs $EDITOR inventory/production.ini # real IPs # 3. Deploy ROOTNODE_TLS_BUNDLE_DIR=../scripts/docker-tls/out \ ansible-playbook site.yml -i inventory/production.ini --ask-vault-pass # 4. Bootstrap the owner account (once, by a human) ssh rootnode-deploy@rn-platform-01 docker exec -it rootnode-platform-api-1 node bootstrap-owner.js you@example.com "Your Name" # (password comes from BOOTSTRAP_OWNER_PASSWORD in the environment, or the CLI prompt — see # platform/api/README.md) # 5. Verify ../../infra/scripts/production-smoke-test.sh ``` Then work through `docs/PRODUCTION_VALIDATION_CHECKLIST.md` in full before calling this done.