REPO= Set up Ruby on Rails on this VM by following the exe.dev recipe at https://exe.dev/deploy/rails.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 Rails app Ask me for any that still say before you need them. The recipe's example VM name is my-rails. This VM's name is the output of `hostname`: use it wherever the recipe writes my-rails. 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 app from GitHub (REPO), or a new Rails 8 app with a Notes scaffold, in production as `app.service`, with Thruster on port 8000 in front of Puma on localhost, enabled to come back after a reboot. - A bare repository at `~/app.git` whose pre-receive hook deploys every push to main (bundle install, assets:precompile, a backup, db:prepare, restart, health check); a failed deploy rejects the push and the running version stays. - SQLite databases and uploads in `~/data`, outside the code; settings and secrets (with `RAILS_MASTER_KEY` for a new app) in `~/app.env`, mode 600. - For a new app, `config.assume_ssl` and `config.force_ssl` on, so forms, cookies and redirects work behind exe.dev's HTTPS. - A nightly backup timer, and a backup in `~/backups` unpacked in a scratch directory whose main database passes an integrity check. Read the whole recipe, including the closed details, and follow "Install by hand" in order, skipping VM creation. The walkthrough above it is for the owner afterwards. Ask for REPO first if it says . For REPO=new, follow "Start a new app" exactly. For a repository, follow "Bring your app": adapt ~/app.env, apt packages and app.service to the app as its checklist says, but never commit to the owner's code, in GitHub or in ~/app.git, so their first push fast-forwards. If a private repository can't be cloned, give the owner the `integrations add github` command with this VM's name and wait for them. Keep the deploy hook and backup script as written, since the page documents how they behave; if one looks wrong, say so at the end. Don't reboot, don't make the VM public, and don't run the Restore steps; test the backup in a scratch directory as written. Finish with the app's URL; only the one git command from `after` that fits (`git clone -o exe` for REPO=new, `git remote add exe` for a repository); what you changed for their app; and, if it has a config/credentials.yml.enc, the command from "Settings and secrets" that sends its master key. 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-rails.exe.xyz:app.git # if you started fresh git remote add exe my-rails.exe.xyz:app.git # if you brought your app: in your checkout