Initial commit: Edu Helper (Docker, React, Express, Prisma)
Made-with: Cursor
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
# Edu Helper
|
||||
|
||||
Веб-приложение для обучения с ИИ: чат, вопросы, учебники, тесты, «Зал» с фотографиями по датам. Два типа пользователей — **наставник** и **ученик** (роли и связка наставник ↔ ученик задаются в БД).
|
||||
|
||||
## Стек
|
||||
|
||||
- **Frontend:** React 19, Vite, TypeScript, Tailwind CSS
|
||||
- **Backend:** Node.js, Express, Prisma ORM
|
||||
- **БД:** PostgreSQL 16
|
||||
- **ИИ:** DeepSeek API (ключ в настройках или переменной окружения)
|
||||
- **Деплой:** Docker Compose (один контейнер с API + статикой фронта, отдельно Postgres)
|
||||
|
||||
## Требования
|
||||
|
||||
- [Docker](https://docs.docker.com/get-docker/) и Docker Compose (для продакшен-сборки)
|
||||
- или **Node.js 22+** и локальный PostgreSQL (для разработки без Docker)
|
||||
|
||||
## Быстрый старт (Docker)
|
||||
|
||||
1. Склонируйте репозиторий и перейдите в каталог проекта.
|
||||
|
||||
2. Создайте файл `.env` в **корне** репозитория (можно скопировать шаблон):
|
||||
|
||||
```bash
|
||||
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. Запуск:
|
||||
|
||||
```bash
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
5. Откройте в браузере: **http://localhost:3000** (или порт из `APP_PORT` в `.env`).
|
||||
|
||||
6. Проверка API:
|
||||
|
||||
```bash
|
||||
curl http://localhost:3000/api/health
|
||||
```
|
||||
|
||||
При первом старте контейнер приложения выполняет `prisma migrate deploy` и сид пользователей (если пользователей ещё нет).
|
||||
|
||||
### Тома данных
|
||||
|
||||
- **`pgdata`** — данные PostgreSQL. Пароль пользователя БД задаётся в **`POSTGRES_PASSWORD`** только при **первом** создании тома. Если сменить пароль в `.env` позже, сам PostgreSQL **не** пересоздаст пароль автоматически — приложение не подключится (ошибка Prisma `P1000`). Варианты: вернуть в `.env` старый пароль, либо сменить пароль вручную в Postgres, либо **один раз** пересоздать том (данные БД пропадут):
|
||||
|
||||
```bash
|
||||
docker compose down -v
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
- **`uploads`** — загруженные файлы «Зала».
|
||||
|
||||
## Локальная разработка (без Docker)
|
||||
|
||||
1. Поднимите PostgreSQL и создайте базу (например `edu_helper`).
|
||||
|
||||
2. В каталоге **`backend`** создайте `.env` с `DATABASE_URL` и остальными переменными по аналогии с корневым `.env.docker.example`.
|
||||
|
||||
3. Установка и миграции:
|
||||
|
||||
```bash
|
||||
cd backend && npm ci && npx prisma migrate deploy
|
||||
```
|
||||
|
||||
4. Запуск бэкенда (по умолчанию порт **3001**):
|
||||
|
||||
```bash
|
||||
npm run dev
|
||||
```
|
||||
|
||||
5. В другом терминале — фронт:
|
||||
|
||||
```bash
|
||||
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`).
|
||||
Reference in New Issue
Block a user