add readme
This commit is contained in:
130
README.md
Normal file
130
README.md
Normal file
@@ -0,0 +1,130 @@
|
||||
# 🤖 ChatBot Platform (FastAPI + React + Docker)
|
||||
|
||||
Проект представляет собой веб‑приложение для общения с LLM‑моделью.
|
||||
Архитектура объединяет **FastAPI (backend)**, **React (frontend SPA)**,
|
||||
**Nginx (reverse proxy)** и **Certbot (SSL)** для развёртывания под HTTPS.
|
||||
|
||||
---
|
||||
|
||||
## 📂 Структура проекта
|
||||
|
||||
```
|
||||
├── Dockerfile # Сборка backend
|
||||
├── docker-compose.yml # Контейнеризация сервисов
|
||||
├── requirements.txt # Python зависимости
|
||||
├── README.md
|
||||
|
||||
├── app/ # Backend (FastAPI)
|
||||
│ ├── api.py # Роуты (REST + Bot API)
|
||||
│ ├── crud.py # CRUD операции
|
||||
│ ├── database.py # Подключение к БД (SQLAlchemy Async)
|
||||
│ ├── main.py # Точка входа FastAPI
|
||||
│ ├── models.py # SQLAlchemy модели
|
||||
│ ├── openrouter_client.py # LLM клиент к OpenRouter API
|
||||
│ └── schemas.py # Pydantic схемы
|
||||
|
||||
├── bot.py # Telegram‑бот (взаимодействие с backend)
|
||||
|
||||
├── frontend/ # Frontend (React + Vite)
|
||||
│ ├── index.html
|
||||
│ ├── src/
|
||||
│ │ ├── App.jsx
|
||||
│ │ ├── api.js # Работа с backend API
|
||||
│ │ ├── components/ # UI компоненты (ChatList, ChatWindow и т.п.)
|
||||
│ │ ├── pages/ # Страницы (Home, ChatPage, UserProfile)
|
||||
│ │ └── styles/ # CSS стили
|
||||
│ ├── package.json
|
||||
│ └── vite.config.js
|
||||
|
||||
├── nginx/
|
||||
│ ├── nginx.conf # Конфигурация reverse proxy
|
||||
│ └── certbot/ # Webroot для Let's Encrypt challenge
|
||||
|
||||
# Скрипты управления
|
||||
├── getcert.sh # Получение SSL сертификата (init cert)
|
||||
├── install.sh # Установка и первый запуск
|
||||
├── run.sh # Запуск сервиса
|
||||
└── stop.sh # Остановка сервисов
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ Основные возможности
|
||||
|
||||
- 👤 Ведение профиля пользователя
|
||||
- 💬 Поддержка чат‑диалогов ( CRUD для чатов и сообщений )
|
||||
- 🧠 Генерация ответов через **OpenRouter API** (LLM)
|
||||
- 🌐 Веб‑интерфейс (React SPA) для работы с чатами
|
||||
- 🤖 Поддержка **Telegram‑бота** (через `bot.py`)
|
||||
- 🔐 HTTPS через Let's Encrypt + Certbot
|
||||
|
||||
---
|
||||
|
||||
## 🛠 Установка и запуск
|
||||
|
||||
### 1. Клонировать проект
|
||||
```bash
|
||||
git clone http://185.160.137.213:3030/drholy/llm-chatbot
|
||||
cd llm-chatbot
|
||||
```
|
||||
|
||||
### 2. Установить зависимости (при локальной разработке backend)
|
||||
```bash
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### 3. Запустить сервисы в Docker
|
||||
```bash
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
### 4. Получить первый SSL сертификат
|
||||
```bash
|
||||
./getcert.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📡 API endpoints (backend)
|
||||
|
||||
- `GET /history/{telegram_id}` — История переписки пользователя
|
||||
- `POST /chat/{telegram_id}` — Отправка сообщения, получение ответа от LLM
|
||||
- `GET /profile` — Профиль пользователя
|
||||
- `GET /chats` — Список чатов
|
||||
- `GET /chats/{chat_id}/messages` — Сообщения конкретного чата
|
||||
- `POST /chats/{chat_id}/messages` — Добавить сообщение в чат
|
||||
|
||||
---
|
||||
|
||||
## 🧑💻 Режим разработки
|
||||
|
||||
### Backend (FastAPI)
|
||||
```bash
|
||||
uvicorn app.main:app --reload
|
||||
```
|
||||
По умолчанию поднимается на `http://localhost:8000`.
|
||||
|
||||
### Frontend (React)
|
||||
```bash
|
||||
cd frontend
|
||||
npm install
|
||||
npm run dev
|
||||
```
|
||||
Фронт доступен на `http://localhost:5173`.
|
||||
|
||||
---
|
||||
|
||||
## 🔐 SSL и Certbot
|
||||
|
||||
- `getcert.sh` — скрипт для получения первого сертификата.
|
||||
- Certbot внутри контейнера автоматически продлевает сертификаты.
|
||||
- Пути к действующим ключам:
|
||||
- `/etc/letsencrypt/live/<your-domain>/fullchain.pem`
|
||||
- `/etc/letsencrypt/live/<your-domain>/privkey.pem`
|
||||
|
||||
---
|
||||
|
||||
## 📜 Лицензия
|
||||
MIT © 2025 DrHoly
|
||||
Reference in New Issue
Block a user