What's the best practice for upgrading a versioned Craft site? It's thrilling to click The Button and watch Craft update itself. I take advantage of multi-site configurations with every deploy, and my practice thus far is to...


Upgrade Craft in production.
Commit production file system changes via git.
Choose Settings → Backup Database and download the backup file.
Load the remote changes to my local environment via git.
Clear out and locally import the .sql backup I downloaded in step #3.


I specifically update in production because I like thrills, and because I had previously done the opposite (upgrade locally, push live) and ran into problems.

This has been working for me pretty reliably and Craft upgrades always go smoothly, but I doubt that system updates on the production server are the best idea.

Is there a better way?
I know your method works flawlessly, but it scares the crap out of me.

Luckily Craft's update setup is magical.

What I do is this.


Make sure my repo is clear of unstaged files, just so the update can be in a commit all by itself.
Run the update on my local dev environment (with a local database) (Test)
Commit the updated files and push
Backup live database just in case
Deploy the files on live. (I use Beanstalk, so it uploads the files for me, but you can also do a git pull if that's your method of deployment.) Craft detects that the database version doesn't match the files and puts up a maintenance message.
Visit /admin and click the update button
Drink.