Back to Spree

Render

docs/developer/deployment/render.mdx

5.6.03.7 KB
Original Source

Overview

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:

  • Web — one container running the Spree API and background jobs
  • PostgreSQL — the only backing service

Migrations run automatically on boot. Render builds the same image spree build --production builds locally.

<Tip> Just evaluating Spree? Skip self-hosting entirely and use a hosted sandbox at [spreecommerce.org](https://spreecommerce.org). </Tip>

Deploying

  1. Push your create-spree-app project to GitHub
  2. In the Render dashboard, click NewBlueprint and select your repository
  3. Render reads 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.

After Deployment

Admin

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).

Environment Variables

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.

Scaling Out

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:

ServicePlanResourcesAuto-scaling
WebPro4 GB RAM, 2 CPU1–2 instances
Worker (optional split)Standard2 GB RAM, 1 CPU
PostgreSQLPro 4 GB4 GB RAM, 1 CPU

To enable auto-scaling, add this to the web service in your render.yaml:

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.

Next Steps

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.