This guide uses Docker Compose to run Saleor 3.x with PostgreSQL and Redis.
Current Version: 3.22.x (released 2025-2026)
⚠️ Important: Saleor requires Redis for caching and Celery tasks. PostgreSQL 13+ is required.
For Docker installation, see Docker.
Saleor provides official Docker images for the platform.
version: '3.8'
services:
postgres:
image: postgres:15
container_name: saleor-postgres
restart: unless-stopped
environment:
POSTGRES_DB: saleor
POSTGRES_USER: saleor
POSTGRES_PASSWORD: saleor-password-change-me
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- saleor-net
redis:
image: redis:7-alpine
container_name: saleor-redis
restart: unless-stopped
networks:
- saleor-net
volumes:
- redis_data:/data
saleor:
image: ghcr.io/saleor/saleor:latest
container_name: saleor
restart: unless-stopped
depends_on:
- postgres
- redis
ports:
- "8000:8000"
environment:
DATABASE_URL: postgresql://saleor:saleor-password-change-me@postgres:5432/saleor
REDIS_URL: redis://redis:6379/0
SECRET_KEY: change-me-to-random-secret-key
ALLOWED_CLIENT_HOSTS: localhost,127.0.0.1
CELERY_BROKER_URL: redis://redis:6379/0
volumes:
- saleor_media:/saleor/media
networks:
- saleor-net
command: >
bash -c "
python manage.py migrate &&
python manage.py createsuperuser --noinput --email admin@example.com --password admin || true &&
python manage.py runserver 0.0.0.0:8000
"
volumes:
postgres_data:
redis_data:
saleor_media:
networks:
saleor-net:
docker compose up -d
Wait 2-3 minutes for Saleor to initialize and run migrations.
Access at http://YOUR-SERVER:8000
http://YOUR-SERVER:8000/dashboard/http://YOUR-SERVER:8000/graphql/For production, add Celery workers for background tasks:
version: '3.8'
services:
postgres:
image: postgres:15
environment:
POSTGRES_DB: saleor
POSTGRES_USER: saleor
POSTGRES_PASSWORD: saleor-password-change-me
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
volumes:
- redis_data:/data
saleor:
image: ghcr.io/saleor/saleor:latest
depends_on:
- postgres
- redis
ports:
- "8000:8000"
environment:
DATABASE_URL: postgresql://saleor:saleor-password-change-me@postgres:5432/saleor
REDIS_URL: redis://redis:6379/0
SECRET_KEY: change-me-to-random-secret-key
ALLOWED_CLIENT_HOSTS: localhost,127.0.0.1
CELERY_BROKER_URL: redis://redis:6379/0
volumes:
- saleor_media:/saleor/media
celery:
image: ghcr.io/saleor/saleor:latest
depends_on:
- postgres
- redis
environment:
DATABASE_URL: postgresql://saleor:saleor-password-change-me@postgres:5432/saleor
REDIS_URL: redis://redis:6379/0
SECRET_KEY: change-me-to-random-secret-key
CELERY_BROKER_URL: redis://redis:6379/0
command: celery -A saleor worker -l info
volumes:
postgres_data:
redis_data:
saleor_media:
For development, build your own Saleor container:
FROM python:3.11-slim
# Install system dependencies
RUN apt-get update && apt-get install -y \
build-essential \
libpq-dev \
postgresql-client \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /saleor
# Install Saleor
RUN pip install saleor
EXPOSE 8000
version: '3.8'
services:
postgres:
image: postgres:15
environment:
POSTGRES_DB: saleor
POSTGRES_USER: saleor
POSTGRES_PASSWORD: saleor-password-change-me
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
volumes:
- redis_data:/data
saleor:
build: .
ports:
- "8000:8000"
depends_on:
- postgres
- redis
volumes:
- saleor_app:/saleor
volumes:
postgres_data:
redis_data:
saleor_app:
docker compose exec saleor python manage.py createsuperuser
For production, use a reverse proxy (Nginx/Traefik) with Let’s Encrypt:
# Add to docker-compose.yml
services:
traefik:
image: traefik:v2.10
command:
- "--providers.docker=true"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
- "--certificatesresolvers.letsencrypt.acme.email=your@email.com"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- letsencrypt:/letsencrypt
# Backup PostgreSQL database
docker compose exec postgres pg_dump -U saleor saleor > backup.sql
# Backup media files
tar -czf saleor-media-backup.tar.gz saleor_media/