Deployment guide

Saleor

Overview

Saleor is a high-performance, GraphQL-first open source e-commerce platform built on Python and Django, with a modern React admin Dashboard. It powers headless storefronts for brands that need a flexible, API-driven commerce backend.

The SecureAnyCloud image delivers Saleor 3.23 fully installed and wired together as a Docker Compose stack, so a production-grade commerce API and admin Dashboard are running within minutes of launch. An nginx reverse proxy publishes the Dashboard and the GraphQL API on port 80 same-origin, the data tier lives on a dedicated Azure data disk, and a unique administrator account is generated on the first boot of every VM. The image is backed by 24/7 SecureAnyCloud support.

What you get:

  • Saleor 3.23 (BSD-3-Clause) as a Docker Compose stack: the GraphQL API, the React admin Dashboard, PostgreSQL 15, a Valkey (Redis-compatible) cache and Celery broker, a Celery worker and a local mail capture service
  • Docker Engine and the Docker Compose plugin from the official Docker repository
  • nginx on port 80 reverse-proxying /graphql/ (and /media/, /thumbnail/, /digital-download/, /.well-known/) to the API and serving the Dashboard SPA same-origin
  • A dedicated Azure data disk at /var/lib/saleor for the PostgreSQL database, the Valkey state and your media uploads
  • A per-VM Django secret key, JWT signing key and unique administrator account, generated on first boot
  • saleor.service, nginx.service and docker.service as systemd units, enabled and active
  • 24/7 SecureAnyCloud support

Prerequisites

You need an active Azure subscription, an SSH key pair, and a VNet with a subnet in the target region.

Standard_B4ms (4 vCPU / 16 GiB RAM) is a good starting point. Use Standard_D8s_v5 or larger for production catalogs.

Configure the NSG inbound rules to allow 22/tcp from your management network and 80/tcp for the Saleor Dashboard and GraphQL API. For public exposure, front the VM with TLS (see Enabling HTTPS).

Step 1 - Deploy from the Azure Marketplace

Sign in to the Azure Portal, select Create a resource, search the Marketplace for Saleor by SecureAnyCloud, and select Create.

On the Basics tab, pick your subscription, resource group, region and size. Under Administrator account, choose SSH public key and paste your key. Under Inbound port rules, allow SSH (22) and HTTP (80).

Review the dedicated data disk on the Disks tab, then select Review + create and Create.

Step 2 - Deploy from the Azure CLI

# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:saleor-ubuntu-24-04:default:latest
az vm create \
  --resource-group <your-rg> \
  --name saleor \
  --image sac1647283583153:saleor-ubuntu-24-04:default:latest \
  --size Standard_B4ms \
  --admin-username azureuser \
  --ssh-key-values ~/.ssh/id_ed25519.pub \
  --vnet-name <your-vnet> --subnet <your-subnet> \
  --public-ip-sku Standard
az vm open-port --resource-group <your-rg> --name saleor --port 80 --priority 1010

Step 3 - Connect to your VM

ssh azureuser@<vm-public-ip>

Step 4 - Confirm the Saleor stack is running

On first boot, Saleor generates a fresh Django secret key and JWT signing key, runs the database migrations against a clean database, creates a unique per-VM administrator account and brings the Docker Compose stack up. Confirm that the systemd units are active:

systemctl is-active saleor nginx docker

All three report active.

The Saleor stack runs as a set of Docker Compose containers. List the containers and confirm that the GraphQL API answers on port 80:

sudo docker ps --format '{{.Names}}\t{{.Status}}' curl -s -o /dev/null -w 'GraphQL HTTP %{http_code}\n' \
  -H 'Content-Type: application/json' \
  --data '{"query":"{ shop { name } }"}' http://127.0.0.1/graphql/

The api, dashboard, db, cache, worker and mailpit containers show Up, and the GraphQL query returns HTTP 200.

Step 5 - Retrieve the administrator password

