# ⚡ Быстрое развёртывание FastAPI для начисления
## 🚀 В одну команду (на удалённом сервере)
### Предварительные условия
- SSH доступ к 192.168.0.137
- Python 3.8+ с venv
- Git (опционально)
### Команды развёртывания
```bash
# 1. Синхронизация кода с локальной машины
rsync -avz --delete \
/Users/aleksandrhohon/Downloads/OpenWeatherMap_MCP-main/fastapi_udalennii/ \
192.168.0.137:/opt/fastapi_udalennii/
# 2. SSH на удалённый сервер
ssh 192.168.0.137
# 3. На удалённом сервере:
cd /opt/fastapi_udalennii && \
source venv/bin/activate && \
pip install -r requirements.txt && \
alembic upgrade head && \
supervisorctl restart fastapi_app
# 4. Проверка
curl http://192.168.0.137:8000/health
```
---
## 📋 Пошаговое развёртывание
### Локально (ваша машина)
```bash
# 1. Перейдите в каталог проекта
cd /Users/aleksandrhohon/Downloads/OpenWeatherMap_MCP-main
# 2. Синхронизируйте код на удалённый сервер
rsync -avz --delete \
./fastapi_udalennii/ \
192.168.0.137:/opt/fastapi_udalennii/
# Если нужно указать пользователя:
rsync -avz --delete -e "ssh -l username" \
./fastapi_udalennii/ \
192.168.0.137:/opt/fastapi_udalennii/
```
### На удалённом сервере
```bash
# 1. Подключение
ssh 192.168.0.137
# или
ssh username@192.168.0.137
# 2. Перейдите в каталог
cd /opt/fastapi_udalennii
# 3. Активируйте виртуальное окружение (если не создано)
python3 -m venv venv
source venv/bin/activate
# 4. Установите зависимости
pip install -r requirements.txt
# 5. Запустите миграции БД
alembic upgrade head
# 6. Перезагрузите FastAPI сервис
# Опция A: supervisor
supervisorctl restart fastapi_app
# Опция B: systemd
sudo systemctl restart fastapi_app
# Опция C: gunicorn вручную (если нет supervisor/systemd)
pkill -f "gunicorn.*fastapi" || true
gunicorn --workers 4 \
--worker-class uvicorn.workers.UvicornWorker \
--bind 0.0.0.0:8000 \
--daemon \
app.main:app
# 7. Проверьте статус
curl http://192.168.0.137:8000/health
curl http://192.168.0.137:8000/docs # OpenAPI UI
```
---
## ✅ Проверка после развёртывания
### Endpoints для проверки
```bash
# Health check
curl http://192.168.0.137:8000/health
# Ожидается: {"status": "ok"}
# OpenAPI документация
curl http://192.168.0.137:8000/docs
# Должна открыться веб-интерфейс с документацией
# Получить список всех начисления
curl http://192.168.0.137:8000/accruals/
# Ожидается: JSON массив (может быть пустой)
# Получить статистику
curl http://192.168.0.137:8000/stats/summary
# Ожидается: JSON с total_count, total_amount и т.д.
```
### Создание тестовой записи
```bash
curl -X POST http://192.168.0.137:8000/accruals/ \
-H "Content-Type: application/json" \
-d '{
"id_accrual": "TEST_001",
"accrual_date": "2025-12-08",
"service_group": "Доставка",
"accrual_type": "Комиссия",
"sales_platform": "Ozon",
"total_amount_rub": 1000.00
}'
```
---
## 🔧 Для разработчиков
### Работа с миграциями
```bash
# Просмотр статуса миграций
alembic current
# Просмотр истории миграций
alembic history
# Запуск новой миграции (после изменения моделей)
alembic revision --autogenerate -m "Описание изменений"
alembic upgrade head
# Откат на одну версию назад
alembic downgrade -1
# Откат на конкретную версию
alembic downgrade 0001_create_users
```
### Работа с БД напрямую
```bash
# Подключение к PostgreSQL
psql postgresql://asx:asxAdmin1@192.168.0.134:5432/mydb
# В psql:
\dt # Список таблиц
SELECT * FROM accruals; # Просмотр записей
```
### Логирование
```bash
# Просмотр логов FastAPI (если используется supervisor)
supervisorctl tail fastapi_app
# Или (если используется systemd)
sudo journalctl -u fastapi_app -f
# Или (если запущен в foreground)
tail -f /var/log/fastapi_app.log
```
---
## 🚨 Решение проблем
### Ошибка: "Connection refused"
```bash
# Проверьте, что FastAPI запущен
curl -v http://192.168.0.137:8000/health
# Проверьте слушающие порты
netstat -tlnp | grep 8000
# Проверьте логи
supervisorctl tail fastapi_app
```
### Ошибка миграций: "Revision doesn't exist"
```bash
# Проверьте текущую версию миграции
alembic current
# Список всех версий
alembic history
# Если нужно синхронизировать:
alembic stamp 0001_create_users # Установить на последнюю известную
alembic upgrade head
```
### Ошибка БД: "No such table"
```bash
# Убедитесь, что миграции запущены
alembic upgrade head
# Проверьте, что таблица создана
psql postgresql://asx:asxAdmin1@192.168.0.134:5432/mydb \
-c "SELECT * FROM accruals LIMIT 1;"
```
### Ошибка импорта модулей
```bash
# Убедитесь, что venv активирован
source venv/bin/activate
# Переустановите зависимости
pip install --upgrade -r requirements.txt
# Проверьте Python версию (должна быть 3.8+)
python --version
```
---
## 🔒 Security Checklist
- [ ] Изменены пароли БД
- [ ] Настроена переменная окружения DATABASE_URL
- [ ] Активирован HTTPS (если нужно)
- [ ] Настроен firewall для открытия только необходимых портов
- [ ] Файл .env добавлен в .gitignore
- [ ] Логирование настроено и включено
- [ ] Настроены backup'ы БД
---
## 📊 Мониторинг
```bash
# Проверка нагрузки на сервер
top
# Проверка используемого диска
df -h
# Проверка памяти
free -h
# Проверка загрузки БД
psql postgresql://asx:asxAdmin1@192.168.0.134:5432/mydb -c \
"SELECT COUNT(*) FROM accruals;"
# Статистика подключений
psql postgresql://asx:asxAdmin1@192.168.0.134:5432/mydb -c \
"SELECT datname, count(*) FROM pg_stat_activity GROUP BY datname;"
```
---
## 🎯 Итого
После развёртывания:
- ✅ FastAPI доступен на `http://192.168.0.137:8000`
- ✅ Endpoints для accruals работают
- ✅ Статистика и фильтрация доступны
- ✅ Интеграция с Deepseek работает через ACCRUALS_API_URL
**Готово к использованию! 🚀**