Deploy so that rolling back is boring
Deploying is easy. The property worth designing for is the other direction: can you undo it in a minute, without thinking?
One command, from a branch, every time
Push to a branch, CI runs, the build deploys. No manual steps, no "I also copied that file", no step that exists only in your memory.
The reason is not elegance. A deploy with a manual step is a deploy you cannot reproduce, which means an outage at an inconvenient moment turns into archaeology. Everything about production discipline is about removing decisions from moments when you are least able to make them.
Rollback is the feature
Ask one question of your setup: if this release is bad, how do I get back to the previous one, and how long does it take?
If the answer involves reverting a commit and waiting for a full build, that is minutes of a broken tool. If it is selecting the previous deployment, it is seconds. Most hosts give you the second for free and most people never check which they have — so check it now, while nothing is wrong.
Then do it once on purpose. A rollback you have performed is a rollback you will perform calmly.
The database is the part that does not roll back
Code goes backwards easily. A migration that dropped a column does not.
So: migrations are additive, deployed before the code that needs them, and destructive changes wait until the new code has been running a while. Add the column, ship code that writes both, ship code that reads the new one, and only then remove the old — the same shape as the persistence migration in course 4, for the same reason.
A schema change and a code change in one deploy is the thing that makes a rollback impossible exactly when you need it.
Environments, honestly
For a personal tool, production and your laptop is a reasonable answer, and pretending otherwise adds ceremony without safety.
What matters is that the deployed thing is built from a committed state, not from whatever your working tree happened to contain. If you cannot say which commit is live, you cannot reason about a bug report — and for a personal tool the bug report comes from you, confused, six weeks later.
Try it now
Deploy, then roll back to the previous version, then roll forward. Time all three. Those three numbers tell you what an incident will actually cost you, and most people discover the answer during the incident instead.