The administrator account is unique to your VM and is generated on first boot. Read the credentials file as root:

sudo cat /root/saleor-credentials.txt

The file contains the admin email (admin@sac.local), a unique password, and the Dashboard and GraphQL URLs for this VM. Change the email and password from the Dashboard after your first sign-in.

Step 6 - Sign in to the Dashboard

Browse to http://<vm-public-ip>/. The Saleor Dashboard sign-in screen appears. Sign in with admin@sac.local and the password from the credentials file.

After you sign in, the Dashboard home shows the sales and orders overview and the navigation for your catalog, orders, customers, discounts, configuration and more.

Step 7 - Manage your catalogue

Open Catalog -> Products to manage products, variants, collections and channels. From here you can create products, set pricing per channel, manage stock and organize your catalog.

Step 8 - Manage orders

Open Orders to see customer orders with their payment and fulfillment status, totals and channel. From here you can fulfill orders, capture payments, issue refunds and manage drafts.

Step 9 - Use the GraphQL API

Saleor exposes every capability through a single GraphQL API at the /graphql/ path on port 80. To obtain an access token, POST a tokenCreate mutation with your admin email and password. Run the following on your VM, substituting the password from the credentials file:

EMAIL=admin@sac.local
PASS=$(sudo grep '^saleor.admin.pass=' /root/saleor-credentials.txt | cut -d= -f2-)
curl -s -H 'Content-Type: application/json' \
  --data "{\"query\":\"mutation{tokenCreate(email:\\\"$EMAIL\\\",password:\\\"$PASS\\\"){token errors{message}}}\"}" \
  http://127.0.0.1/graphql/

The response contains a JWT token. Use it as a Bearer token in the Authorization header for authenticated API requests. The GraphiQL playground is also available in a browser at http://<vm-public-ip>/graphql/.

Step 10 - The dedicated data disk

The PostgreSQL database, the Valkey state and your Saleor media uploads live on a dedicated Azure data disk mounted at /var/lib/saleor, separate from the OS disk. This keeps your catalog, orders, customers and media independent of the OS image and lets you resize the disk as your store grows.

df -h /var/lib/saleor findmnt /var/lib/saleor

Step 11 - Enabling HTTPS

For any public deployment, front Saleor with TLS. Point a DNS A record at your VM's public IP, then install a certificate with Certbot and the nginx plugin. Complete the following on your VM, replacing the example domain with your own value:

  • Install Certbot: sudo apt-get update && sudo apt-get install -y certbot python3-certbot-nginx
  • Obtain and install a certificate for your domain by running Certbot with the nginx plugin for your-domain.example.com. Supply your contact email when prompted.
  • After issuance, your Dashboard and GraphQL API are served over https://. Saleor accepts any host (ALLOWED_HOSTS=*), so no rebuild is needed.

Certbot installs a renewal timer automatically, so certificates renew without further action.

Step 12 - Maintenance

  • Updates: The OS continues to receive unattended security updates. The Saleor stack is pinned to the 3.23 image tags in /opt/saleor/docker-compose.yml. To move to a newer Saleor release, update the image tags and run sudo /opt/saleor/saleor-compose.sh pull && sudo systemctl restart saleor.
  • Backups: Back up the PostgreSQL database under /var/lib/saleor/db and the media under /var/lib/saleor/media. Together they hold all of your catalog, orders and uploads.
  • Logs: View container logs with sudo /opt/saleor/saleor-compose.sh logs <service> (for example api, worker or dashboard). nginx logs are under /var/log/nginx/.

Support

SecureAnyCloud maintains this image and provides 24/7 support. Saleor is a trademark of its respective owners. SecureAnyCloud is not affiliated with or endorsed by the Saleor project. For help with the image, contact sales@secureanycloud.com.

Deploy on Azure

Launch Saleor on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.

View this image

Need Help?

Our support team is available 24/7.

sales@secureanycloud.com

Deploy on Azure