The ‘best’ way depends on your knowledge and comfort with various technologies, willingness and ability to learn and debug new things, how much DevOps experience you have, what are the goals - quick setup vs flexibility, scalability vs ease of use etc.
You can :-
- setup a quick server on DigitalOcean with mup.
- manual setup with node/pm2 on Ubuntu.
- move to AWS (or other cloud) with multiple EC2 instances, then add a load balancer (nginx/ALB) in front, then do SSL termination
- setup autoscaling with Beanstalk
- start using containers and move to ECS
- remove the manual management and move to Fargate
This is just for the actual Meteor app Of course you can decide to also pay a Meteor hosting service like Galaxy.
There are other components like Mongo, Redis-oplog, Kadira/APM, or any other microservices you might want to use. Each of these has multiple options, self host vs paid, combining servers, going serverless (Lambda) etc.
Most of these are not unique to Meteor, which in the end is just a node app.