spree-deployment

Installation
SKILL.md

Deploying Spree

A Spree 6 production deployment is one Docker image + one database. The same image runs the Store/Admin API, serves the React admin at /dashboard, and — by default — processes background jobs in-process. Jobs (Solid Queue) and cache (Solid Cache) live in the database; Redis is optional. Everything is configured with environment variables.

Project layout reminder: the Rails app is server/ (older projects: backend/), the admin dashboard is apps/dashboard/. Classic flavor (plain Rails app with Spree gems at the repo root) uses the same env vars and Rails config — only the paths and the CLI wrapper differ.

Topology decision

Shape When How
Combined (default) Most stores; one container is the whole app Web container runs Puma with the Solid Queue plugin (SOLID_QUEUE_IN_PUMA=true)
Split worker Heavy imports, big catalogs, marketplaces syncing many sellers, multi-tenant Same image, second service with command bin/jobs; set SOLID_QUEUE_IN_PUMA=false on web
Distributed Independent scaling/release of surfaces API behind a load balancer; dashboard as static files on a CDN; storefront (Next.js) on Vercel/Node host
Sidekiq Only when a dedicated Solid Queue worker with raised JOB_THREADS/JOB_CONCURRENCY no longer keeps up Swap Active Job adapter to Sidekiq on Redis/Valkey (see below)

Start combined; every step up is configuration, not code.

Building the image

Installs
273
GitHub Stars
10
First Seen
Jun 11, 2026