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.