SaveTest — ДокументацияSaveTest — Документация Сайт
Руководство пользователя
Руководство администратора
Установка и разработка
Руководство пользователя
Руководство администратора
Установка и разработка
  • Установка и разработка

    • Установка и разработка
    • Быстрый старт
    • Установка
    • Обновление
    • Домен и SSL — Nginx (опционально)
    • Разработка плагинов парсеров
Сайт

Быстрый старт

Цель — поднять стенд локально с минимальной конфигурацией: без ручного .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

  1. Создайте каталог для стенда и перейдите в него:
mkdir savetest
cd savetest
  1. Сохраните приведённый ниже файл в этой директории как docker-compose.yml.

Ниже — актуальный 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. Запуск

  1. Запустите контейнеры:
docker compose up -d
  1. Дождитесь перехода сервисов в состояние healthy. При первом запуске может занять несколько минут из-за скачивания образов. Проверить статус:
docker compose ps
  1. Откройте в браузере: http://localhost:8080

Первый вход

При первом входе создайте суперадминистратора:

Создание суперадминистратора при первом входе (светлая тема)Создание суперадминистратора при первом входе (тёмная тема)

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

Что дальше

  • Для продакшена, домена и HTTPS — перейдите в Установка.
  • Для разработки собственных плагинов-парсеров — перейдите в Разработка плагинов.
Назад
Установка и разработка
Далее
Установка