Infrastructure as a Service – IaaS
The standard, and most straightforward option, is to use one of the basic multi-tenant server options from a cloud provider like AWS. One of AWS’s oldest and most popular products, EC2 allows developers to get a server up and running in no time. Once you figure out how to access it from your computer (via SSH or otherwise), you basically just have a terminal staring at you.
To turn that terminal into an app, you’ve got a lot of work to do: DNS, cloning your code, upgrades, networking with other servers (i.e. database), monitoring, redeploys, debugging manually via logs, and a lot of other fun stuff. We’ll go deeper into what this experience looks like in the next section.
Platform as a Service – PaaS
With PaaS, the experience is significantly simpler. Instead of setting up a server and installing + configuring everything on that server, you just point the service at your code (on GitHub or elsewhere) and it deploys the code for you. Any other configuration – DNS, networking, scaling, you name it – happens through the PaaS’s nice UI. You get automatic charts, system upgrades, searchable logs, and deploy history without any extra work. It’s quite lovely.
The OG PaaS – the one that made everyone realize that this was obviously the way to do things – was Heroku. They (sadly) were acquired by Salesforce in 2010, which has all but destroyed their business. And developers are sad about it. We’ll go deeper into the Heroku / PaaS experience in the next section.
Serverless
If you don’t want to deal with any servers whatsoever you can deploy your app as a series of separate functions on something like AWS Lambda. This is not a popular option yet for substantial apps, but you can read more about it here.