Быстрый старт
Цель — поднять стенд локально с минимальной конфигурацией: без ручного .env, с готовыми значениями в манифесте. Для продакшена, домена и полного списка переменных см. Установка.
Требования
- Установлены Docker Engine и Docker Compose (Docker 20.10+, Compose 2.0+).
- CPU: от 4 (рекомендуется 8); RAM: от 4 ГБ (рекомендуется 8 ГБ); диск: от ~10 ГБ.
- Свободны порты 8080 (веб), 8001 (API), 3001 (Allure) — либо измените проброс в файле ниже.
Шаг 1. Подготовьте docker-compose.yml
- Создайте каталог для стенда и перейдите в него:
mkdir savetest
cd savetest
- Сохраните приведённый ниже файл в этой директории как
docker-compose.yml.
Ниже — актуальный docker-compose.yml из комплекта поставки (можно копировать целиком):
# Минимальная конфигурация Docker Compose
# Для быстрого старта с минимальными настройками
services:
postgres:
image: postgres:15
restart: unless-stopped
environment:
POSTGRES_DB: savetest_db
POSTGRES_USER: savetest_user
POSTGRES_PASSWORD: savetest_password
POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=en_US.UTF-8 --lc-collate=en_US.UTF-8 --lc-ctype=en_US.UTF-8"
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U savetest_user -d savetest_db"]
interval: 10s
timeout: 5s
retries: 5
networks:
- savetest-network
allure-service:
image: cr.yandex/crp8hln0vgikkl8djavt/save-test/allure-service:main
container_name: allure-service
restart: unless-stopped
ports:
- "3001:3001"
volumes:
- allure_storage:/allure-storage
environment:
- PORT=3001
- STORAGE_PATH=/allure-storage
- NODE_ENV=production
- REDIS_URL=redis://redis:6379/0
- BACKEND_URL=http://backend:8000
depends_on:
redis:
condition: service_healthy
networks:
- savetest-network
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:3001/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
backend:
image: cr.yandex/crp8hln0vgikkl8djavt/save-test/backend:main
restart: unless-stopped
ports:
- "8001:8000"
environment:
- DATABASE_URL=postgresql://savetest_user:savetest_password@postgres:5432/savetest_db
- REDIS_URL=redis://redis:6379/0
- SECRET_KEY=your-super-secret-key-change-in-production
- DEBUG=False
- ALLOWED_ORIGINS=http://localhost:3000,http://127.0.0.1:3000,http://localhost:8080,http://127.0.0.1:8080
- UVICORN_WORKERS=4
- ALLURE_SERVICE_URL=http://allure-service:3001
- ALLURE_STORAGE_PATH=/allure-storage
volumes:
- git_repos:/app/git_repos
- avatars_data:/app/avatars
- project_avatars_data:/app/project_avatars
- reports_data:/app/reports
- result_attachments_data:/app/result_attachments
- wiki_sites_data:/app/wiki_sites
- logs_data:/app/logs
- app_data:/app/app/__data__
- allure_storage:/allure-storage
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
allure-service:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
- savetest-network
redis:
image: redis:7-alpine
restart: unless-stopped
volumes:
- redis_data:/data
command: redis-server --appendonly yes
networks:
- savetest-network
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
webhook-worker:
image: cr.yandex/crp8hln0vgikkl8djavt/save-test/webhook-worker:main
container_name: webhook-worker
restart: unless-stopped
environment:
- DATABASE_URL=postgresql://savetest_user:savetest_password@postgres:5432/savetest_db
- REDIS_URL=redis://redis:6379/0
- WORKER_TIMEOUT=30
- WORKER_RETRY_COUNT=2
- WORKER_RETRY_DELAY=5
- LOG_LEVEL=INFO
- LOGS_DIR=/app/logs
volumes:
- logs_data:/app/logs
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
networks:
- savetest-network
healthcheck:
test: ["CMD", "python", "-c", "import sys; sys.exit(0)"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
frontend:
image: cr.yandex/crp8hln0vgikkl8djavt/save-test/frontend:main
restart: unless-stopped
ports:
- "8080:80"
depends_on:
backend:
condition: service_healthy
networks:
- savetest-network
stop_grace_period: 15s
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
volumes:
git_repos:
driver: local
redis_data:
driver: local
avatars_data:
driver: local
project_avatars_data:
driver: local
reports_data:
driver: local
result_attachments_data:
driver: local
wiki_sites_data:
driver: local
logs_data:
driver: local
app_data:
driver: local
postgres_data:
allure_storage:
driver: local
networks:
savetest-network:
driver: bridge
Шаг 2. Запуск
- Запустите контейнеры:
docker compose up -d
- Дождитесь перехода сервисов в состояние
healthy. При первом запуске может занять несколько минут из-за скачивания образов. Проверить статус:
docker compose ps
- Откройте в браузере: http://localhost:8080
Первый вход
При первом входе создайте суперадминистратора:


Важно: В этой конфигурации заданы учётные данные и
SECRET_KEYпо умолчанию — не используйте её в открытом интернете. Перед выводом в продакшен перейдите на сценарий из Установка и задайте собственные секреты.
Что дальше
- Для продакшена, домена и HTTPS — перейдите в Установка.
- Для разработки собственных плагинов-парсеров — перейдите в Разработка плагинов.