Does the cron using Drush must be setup locally or on the server for the production website
TL;DR You should add it on the server!

Whereas it's possible to add it locally and use a remote alias to run it on the server it would be unreliable (requires your local to be online 24/7) and inefficient.

That said, you can also add "local" aliases on your server for convenience, to avoid adding the --root and --uri flags to the command in your crontab.

You can add any number of Drush aliases anywhere you want; so on your local machine you can have a "foo.local", "foo.staging" &amp; "foo.prod" aliases for your site. And on your staging and production servers, you can simply add "foo.staging" and "foo.prod" so that you can access all of your environments in a cohesive and consistent manner.

The advantage is that if you define an alias "foo.prod" on the production server, you can replace your crontab command with this:
/usr/local/drush/drush @foo.prod --quiet cron

It's customary to have the same aliases set up across all servers for that very purpose.