Deploy
Provisions a DO droplet + reserved IP + firewall + monitoring, builds the Next.js image locally on the droplet, runs it behind Caddy.
Deploy from scratch
cd terraform
infisical login
export INFISICAL_PROJECT_ID=<aibook-fun-project-id>
./itofu.sh init && ./itofu.sh plan && ./itofu.sh apply
./itofu.sh output -raw droplet_ip
# add Cloudflare A record: aibook.fun → <that-ip>
cd ..
ansible-playbook -i 'root@<that-ip>,' ansible/deploy.yml
Structure
terraform/— droplet + IP + firewall + monitoringdocker/— Dockerfile + compose + Caddyansible/— droplet convergence