saleor-deploy

Deploy Saleor to production — Docker setup, Saleor Cloud, environment variables, Celery workers, S3 media storage, database management, and scaling. Use when deploying Saleor applications.

17 stars

Best use case

saleor-deploy is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Deploy Saleor to production — Docker setup, Saleor Cloud, environment variables, Celery workers, S3 media storage, database management, and scaling. Use when deploying Saleor applications.

Teams using saleor-deploy should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/saleor-deploy/SKILL.md --create-dirs "https://raw.githubusercontent.com/OrcaQubits/agentic-commerce-skills-plugins/main/dist/antigravity/saleor-commerce/.agent/skills/saleor-deploy/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/saleor-deploy/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How saleor-deploy Compares

Feature / Agentsaleor-deployStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Deploy Saleor to production — Docker setup, Saleor Cloud, environment variables, Celery workers, S3 media storage, database management, and scaling. Use when deploying Saleor applications.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Saleor Deployment

## Before writing code

**Fetch live docs**:
1. Web-search `site:docs.saleor.io deployment production setup` for production deployment guide
2. Fetch `https://github.com/saleor/saleor-platform` for Docker Compose reference configuration
3. Web-search `site:docs.saleor.io environment variables configuration` for required environment variables
4. Web-search `saleor Celery worker configuration production` for Celery setup details
5. Web-search `site:docs.saleor.io cloud` for Saleor Cloud managed hosting options

## Production Docker Setup

Saleor provides an official Dockerfile with a multi-stage build:

| Stage | Purpose | Base Image |
|-------|---------|------------|
| **build** | Install dependencies, compile assets | `python:3.12-slim` |
| **production** | Run the application | `python:3.12-slim` |

### Docker Compose Services

| Service | Image | Purpose | Port |
|---------|-------|---------|------|
| **api** | `saleor` (custom build) | GraphQL API server (Gunicorn) | 8000 |
| **worker** | `saleor` (same image) | Celery worker process | N/A |
| **db** | `postgres:15-alpine` | PostgreSQL database | 5432 |
| **redis** | `redis:7-alpine` | Cache and Celery broker | 6379 |
| **dashboard** | `saleor-dashboard` | React admin UI | 9002 |
| **storefront** | Custom Next.js | Customer-facing storefront | 3000 |

## Saleor Cloud (Managed Hosting)

| Feature | Description |
|---------|-------------|
| **Managed API** | Fully managed Saleor backend, no server maintenance |
| **Auto-scaling** | Scales based on traffic automatically |
| **Managed database** | PostgreSQL with backups and replication |
| **CDN** | Built-in CDN for media and static assets |
| **Environments** | Staging and production environments per project |
| **CLI integration** | Deploy and manage via `saleor` CLI |

Access via `https://cloud.saleor.io/` — create projects, manage environments, and deploy Apps.

## Environment Variables

### Required Variables

| Variable | Description | Example |
|----------|-------------|---------|
| `DATABASE_URL` | PostgreSQL connection string | `postgres://user:pass@host:5432/saleor` |
| `SECRET_KEY` | Django secret key (50+ chars) | Random string |
| `ALLOWED_HOSTS` | Comma-separated hostnames | `api.example.com,localhost` |
| `DEFAULT_FROM_EMAIL` | Sender email address | `noreply@example.com` |
| `CELERY_BROKER_URL` | Redis URL for Celery | `redis://redis:6379/1` |

### Optional Variables

| Variable | Description | Default |
|----------|-------------|---------|
| `DEBUG` | Django debug mode | `False` |
| `ALLOWED_CLIENT_HOSTS` | Storefront origins for CORS | `localhost` |
| `DEFAULT_CURRENCY` | Fallback currency code | `USD` |
| `DEFAULT_COUNTRY` | Fallback country code | `US` |
| `MAX_CHECKOUT_LINE_QUANTITY` | Max qty per checkout line | `50` |
| `JAEGER_AGENT_HOST` | OpenTelemetry/Jaeger host | None |
| `SENTRY_DSN` | Sentry error tracking DSN | None |

## Celery Worker Configuration

Celery runs as a separate process using the same Saleor codebase:

