foodsoft/doc/DEPLOYMENT.md

3.2 KiB

Deployment

Docker

This section is a work in progress.

Build

To build the docker image, run:

docker build --tag foodsoft:dev --rm .

There is also an official production docker image, which will let you avoid this step.

Run (basic)

You'll need to set at least the following environment variables:

  • SECRET_KEY_BASE - random string of 30+ characters, try rake secret
  • DATABASE_URL - pointing to your MySQL installation (mysql2://user:pass@mysql.host/foodsoftdb?encoding=utf8)
  • REDIS_URL - pointing to your Redis instance (redis://redis.host:6379)

You'll also need to supply the Foodsoft configuration file, for example by mounting it as a volume. Copy config/app_config.yml.SAMPLE to config/app_config.yml and customize the settings.

Then run the webserver, exposing port 3000 on the current host:

docker run --name foodsoft_web -p 3000 \
  -e SECRET_KEY_BASE -e DATABASE_URL -e REDIS_URL -e RAILS_FORCE_SSL=false \
  -v `pwd`/config/app_config.yml:/usr/src/app/config/app_config.yml:ro \
  foodsoft:dev

This should get you started. But first you'll need to populate the database:

docker run --name foodsoft_setup --rm \
  -e SECRET_KEY_BASE -e DATABASE_URL -e REDIS_URL \
  -v `pwd`/config/app_config.yml:/usr/src/app/config/app_config.yml:ro \
  foodsoft:dev  bundle exec rake db:setup

To run the worker (recommended!), supply a different command (see Procfile for other types):

docker run --name foodsoft_worker \
  -e SECRET_KEY_BASE -e DATABASE_URL -e REDIS_URL \
  -v `pwd`/config/app_config.yml:/usr/src/app/config/app_config.yml:ro \
  foodsoft:dev  ./proc-start worker

To also run the cronjobs, start the previous command but substituting mail with cron. That should give you the ingredients for a production-setup. With the help of a front-end webserver doing ssl, of course.

Run (docker-compose)

In practice, you'd probably want to use docker-compose. If you know Docker well enough, you'll have no problem to set this up. For inspiration, look at the foodcoops.net production setup.

Capistrano

Setup

  1. Initialise your Capistrano setup

     bundle exec cap install
     sed -i 's|^# \(require.*rails.*\)|\1|' Capfile
     cp config/deploy.rb.SAMPLE config/deploy.rb
    

    When you're using RVM on the server you may want to uncomment the corresponding line in Capfile.

  2. Adapt your configuration in config/deploy.rb and config/deploy/*.rb

Deploy

On your first deploy you should run (choose either staging or production)

bundle exec cap staging deploy:check

This will fail, which is ok, because there is no configuration yet. On your server, there is a directory shared/config for each installation, which contains the configuration. Create database.yml, app_config.yml and initializers/secret_token.rb and try again. (See lib/capistrano/tasks/deploy_initial.cap for a way to automate this.)

Deploy to staging

bundle exec cap staging deploy

Deploy to production

bundle exec cap production deploy