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 and Redis. 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 -e SECRET_KEY_BASE=... -e DATABASE_URL=... -e REDIS_URL=... spree

You will need to supply the following environment variables to run the container:

VariableDescriptionExample
SECRET_KEY_BASEYou can generate this by running bin/rails secret2fad5c0b79d25e4765d3018d8c740f8c3a665f0e5c...
DATABASE_URLDatabase URL, this could be your AWS RDS instance or any other PostgreSQL instancepostgres://user:pass@localhost:5432/spree
REDIS_URLRedis URL, used for background jobs processing,this could be your AWS ElastiCache instance or any other Redis instanceredis://localhost:6379/0

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

VariableDescriptionDefault value
RAILS_ENVRails environment (production, development, test)production
RAILS_MAX_THREADSWeb server (Puma) threads3
REDIS_CACHE_URLRedis URL, used for caching, this could be your AWS ElastiCache instance or any other Redis instance (optional, if not provided will use file based cache)redis://localhost:6379/1
PORTWeb server port3000
RAILS_LOG_LEVELLog level, you can switch it to debug to see more detailed logsinfo
DEVISE_SESSION_TIMEOUTSession timeout (in days)14