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, tryrake 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
-
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
. -
Adapt your configuration in
config/deploy.rb
andconfig/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