Spree (when using Spree Starter template) comes with a Dockerfile that can be used to build a Docker image of your application.

You can find the Dockerfile in the Dockerfile file in the root of the project or in the Spree Starter repository.

This Dockerfile is pre-configured to run Spree with PostgreSQL database. That’s the only external dependency you need to have installed on your machine to be able to run Spree.

You can later use that image to run your application in a containerized environment eg. AWS ECS, AWS Fargate, Azure Container Instances, etc.

Building the Docker image

docker build -t spree .

Running the Docker container

docker run -p 3000:3000 spree

You can also run the container with a specific environment variable by using -e flag.

docker run -e RAILS_ENV=production spree

Environment variables

You can set environment variables by using -e flag when running the container.

docker run -e RAILS_ENV=production -e RAILS_MASTER_KEY=... -e DATABASE_URL=... spree

You will need to set the following environment variables:

VariableDescriptionExample
RAILS_ENVRails environment (production, development, test)production
RAILS_MASTER_KEYThis should be the contents of your config/master.key file2fad5c0b79d25e4765d3018d8c740f8c3a665f0e5c...
DATABASE_URLDatabase URL, this could be your AWS RDS instance or any other PostgreSQL instancepostgres://user:pass@localhost:5432/spree

There are also some other environment variables that you can set to customize your Spree application.

VariableDescriptionDefault value
RAILS_MAX_THREADSWeb server (Puma) threads3
PORTWeb server port3000
RAILS_LOG_LEVELLog level, you can switch it to debug to see more detailed logsinfo
DEVISE_SESSION_TIMEOUTSession timeout in days14