| Setting | Value | Description |
|---------|-------|-------------|
| **Broker** | Redis | `CELERY_BROKER_URL = redis://redis:6379/1` |
| **Result backend** | Redis | Optional, for task result storage |
| **Concurrency** | `--concurrency=4` | Number of worker threads |
| **Queues** | `celery` (default) | Default task queue name |
| **Beat** | Optional | Periodic task scheduler |

### Key Celery Tasks in Saleor

| Task | Purpose |
|------|---------|
| Webhook delivery | Send async webhook payloads to Apps |
| Email sending | Transactional emails (order confirmation, etc.) |
| Thumbnail generation | Generate product image thumbnails |
| Search indexing | Update search index entries |
| Export processing | Handle CSV/XLSX data exports |

## S3-Compatible Media Storage

| Variable | Description | Example |
|----------|-------------|---------|
| `AWS_MEDIA_BUCKET_NAME` | S3 bucket name | `saleor-media-prod` |
| `AWS_MEDIA_CUSTOM_DOMAIN` | CDN domain for media | `media.example.com` |
| `AWS_ACCESS_KEY_ID` | IAM access key | IAM credential |
| `AWS_SECRET_ACCESS_KEY` | IAM secret key | IAM credential |
| `AWS_S3_REGION_NAME` | S3 region | `us-east-1` |
| `AWS_S3_ENDPOINT_URL` | Custom S3 endpoint (for MinIO, GCS) | `https://s3.example.com` |

- Works with any S3-compatible service (AWS S3, Google Cloud Storage, MinIO, DigitalOcean Spaces)
- Set a CDN in front of the bucket for performance
- Configure CORS on the bucket to allow Dashboard uploads

## PostgreSQL Configuration

| Setting | Recommendation |
|---------|---------------|
| **Version** | PostgreSQL 14 or 15 |
| **Connection pooling** | Use PgBouncer in transaction mode |
| **SSL** | Require SSL connections (`sslmode=require` in DATABASE_URL) |
| **Backups** | Automated daily backups with point-in-time recovery |
| **Extensions** | `pg_trgm` (required for search), `btree_gin` |
| **Max connections** | Size for Gunicorn workers + Celery workers + buffer |

## Redis Configuration

| Purpose | Database | Variable |
|---------|----------|----------|
| **Cache** | `redis://redis:6379/0` | `CACHE_URL` |
| **Celery broker** | `redis://redis:6379/1` | `CELERY_BROKER_URL` |

- Use separate Redis databases (or instances) for cache and Celery
- Enable Redis persistence (RDB snapshots or AOF) for the Celery broker

## Database Migrations

Run migrations during deployment before starting the new application version:
- Always run `python manage.py migrate --noinput` before starting Gunicorn/Celery with new code
- Back up the database before applying migrations
- Review migration SQL with `python manage.py sqlmigrate <app> <migration>`
- For zero-downtime: ensure migrations are backward-compatible with the running code

## Scaling Strategies

### Horizontal Scaling

| Component | Strategy | Notes |
|-----------|----------|-------|
| **API (Gunicorn)** | Add replicas behind load balancer | Stateless, scale freely |
| **Celery workers** | Add worker processes/containers | Scale based on queue depth |
| **Database** | Read replicas for queries | Write goes to primary |
| **Redis** | Redis Cluster or managed Redis | Separate cache from broker |

### Vertical Scaling

| Component | Tune |
|-----------|------|
| **Gunicorn** | `--workers` (2 * CPU + 1), `--threads` per worker |
| **Celery** | `--concurrency` based on task type (I/O vs CPU) |
| **PostgreSQL** | `shared_buffers`, `work_mem`, `effective_cache_size` |

## Monitoring and Logging

| Tool | Purpose | Integration |
|------|---------|-------------|
| **Sentry** | Error tracking | `SENTRY_DSN` environment variable |
| **OpenTelemetry** | Distributed tracing | `OTEL_EXPORTER_OTLP_ENDPOINT` |
| **Prometheus** | Metrics collection | `django-prometheus` middleware |
| **Health check** | Liveness and readiness probes | `/health/` endpoint |

## Production Checklist

| Item | Action |
|------|--------|
| `DEBUG` | Set to `False` |
| `SECRET_KEY` | Strong random value, stored in env var |
| `ALLOWED_HOSTS` | Restrict to actual domain names |
| Database | SSL enabled, connection pooling, backups configured |
| Media storage | S3-compatible with CDN |
| Celery | Running as separate process with monitoring |
| HTTPS | SSL termination at load balancer or reverse proxy |
| Migrations | Applied before deploying new code |
| Monitoring | Sentry, metrics, and health checks enabled |

