Встановлення та налаштування 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 ГБ для бекенду + робітників 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 днів







