Part 1, Chapter 1

In this first part, you'll learn how to quickly spin up a reproducible development environment with Docker to create a RESTful API powered by Python, Postgres, and the Flask web framework. After the app is up and running locally, you'll learn how to deploy it to an Amazon EC2 instance.

flask tdd logo


This is not a beginner course. It's designed for the advanced-beginner—someone with at least six months of web development experience. Before beginning, you should have some familiarity with the following topics. Refer to these resources for more info:

Topic Resource
Docker Get started with Docker
Docker Compose Get started with Docker Compose
Docker Machine Docker Machine Overview
Flask Flaskr TDD

Learning Objectives

By the end of this part, you will be able to:

  1. Develop a RESTful API with Flask and Python
  2. Practice Test-Driven Development
  3. Configure and run services locally with Docker
  4. Utilize volumes to mount your code into a Docker container
  5. Run unit and integration tests inside a Docker container
  6. Enable services running in different containers to talk to one another
  7. Work with Python and Flask running inside a Docker container
  8. Run both Nginx and Gunicorn in front of Flask
  9. Deploy Flask, Nginx, Gunicorn, and Postgres to an Amazon EC2 instance


Final app:

final app

Check out the live app, running on a cluster of EC2 instances:

You can also test out the following endpoints:

Endpoint HTTP Method CRUD Method Result
/users GET READ get all users
/users/:id GET READ get single user
/users POST CREATE add a user
/users/ping GET READ sanity check

The /users POST endpoint is restricted as of part 3.

Essentially, the app is running in three containers—Flask, Postgres, and Nginx. At the end of this first part, you will have the above app completed and deployed. We'll add authentication and a number of other services in the subsequent parts.

Finished code for part 1:


You will use the following dependencies in part 1:

  1. Python v3.7.2
  2. Flask v1.0.2
  3. Flask-RESTful v0.3.7
  4. Docker v18.09.2
  5. Docker Compose v1.23.2
  6. Docker Machine v0.16.1
  7. Docker Compose file v3.7
  8. Postgres v11.2
  9. Flask-SQLAlchemy v2.3.2
  10. psycopg2 v2.7.7
  11. Flask-Testing v0.7.1
  12. Gunicorn v19.9.0
  13. Nginx v1.15.9
  14. Bulma 0.7.4

How long does the course take to complete?

Chapters can take anywhere from a few hours to an entire day. Give yourself a large block of time to complete a chapter, especially the chapters in parts 5, 6, and 7—they are the most difficult.

From a reader:

"I can say that when I sit down with a big block of time, I can get through a complete chapter in about half a day. Where I would get tripped up was generally on typos and misconfiguration on AWS. This is because I manually typed everything and I feel like I learned much more in depth that way."

Mark as Completed