## Best Practices

- Run Celery workers as a separate container or process, never in the API process
- Use connection pooling (PgBouncer) between Gunicorn/Celery and PostgreSQL
- Store all secrets in environment variables, never in source code or Docker images
- Use multi-stage Docker builds to minimize production image size
- Run database migrations in a separate init container or deployment step
- Configure health check endpoints for load balancer and orchestrator probes
- Use S3-compatible storage with a CDN for media files
- Monitor Celery queue depth to detect processing backlogs
- Set up automated database backups with tested restore procedures

Fetch the deployment documentation for current Docker setup, environment variables, and scaling recommendations before implementing.

Related Skills

woo-deploy

17
from OrcaQubits/agentic-commerce-skills-plugins

Deploy WooCommerce — WP-CLI automation, database migrations, zero-downtime updates, staging workflows, environment configuration, and CI/CD patterns. Use when deploying WooCommerce stores or setting up deployment pipelines.

spree-deployment

17
from OrcaQubits/agentic-commerce-skills-plugins

Deploy Spree to production — PostgreSQL + Redis + Sidekiq stack, Docker multi-arch images on GHCR, the `spree-starter` Dockerfile + Compose, Heroku/Render/Fly.io/AWS targets, env-var conventions, RAILS_MASTER_KEY, asset precompilation (Tailwind 4 + Propshaft), Action Cable, MeiliSearch indexing, S3 / ActiveStorage for media, log/observability setup, zero-downtime deploys, and migration strategy. Use when going from local dev to production, scaling Spree, or troubleshooting deploys.

saleor-webhooks

17
from OrcaQubits/agentic-commerce-skills-plugins

Configure Saleor webhooks — async and sync events, subscription payloads, JWS/HMAC signature verification, retry policy, and event types. Use when building webhook-driven integrations.

saleor-testing

17
from OrcaQubits/agentic-commerce-skills-plugins

Test Saleor applications — pytest setup, Django test client, GraphQL test patterns, App testing, factory_boy fixtures, and webhook testing. Use when writing tests for Saleor projects.

saleor-storefront

17
from OrcaQubits/agentic-commerce-skills-plugins

Build Next.js storefronts for Saleor — GraphQL client setup, channel routing, Tailwind CSS, server components, checkout flow, and SEO. Use when developing Saleor storefronts.

saleor-shipping

17
from OrcaQubits/agentic-commerce-skills-plugins

Configure Saleor shipping — shipping zones, methods (price/weight-based), custom shipping Apps, warehouse-based allocation, and click-and-collect. Use when setting up delivery options.

saleor-setup

17
from OrcaQubits/agentic-commerce-skills-plugins

Set up a Saleor development environment — saleor-platform Docker Compose, CLI, PostgreSQL/Redis prerequisites, manage.py commands, environment variables, project structure. Use when starting a new Saleor project.

saleor-security

17
from OrcaQubits/agentic-commerce-skills-plugins

Secure Saleor applications — JWT authentication, OIDC integration, App tokens, permission model, rate limiting, CORS, and security headers. Use when configuring Saleor security.

saleor-promotions

17
from OrcaQubits/agentic-commerce-skills-plugins

Configure Saleor promotions — catalog promotions, order promotions, vouchers, manual discounts, gift cards, and discount stacking. Use when setting up pricing rules.

saleor-payments

17
from OrcaQubits/agentic-commerce-skills-plugins

Implement Saleor payment processing — transaction-based payment flow, payment Apps, sync webhook events, Stripe/Adyen patterns, and refunds. Use when building payment integrations.

saleor-orders

17
from OrcaQubits/agentic-commerce-skills-plugins

Manage the Saleor order lifecycle — order creation, fulfillments, returns, refunds, draft orders, and order events. Use when working with Saleor orders.

saleor-graphql

17
from OrcaQubits/agentic-commerce-skills-plugins

Work with the Saleor GraphQL API — queries, mutations, subscriptions, cursor pagination, filters, error handling, GraphQL Playground, and code generation. Use when building against the Saleor API.