130 lines
4.7 KiB
Markdown
130 lines
4.7 KiB
Markdown
# 🤖 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 |