Challenge Overview
Welcome to Vitruvius Create a Docker based Application challenge. As part of this challenge, we would like you to create a Dockerfile and a docker-compose file that can be used to create docker containers that have already deployed our client’s application code.
Project Overview
Our client helps individuals, teams and organizations to accelerate innovation. They have a web application that serves as a platform for individuals to grow in their personal development, for teams to build their collective capabilities and for organizations to drive large scale cultural change.
This project centers around the client’s web based application where we intend to enhance its design and architecture.
Challenge Overview
Our client has a web based application with the following features:
-
The site itself is hosted on heroku. It contains two processes - web and worker. Each process requires PostgreSQL 9.4+ and Redis 3.0+
-
The Backend API is a standard Rails 4.2 application and uses the grape gem to create API endpoints using the Grape DSL. It uses Redis as a cache.
-
Authentication is carried out using the devise gem
-
For background worker tasks, Sidekiq is used and required Redis to store tasks in a queue.
-
Front end is an Ember 1.13.10 application. Rails asset pipeline manages compilation of the app in Rails development and production environments. It’s mostly written in Javascript ES5 style with a couple of Coffeescript files.
-
The stylesheets are written in SCSS and get compiled as part of the Rails asset pipeline too.
-
The tests for the App are RSpec tests.
Their preferred and current stack is:
Hardware
-
Any easily installed / managed heroku addon. Preferably those that are mature and those that can be attached to more than one heroku app (a feature nicknamed by heroku as Shareable across apps).
-
They are not in a position of managing their own hardware infrastructure and thus rely on heroku.
Software
-
Rails 4.2
-
Ember 1.13.10
-
PostgreSQL 9.4
-
Redis 3.0
With the above information, you need to create a Dockerfile and a docker-compose.yml that can be used to deploy our clients application. The objective is to simplify the environment setup and dependency process.
More information
-
Preferred base image for the Dockerfile is Debian or Ubuntu. The application is written in Rails and is deployed on heroku.
-
You must use docker-compose to model the application with all required services. All required services (Postgres, Redis) should not be installed using one Dockerfile.
-
We should be able to setup the application in Linux, Windows and Mac Operating Systems.
-
Your deployment guide should include steps for all three OS’es mentioned above, if each platform requires a different setup.
-
You can assume that the end user has already installed Docker - it can be marked as a prerequisite. No Docker installation steps needed.
-
An acceptable submission is one where the end user simply has to use your Dockerfile and docker-compose.yml and run the container and have our client’s application running within the container. There should be no other intervention on the end users part.
The client application will be shared in the Challenge Forum. You need to register to see it. It contains a Dockerfile which you can use for reference.
Final Submission Guidelines
Check the More Information section above.