Персональный образовательный ресурс для Константина на Deepseek API
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Константин Лебединский be434efd75 gitignore: игнорировать каталог dumps/ с дампами PostgreSQL 2 weeks ago
backend Initial commit: Edu Helper (Docker, React, Express, Prisma) 2 weeks ago
frontend Initial commit: Edu Helper (Docker, React, Express, Prisma) 2 weeks ago
.dockerignore Initial commit: Edu Helper (Docker, React, Express, Prisma) 2 weeks ago
.env.docker.example Initial commit: Edu Helper (Docker, React, Express, Prisma) 2 weeks ago
.gitignore gitignore: игнорировать каталог dumps/ с дампами PostgreSQL 2 weeks ago
Dockerfile Initial commit: Edu Helper (Docker, React, Express, Prisma) 2 weeks ago
README.md Initial commit: Edu Helper (Docker, React, Express, Prisma) 2 weeks ago
SPRINT.md Initial commit: Edu Helper (Docker, React, Express, Prisma) 2 weeks ago
TEXTBOOK.md Initial commit: Edu Helper (Docker, React, Express, Prisma) 2 weeks ago
docker-compose.yml Initial commit: Edu Helper (Docker, React, Express, Prisma) 2 weeks ago
docker-entrypoint.sh Initial commit: Edu Helper (Docker, React, Express, Prisma) 2 weeks ago
package-lock.json Initial commit: Edu Helper (Docker, React, Express, Prisma) 2 weeks ago
package.json Initial commit: Edu Helper (Docker, React, Express, Prisma) 2 weeks ago
task.txt Initial commit: Edu Helper (Docker, React, Express, Prisma) 2 weeks ago
Запуск EduHelper.command Initial commit: Edu Helper (Docker, React, Express, Prisma) 2 weeks ago

README.md

Edu Helper

Веб-приложение для обучения с ИИ: чат, вопросы, учебники, тесты, «Зал» с фотографиями по датам. Два типа пользователей — наставник и ученик (роли и связка наставник ↔ ученик задаются в БД).

Стек

  • Frontend: React 19, Vite, TypeScript, Tailwind CSS
  • Backend: Node.js, Express, Prisma ORM
  • БД: PostgreSQL 16
  • ИИ: DeepSeek API (ключ в настройках или переменной окружения)
  • Деплой: Docker Compose (один контейнер с API + статикой фронта, отдельно Postgres)

Требования

  • Docker и Docker Compose (для продакшен-сборки)
  • или Node.js 22+ и локальный PostgreSQL (для разработки без Docker)

Быстрый старт (Docker)

  1. Склонируйте репозиторий и перейдите в каталог проекта.

  2. Создайте файл .env в корне репозитория (можно скопировать шаблон):

    cp .env.docker.example .env
    
  3. Отредактируйте .env:

    • задайте JWT_SECRET — длинная случайная строка (не короткий пароль);
    • задайте SEED_TUTOR_PASSWORD и SEED_STUDENT_PASSWORD — пароли первых пользователей (создаются только при пустой таблице User);
    • при необходимости укажите DEEPSEEK_API_KEY;
    • для работы по HTTPS за прокси выставьте COOKIE_SECURE=true; для обычного http://localhost оставьте COOKIE_SECURE=false, иначе cookie с сессией не установится.
  4. Запуск:

    docker compose up -d --build
    
  5. Откройте в браузере: http://localhost:3000 (или порт из APP_PORT в .env).

  6. Проверка API:

    curl http://localhost:3000/api/health
    

При первом старте контейнер приложения выполняет prisma migrate deploy и сид пользователей (если пользователей ещё нет).

Тома данных

  • pgdata — данные PostgreSQL. Пароль пользователя БД задаётся в POSTGRES_PASSWORD только при первом создании тома. Если сменить пароль в .env позже, сам PostgreSQL не пересоздаст пароль автоматически — приложение не подключится (ошибка Prisma P1000). Варианты: вернуть в .env старый пароль, либо сменить пароль вручную в Postgres, либо один раз пересоздать том (данные БД пропадут):

    docker compose down -v
    docker compose up -d --build
    
  • uploads — загруженные файлы «Зала».

Локальная разработка (без Docker)

  1. Поднимите PostgreSQL и создайте базу (например edu_helper).

  2. В каталоге backend создайте .env с DATABASE_URL и остальными переменными по аналогии с корневым .env.docker.example.

  3. Установка и миграции:

    cd backend && npm ci && npx prisma migrate deploy
    
  4. Запуск бэкенда (по умолчанию порт 3001):

    npm run dev
    
  5. В другом терминале — фронт:

    cd frontend && npm ci && npm run dev
    

    Vite откроется на http://localhost:5173; запросы к /api проксируются на бэкенд (см. frontend/vite.config.ts).

Корневой скрипт npm run dev (из корня репозитория, после npm install в корне) поднимает backend и frontend одновременно через concurrently.

Структура репозитория

Путь Назначение
frontend/ SPA (React + Vite)
backend/ API, Prisma-схема и миграции
Dockerfile Сборка фронта и бэка, один образ Node
docker-compose.yml Сервисы app и db, тома pgdata и uploads
docker-entrypoint.sh Миграции Prisma и сид перед стартом Node
.env.docker.example Шаблон переменных для Docker

Файл .env в git не коммитится (см. .gitignore).

Переменные окружения (кратко)

Переменная Описание
POSTGRES_* Пользователь, пароль и имя БД для контейнера Postgres
DATABASE_URL Строка подключения Prisma (в Docker задаётся из POSTGRES_*)
JWT_SECRET Секрет подписи JWT (обязательно задать)
SEED_*_USERNAME / SEED_*_PASSWORD Логины и пароли для первичного сида
DEEPSEEK_API_KEY Опционально: ключ API по умолчанию
COOKIE_SECURE true только при HTTPS
APP_PORT Проброс порта хоста на контейнер приложения (по умолчанию 3000)

Полный список и комментарии — в .env.docker.example.

Лицензия

Укажите лицензию при необходимости (файл LICENSE).