Skip to content

For Saleor

Saleor's GraphQL API and Celery on your own VMs

Run the Saleor API and Celery workers on a real VM, keep Postgres on a private network, store media in S3-compatible storage and serve images and the Dashboard from 988 locations.

Free to sign up. No egress fees on any product.

Why Saleor on Edge

Saleor splits cleanly across two VMs

Saleor is a Django app with a GraphQL API, a Celery worker and a Postgres database. Each part has an obvious home, and nothing on the bill counts requests.
  • One GraphQL endpoint

    Saleor exposes the whole store through a typed GraphQL API. Put the React Storefront, a Next.js app or a mobile client in front.
  • Django on real VMs

    Uvicorn workers on dedicated vCPUs, sized to your catalogue. No per-request pricing and no cold starts.
  • Media through django-storages

    Set a handful of AWS_* variables and Saleor writes product images and thumbnails to Edge Storage over the S3 API.
  • Celery without surprises

    Webhooks, emails and exports run on Celery backed by Redis, on the API VM or a worker VM of their own.
  • Media and Dashboard at the edge

    Product images and the static Dashboard build are served from 988 locations, with image resizing from the URL.
  • Multi-channel on one install

    Channels for different countries, currencies and warehouses share one Saleor deployment and one database.

Reference architecture

The Saleor API, with Postgres on a private network

The API and worker on one VM, Postgres behind it on a private network, and two buckets that double as the CDN origin for media and the Dashboard.
  • Compute

    Runs the Saleor API and Celery worker on one VM, and Postgres on another.

  • Storage

    Holds media through django-storages, plus the static Dashboard build.

  • CDN

    Serves product images and the Dashboard worldwide, straight from the buckets.

  • Image optimisation

    Resizes and converts product images on request, alongside Saleor's thumbnails.

  • DNS

    Anycast DNS for api., dashboard., media. and shop. subdomains.

  • Shield

    Scores signup and checkout mutations from your storefront's server code.

  • Assist

    A storefront sales assistant grounded in your own pages.

Deploy

Saleor from the official Docker image

The official Saleor image runs both the API and the worker. Everything else is environment variables and two CDN domains.
  1. 01

    Create the database and API VMs

    Attach both to one private network and allow 5432 from that range only. The docker script installs Docker CE and Compose.

    shell
    $ edge compute create --name saleor-db --size s-2vcpu-4gb \
        --image ubuntu-24 --region london --script postgresql \
        --script-param db_name=saleor
    
    $ edge compute create --name saleor --size s-4vcpu-8gb \
        --image ubuntu-24 --region london --script docker
  2. 02

    Configure Saleor

    Saleor reads its settings from the environment. The AWS_* variables switch media storage to Edge Storage.

    .env
    DATABASE_URL=postgres://saleor:<pw>@10.185.0.2:5432/saleor
    CELERY_BROKER_URL=redis://redis:6379/1
    SECRET_KEY=<random>
    ALLOWED_HOSTS=api.acme.com
    PUBLIC_URL=https://api.acme.com/
    AWS_MEDIA_BUCKET_NAME=saleor-media
    AWS_S3_ENDPOINT_URL=https://storage.edge.network
    AWS_ACCESS_KEY_ID=<edge-access-key>
    AWS_SECRET_ACCESS_KEY=<edge-secret-key>
    AWS_MEDIA_CUSTOM_DOMAIN=media.acme.com
  3. 03

    Migrate and start the API and worker

    Both compose services use ghcr.io/saleor/saleor: api runs uvicorn saleor.asgi:application, worker runs celery --app saleor.celeryconf:app worker.

    shell
    $ docker compose run --rm api python3 manage.py migrate
    $ docker compose run --rm api python3 manage.py createsuperuser
    $ docker compose up -d api worker redis
  4. 04

    Host the Dashboard and media on the CDN

    Build the Dashboard with API_URL set to your GraphQL endpoint, sync it to a bucket, and serve both buckets through one deployment.

    shell
    $ edge storage create saleor-dashboard
    $ edge storage sync ./build/dashboard saleor-dashboard/
    
    $ edge cdn create --name acme-saleor
    $ edge cdn domains add cdn-a1b2c3 --domain dashboard.acme.com \
        --origin-type storage --storage-bucket saleor-dashboard
    $ edge cdn domains add cdn-a1b2c3 --domain media.acme.com \
        --origin-type storage --storage-bucket saleor-media --jit-image

Prefer to hand it off? Give the job to your AI agent or have our engineers do it.

What it costs

What Saleor's backend costs a month

Two VMs, a CDN deployment and two buckets. Host your storefront on another Standard VM, or wherever it lives today.
  • No per-request or per-order fees
  • Private traffic between VMs is free
  • Payments settle directly with your gateway
  • Billed hourly from a prepaid balance
See compute pricing

Estimated monthly bill on Edge

Saleor API and Celery, Postgres on its own VM, ~150k visits a month

USD
  • API VM$38.47Performance: 4 vCPU, 8 GiB for the Saleor API, Celery and Redis
  • Database VM$19.24Standard: 2 vCPU, 4 GiB for PostgreSQL 16
  • CDN$0.753.5M requests: first 500k free, then 3M × $0.25 per million
  • Storage$0.4535 GB of media and Dashboard: first 5 GB free, then 30 GB × $0.015
  • DNS$0.00api., dashboard., media. and shop. records
  • Egress$0.00
Total$58.91

FAQ

Saleor on Edge, answered

Something else? Ask an engineer.
How does this compare to Saleor Cloud?
Same open-source software, but you control the host. You get root access, a bill that doesn't count requests, and the API, database and storefront on one private network.
Which storefront should I use?
Saleor's React Storefront is a solid Next.js starting point. Any front end that can call a GraphQL endpoint works: Vue, Svelte, Astro or a mobile app.
Can the CDN cache GraphQL responses?
Saleor's GraphQL queries are POST requests, which CDNs don't cache. Cache query results in your storefront (Next.js fetch caching, for example) and let the CDN handle pages, media and the Dashboard.
How do I deploy code updates?
Pull the new image tag, run manage.py migrate, then restart the api and worker services. Wrap those three commands in a CI job once they work by hand.
What about payments?
Saleor's payment apps for Stripe, Adyen and other gateways work as documented. Payment traffic runs between Saleor and the gateway, with no Edge involvement.

Take Saleor off the request meter

Start free. Bring an existing Saleor instance or stand up a fresh one from the official image.

Free tiers hard-cap. Nothing bills until you add a card.