Установка и настройка Saleor (Django/GraphQL)
Saleor — Django-приложение с PostgreSQL в качестве основной БД, Celery+Redis для очередей и S3-совместимым хранилищем для медиафайлов. Production-установка требует настройки всех четырёх компонентов плюс отдельного деплоя Dashboard (React) и Storefront (Next.js).
Требования к серверу
- Python 3.11+
- PostgreSQL 15+ (рекомендуется 16)
- Redis 7+
- Node.js 18+ (только для Dashboard/Storefront)
- RAM: от 2 GB для бэкенда + воркеров Celery
- S3-совместимое хранилище: AWS S3, MinIO, Hetzner Object Storage
Docker Compose для разработки
# docker-compose.yml (официальный)
version: "3.8"
services:
api:
image: ghcr.io/saleor/saleor:3.20
ports:
- "8000:8000"
environment:
- DATABASE_URL=postgresql://saleor:saleor@db/saleor
- CELERY_BROKER_URL=redis://redis:6379/0
- SECRET_KEY=change-me-in-production
- DEBUG=False
- ALLOWED_HOSTS=localhost,api.example.com
- ALLOWED_CLIENT_HOSTS=localhost:3000,store.example.com
- [email protected]
depends_on:
- db
- redis
command: >
sh -c "python manage.py migrate &&
python manage.py collectstatic --no-input &&
gunicorn saleor.wsgi:application --bind 0.0.0.0:8000 --workers 4 --threads 2"
worker:
image: ghcr.io/saleor/saleor:3.20
environment:
- DATABASE_URL=postgresql://saleor:saleor@db/saleor
- CELERY_BROKER_URL=redis://redis:6379/0
depends_on:
- db
- redis
command: celery -A saleor worker --app=saleor.celeryconf:app -l info --concurrency=4
db:
image: postgres:16-alpine
environment:
POSTGRES_PASSWORD: saleor
POSTGRES_USER: saleor
POSTGRES_DB: saleor
volumes:
- saleor-db:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U saleor"]
interval: 5s
redis:
image: redis:7-alpine
volumes:
- saleor-redis:/data
volumes:
saleor-db:
saleor-redis:
Установка из исходников (без Docker)
git clone https://github.com/saleor/saleor.git && cd saleor
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
# Настройка окружения
cp .env.example .env
# Отредактировать .env: DATABASE_URL, SECRET_KEY, CELERY_BROKER_URL
# Миграции
python manage.py migrate
# Начальные данные (каналы, склады, типы доставки)
python manage.py populatedb
# Создание суперпользователя
python manage.py createsuperuser
# Запуск dev-сервера
python manage.py runserver 0.0.0.0:8000
# В отдельном терминале — Celery воркер
celery -A saleor worker --app=saleor.celeryconf:app -l info
Конфигурация production-среды
Ключевые переменные settings.py для production:
# saleor/settings.py — переопределение через переменные окружения
import os
from pathlib import Path
SECRET_KEY = os.environ["SECRET_KEY"]
DEBUG = os.getenv("DEBUG", "False") == "True"
ALLOWED_HOSTS = os.environ.get("ALLOWED_HOSTS", "").split(",")
ALLOWED_CLIENT_HOSTS = os.environ.get("ALLOWED_CLIENT_HOSTS", "").split(",")
# База данных
import dj_database_url
DATABASES = {
"default": dj_database_url.config(
default=os.environ["DATABASE_URL"],
conn_max_age=600,
conn_health_checks=True,
)
}
# S3 для медиафайлов
DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"
AWS_ACCESS_KEY_ID = os.environ.get("AWS_ACCESS_KEY_ID")
AWS_SECRET_ACCESS_KEY = os.environ.get("AWS_SECRET_ACCESS_KEY")
AWS_STORAGE_BUCKET_NAME = os.environ.get("AWS_STORAGE_BUCKET_NAME")
AWS_S3_REGION_NAME = os.environ.get("AWS_S3_REGION_NAME", "us-east-1")
AWS_S3_CUSTOM_DOMAIN = os.environ.get("AWS_S3_CUSTOM_DOMAIN") # CDN URL
# Email через SMTP
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST = os.environ.get("EMAIL_HOST", "smtp.sendgrid.net")
EMAIL_PORT = int(os.environ.get("EMAIL_PORT", "587"))
EMAIL_HOST_USER = os.environ.get("EMAIL_HOST_USER")
EMAIL_HOST_PASSWORD = os.environ.get("EMAIL_HOST_PASSWORD")
EMAIL_USE_TLS = True
Настройка Nginx + Gunicorn
upstream saleor_api {
server 127.0.0.1:8000;
keepalive 32;
}
server {
listen 443 ssl http2;
server_name api.example.com;
location /graphql/ {
proxy_pass http://saleor_api;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 120s;
client_max_body_size 50M;
}
location /static/ {
alias /var/www/saleor/static/;
expires 30d;
}
}
Первоначальная конфигурация через Dashboard
После установки через Dashboard (localhost:9000 или /dashboard/):
- Channels — создать канал, указать валюту и страны
- Warehouses — создать склад, привязать к каналу
- Shipping Zones — зоны доставки по странам
- Tax Configuration — налоговые классы
- Payment Apps — подключить через Apps → Explore → Install
Обновление Saleor
# Проверка breaking changes в CHANGELOG.md перед обновлением
git fetch && git log HEAD..origin/main --oneline
# Обновление
git pull origin main
pip install -r requirements.txt
python manage.py migrate --run-syncdb
# Перезапуск
sudo systemctl restart gunicorn celery
Сроки
- Docker Compose установка для разработки: 2–4 часа
- Production-установка с PostgreSQL, Redis, S3, Nginx, SSL: 1–2 дня
- Полная настройка: каналы, склады, зоны доставки, платёж, Dashboard + Storefront: 3–5 дней







