REPO= Set up Docker Compose on this VM by following the exe.dev recipe at https://exe.dev/deploy/docker-compose.md from top to bottom. The values at the top of this message are mine: - REPO: the GitHub repository to deploy, as owner/name or a URL, or `new` to start a fresh Compose app (a small web app and PostgreSQL) Ask me for any that still say before you need them. The recipe's example VM name is my-docker-compose. This VM's name is the output of `hostname`: use it wherever the recipe writes my-docker-compose. Skip the step that creates the VM; you are on it. You are done when all of these are true. Check each one yourself: - Your Compose app, built from your repo (or a fresh web app with PostgreSQL), served on port 8000. - git push to deploy; a push that fails to build or start is rejected, and the running version stays up. - Docker enabled at boot and a restart policy on every long-running service, so the app survives a reboot. - Nightly backups (database dumps, ~/data and settings), with a restore tested. Read the whole recipe, including the closed details, and follow "Install by hand" in order, skipping VM creation: set up Docker, make the deploy repository, then "Start fresh" if REPO is new or "Bring your repo" otherwise, then backups. The walkthrough above it is for the owner afterwards. Don't run the later Restore or Update steps, don't reboot, and leave sharing private. With a repo, never change it on GitHub: VM-only changes go in ~/app.override.yaml and settings in ~/app.env. Generate passwords and keys; ask the owner for values only they have, like third-party API keys. If the clone fails, give the owner the GitHub integration command from "Bring your repo" with this VM's name and the repo, and wait. Write app-backup.sh for the databases the stack really runs, and test a restore into a scratch database. To check a failing push, push a commit that breaks the build from a scratch clone: it must be rejected. Remove your scratch clones and test scripts when done. Finish with https://.exe.xyz/, any other ports the app publishes, and only the one git command from "Deploy with git push" that fits: `git clone -o exe` for REPO=new, `git remote add exe` for a repository. Finish with the URLs I should open and these commands, which only I can run, from my own computer (with this VM's name in them): git clone -o exe my-docker-compose.exe.xyz:app.git my-app # if you started fresh git remote add exe my-docker-compose.exe.xyz:app.git # or, in your own repo's checkout