This guide uses Docker Compose to run Solidus 4.6 with a custom Docker image.
Current Version: 4.6.2 (released November 27, 2025)
⚠️ Important: No official Solidus Docker image exists. The solidusio/solidus-demo on Docker Hub was last updated 7 years ago. You must build a custom Docker image.
For Docker installation, see Docker.
Build your own Solidus Docker image for production use.
FROM ruby:3.1-slim
# Install system dependencies
RUN apt-get update && apt-get install -y \
build-essential \
libpq-dev \
libvips-dev \
nodejs \
npm \
git \
imagemagick \
&& rm -rf /var/lib/apt/lists/*
# Install Yarn
RUN npm install -g yarn
WORKDIR /app
# Install bundler
RUN gem install bundler:2.4.0
EXPOSE 3000
version: '3.8'
services:
postgres:
image: postgres:14
container_name: solidus-postgres
restart: unless-stopped
environment:
POSTGRES_DB: solidus
POSTGRES_USER: solidus
POSTGRES_PASSWORD: solidus-password-change-me
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- solidus-net
solidus:
build: .
container_name: solidus
restart: unless-stopped
depends_on:
- postgres
ports:
- "3000:3000"
environment:
DATABASE_URL: postgresql://solidus:solidus-password-change-me@postgres:5432/solidus
RAILS_ENV: production
SECRET_KEY_BASE: change-me-to-random-secret-key
volumes:
- solidus_app:/app
networks:
- solidus-net
command: >
bash -c "
bundle install &&
rails db:setup &&
rails server -b 0.0.0.0
"
volumes:
postgres_data:
solidus_app:
networks:
solidus-net:
# Create a new Solidus app
mkdir solidus-app && cd solidus-app
# Create Gemfile
cat > Gemfile << 'EOF'
source 'https://rubygems.org'
gem 'solidus', '~> 4.6'
gem 'solidus_auth_devise'
gem 'solidus_gateway'
EOF
# Build and start
docker compose build
docker compose up -d
# Install Solidus in the container
docker compose exec solidus bash
bundle install
rails solidus:install
Use the official Solidus installer:
version: '3.8'
services:
postgres:
image: postgres:14
environment:
POSTGRES_DB: solidus
POSTGRES_USER: solidus
POSTGRES_PASSWORD: solidus-password-change-me
volumes:
- postgres_data:/var/lib/postgresql/data
solidus:
image: ruby:3.1-slim
ports:
- "3000:3000"
depends_on:
- postgres
volumes:
- ./solidus-app:/app
working_dir: /app
command: >
bash -c "
apt-get update && apt-get install -y build-essential libpq-dev nodejs imagemagick &&
gem install bundler &&
bundle install &&
rails db:setup &&
rails server -b 0.0.0.0
"
volumes:
postgres_data:
# Create new Solidus app locally
gem install solidus
rails _7.0.8_ new solidus-app
cd solidus-app
# Add Solidus to Gemfile
echo "gem 'solidus', '~> 4.6'" >> Gemfile
bundle install
rails solidus:install
docker compose up -d
For development/testing only:
version: '3.8'
services:
postgres:
image: postgres:14
environment:
POSTGRES_DB: solidus_development
POSTGRES_USER: solidus
POSTGRES_PASSWORD: solidus-password
solidus:
image: ruby:3.1-slim
ports:
- "3000:3000"
volumes:
- ./app:/app
working_dir: /app
stdin_open: true
tty: true
command: bash
Then manually install Solidus:
docker compose up -d
docker compose run solidus bash
gem install bundler
rails new . --database=postgresql
# Add Solidus gems to Gemfile
bundle install
rails solidus:install
docker compose exec solidus rails runner "Spree::AdminUser.create!(email: 'admin@example.com', password: 'password123', password_confirmation: 'password123')"
For production, use a reverse proxy (Nginx/Traefik) with Let’s Encrypt:
# Add to docker-compose.yml
services:
traefik:
image: traefik:v2.10
command:
- "--providers.docker=true"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
- "--certificatesresolvers.letsencrypt.acme.email=your@email.com"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- letsencrypt:/letsencrypt
# Backup PostgreSQL database
docker compose exec postgres pg_dump -U solidus solidus > backup.sql
# Backup app files
tar -czf solidus-app-backup.tar.gz solidus_app/
rails assets:precompile for production