docs/developer/deployment/render.mdx
Every create-spree-app project ships a ready Render Blueprint (render.yaml at the project root). It deploys the whole app in the single-node topology: one Docker service built straight from your repository plus a managed PostgreSQL — nothing else:
Migrations run automatically on boot. Render builds the same image spree build --production builds locally.
render.yaml and creates the services. Review and click Deploy Blueprint.The database is seeded on first boot. Your store is ready in a few minutes — including any customizations, since the image builds from your repository.
https://<your-app-name>.onrender.com/admin # admin panel
https://<your-app-name>.onrender.com/jobs # background jobs dashboard
Default credentials are created during seeding. Change them immediately after first login.
The /jobs dashboard uses HTTP Basic auth: user jobs, with a password the Blueprint generates — read it in the Render dashboard under the web service's Environment tab (MISSION_CONTROL_PASSWORD).
Render sets DATABASE_URL and SECRET_KEY_BASE automatically from the Blueprint. For additional configuration (SMTP, file storage, Sentry, etc.), see Environment Variables.
Generated URLs (images and attachments in API responses, email links) automatically use Render's RENDER_EXTERNAL_HOSTNAME (<your-app-name>.onrender.com). When you attach a custom domain, set RAILS_HOST to it — it takes precedence.
The Blueprint's commented worker block switches to split mode: background jobs move into a dedicated service — same image, no rebuild. Uncomment it and set SOLID_QUEUE_IN_PUMA=false on the web service so it stops running jobs.
For production workloads, we recommend:
| Service | Plan | Resources | Auto-scaling |
|---|---|---|---|
| Web | Pro | 4 GB RAM, 2 CPU | 1–2 instances |
| Worker (optional split) | Standard | 2 GB RAM, 1 CPU | — |
| PostgreSQL | Pro 4 GB | 4 GB RAM, 1 CPU | — |
To enable auto-scaling, add this to the web service in your render.yaml:
- type: web
name: spree
plan: pro
scaling:
minInstances: 2
maxInstances: 3
targetMemoryPercent: 80
targetCPUPercent: 80
High-traffic installs can additionally swap caching to a managed Redis/Valkey — the default needs no extra service.
Render provides ephemeral storage — uploaded files (product images, etc.) won't persist across deploys. Set up cloud storage:
Before going to production:
Deploying a storefront? The Next.js storefront ships separately — typically to Vercel. See Storefront Deployment.