Supplejack Docker in the cloud - OurDigitalWorld/supplejack-ember GitHub Wiki

For our demonstration, and to further our own understanding of Supplejack, we built an instance of Supplejack-Docker in DigitalOcean. The process would likely be very similar for AWS EC2 (or another provider)

Architect it!

We utilized a two "droplet" (server) system for our project. One droplet acts as file host [SJ1], allowing multi-users access to the files like record_schema.rb, that would be regularly edited by multiple developers. The second droplet [SJ2] acts as the docker host (playing the role that Virtualbox does in the local deployment of Supplejack-Docker)

These droplets have the following specs:

  • SJ1 8GB/80GB Ubuntu LEMP
  • SJ2 8GB/80GB Ubuntu LEMP

Build it!

Build and secure an SJ1 server for yourself. Build only one server at this time. You can select the LEMP one-click app here to reduce your workload.

Follow until Step 4 in Supplejack-Docker in Linux. (We cloned the Supplejack-Docker repository into the home folder of a shared admin user account). This time after you move to the directory . . .

$ cd supplejack_docker

generate a DigitalOcean access token and create the new server by using the DigitalOcean driver instead of the VirtualBox one [you could use the AWS driver one too if that's how you roll]. Here's a list of drivers

docker-machine create --driver digitalocean --digitalocean-access-token=YOUR-ACCESS-TOKEN-HERE --digitalocean-size 8gb supplejack-docker

This will spin up a new droplet [SJ2] for you!

$ docker-machine start supplejack-docker
$ eval $(docker-machine env supplejack-docker)

ssh into your new server [SJ2] with

docker-machine ssh supplejack-docker [you run the docker commands from SJ1, and ssh into SJ2 to access the containers]

secure it like you did for SJ1, and install the remaining LEMP pieces.

Install it!

Exit SJ2 and continue with the install from SJ1. (Making sure you've made a copy of the file application.yml.docker, and renamed it application.yml you can also add the rack-cors configuration Step 4 of the Ember Client installation

$ docker-compose build

After this final command finishes (which may take several minutes), Supplejack Docker should be installed! Note: The build process involves fetching files from a number of different directories on the internet. If any of these processes fail, the build will be unsuccessful. If you encounter any error messages that start with E: Failed to fetch..., you will likely need to try building again until you don’t get any errors.

$ docker-compose up

This will take a bit, when it's complete open a new terminal, and from the app root on SJ1 run:

$ eval $(docker-machine env supplejack-docker)
$ docker-machine ls

You should see:

NAME                ACTIVE   DRIVER         STATE     URL                         SWARM   DOCKER    ERRORS
supplejack-docker   *        digitalocean   Running   tcp://138.197.71.234:2376           v1.13.1   

then run: $ docker ps

If Supplejack Docker was installed correctly, you should see something like this: [except, of course these containers have been running for a while)

CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                    NAMES
0914605735b1        supplejackdocker_api         "bundle exec rails..."   2 weeks ago         Up 2 weeks          0.0.0.0:3000->3000/tcp   api
be79d619354e        supplejackdocker_sidekiq     "bundle exec sidekiq"    2 weeks ago         Up 2 weeks                                   sidekiq
65d603f7e928        supplejackdocker_manager     "bundle exec rails..."   2 weeks ago         Up 10 days          0.0.0.0:3001->3000/tcp   manager
b6c106153e11        supplejackdocker_worker      "bundle exec rails..."   2 weeks ago         Up 2 weeks          0.0.0.0:3002->3000/tcp   worker
dccf3fbd77b1        supplejackdocker_resque      "bundle exec rake ..."   2 weeks ago         Up 2 weeks                                   resque
71787dd494ca        supplejackdocker_scheduler   "rake resque:sched..."   2 weeks ago         Up 2 weeks                                   scheduler
7446f4c07639        redis:2.8                    "docker-entrypoint..."   4 months ago        Up 2 weeks          0.0.0.0:6379->6379/tcp   redis
b15001d545d4        supplejackdocker_solr        "java -jar start.jar"    4 months ago        Up 2 weeks          0.0.0.0:8983->8983/tcp   solr
ad5d880180e3        mongo:2.6.12                 "/entrypoint.sh mo..."   4 months ago        Up 2 weeks          27017/tcp                supplejackdocker_mongodb_1

Configure it!

Make sure your servers and ports can communicate with one another, by adjusting the ufw as needed. For our SJ1 we have:

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
22                         ALLOW       Anywhere                  
2376                       ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)             
22 (v6)                    ALLOW       Anywhere (v6)             
2376 (v6)                  ALLOW       Anywhere (v6)   

and SJ2:

To                         Action      From
--                         ------      ----
2376                       ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
22                         ALLOW       Anywhere                  
443                        ALLOW       Anywhere                  
2376 (v6)                  ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)             
22 (v6)                    ALLOW       Anywhere (v6)             
443 (v6)                   ALLOW       Anywhere (v6)      

Once Supplejack Docker has been successfully installed, it needs to be seeded with default users before you can start working with it. Again, from the app root on SJ1 enter the following commands:

$ eval $(docker-machine env supplejack-docker)
$ docker-machine ls
$ docker exec -it manager rake docker:seed
$ docker exec -it worker rake docker:seed
$ docker exec -it api rake docker:seed

This will generate the following users and keys:

Manager:    
    email: [email protected]
    password: password
    authentication_token: 'managerkey'

Worker:
    authentication_token: 'workerkey'

API:
    api_key: 'apikey'

To access the components, you need to use your Docker machine’s host IP address:

$ echo $DOCKER_HOST
tcp://SJ1-IP-ADDRESS:2376

Use the appropriate ports to access each component [assuming you've allowed them in ufw]

api: http://SJ1-IP-ADDRESS:3000/records.json?api_key=apikey
manager: http://SJ1-IP-ADDRESS.100:3001
worker: http://SJ1-IP-ADDRESS:3002
sidekiq: http://SJ1-IP-ADDRESS:3002/sidekiq
solr: http://SJ1-IP-ADDRESS:8983/solr

That's it. Now go outside for a while.