Database migrations on environments - in which env do I apply updates to Craft and Plugins?
You have options, but most people probably do the following...


Apply the updates locally.
Push those changes to the server.
Have Craft run any necessary migrations.


My deployment process ends with the following command being executed on the server:

composer install --no-interaction --prefer-dist --optimize-autoloader --no-dev


And in my composer.json file, it runs this:

  "scripts": {
    "post-install-cmd": [
      "./craft migrate/all"
    ],
    "post-update-cmd": [
      "./craft migrate/all"
    ]
  }


Between those two commands, it ensures that (A) all of the plugins and libraries specified in my composer file are identical on the production server, and (B) any necessary migrations are run after that.