To simplify development and deployment, we decided to use Docker to build our application images, Docker Compose to orchestrate our production containers, and Traefik to bind everything together.
Docker is a great tool since it allows us to make our backend app platform-agnostic. This allows us to migrate our infrastructure from one platform to another without much effort.
Docker Compose lets us define our services and how they connect to each other easily. The ability to have an outline of our services and have our containers managed automatically greatly benefits us and removes lots of manual effort on our developers' part.
While we initially used Nginx to route our traffic, we were tired of having to manually set up all of our configuration. So we decided to move to Traefik so that our containers are automatically routed and load-balanced, without any additional configuration. If we do need additional configuration, we are able to easily add the configuration in our Docker Compose files, rather than in some weird config file in /etc/


