* Update link to forum * Replace link to mailinglist with link to forum
2.4 KiB
Deployment
The recommended way to run Foodsoft in production is using docker. Alternative options are discussed in the wiki. If you have any questions, please have a look at the forum.
Docker
This section is a work in progress.
Build
You can use the official production docker image. If you want to build the image yourself instead, run:
docker build --tag foodsoft:latest --rm .
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:latest
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:latest 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:latest ./proc-start worker
To also run the cronjobs, start the previous command but substituting
worker
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.