This video is available to students only

Deployment

Now that we have a functional web application our next step is to get it live on the internet. Earlier in the book, we covered the steps involved to deploy our simple API application to Heroku, but Yumroad is a bit more complicated in that it has a database, has job workers for delayed jobs, uses a Redis cache, and needs SSL.

In order for our application to be accesible to end users, we need to configure each of the pieces of our infrastructure.

Deployment Architecture
Deployment Architecture

We will need to configure each of these pieces in order to get our application up and running.

Which setup should I use?

When you are starting off, the best choice is to choose an infrastructure design that will require the least mental overhead and will allow you to focus on your application. For most developers, the choice when you are starting off would be to platform as a service provider.

If you're a new developer and haven't had much infrastructure experience, you are certainly better off using a PaaS (platform as a service) provider like Heroku. Platforms like Heroku make it easy to setup servers, databases, and scale up your application. You will not need to worry as much about how to deploy new versions or if the underlying servers go down. The free plans are often enough to test your applications and run lightweight applications. When you are ready, you can pay for more resources as you go to improve performance.

If you are working on a much larger project, you may find that Heroku is not as economical if your application needs a lot of resources or is performance sensitive. In that case, you should look at manually configuring servers. If you do that, you will need to manage the servers, the configuration, and how you will have to think about getting new versions of the code updated on the servers.

Heroku

Setup

Create an account on Heroku and download the Heroku CLI if you haven't already done that.

To install the Heroku command line interface, you can go to the download page available at https://devcenter.heroku.com/articles/heroku-cli and walk through the installer for your operating system.

You will also need to have "git", a version tracking software tool, installed. In Ubuntu (or Ubuntu under Windows Subsytem for Link) you can install it with sudo apt-get install git. On a Mac, you can use homebrew to install git by running brew install git in your terminal.

Our first step is to create an application on Heroku and set up our folder to point to that app. In your Heroku dashboard, create a new application and specify a name. In our example, we'll use yumroad-prod, but you can use any available name.

Heroku Create Application Page
Heroku Create Application Page

Now that we have an application, we'll also want to configure some of the other infrastructure pieces like our database and Redis cache. In the resources tab of the Heroku dashboard for our application, find the add ons section and add the "Heroku Postgres" add on. You can use the free hobby plan for now.

Heroku Database Page
Heroku Database Page

Why Postgres? It's a personal preference. Any good relational database supported by SQLAlchemy like MySQL will work.

Once you have installed Heroku Postgres, you can tweak settings and view credentials if you need them on the datastore dasbhoard, which you can access through the resources tab.

Heroku Database Details
Heroku Database Details

Next we'll repeat the process for Redis by installing "Heroku Redis"

Heroku Redis
Heroku Redis