hubmc-datagw/DEPLOYMENT.md

157 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Развертывание HubGW
Инструкции по развертыванию FastAPI-шлюза HubGW.
## Требования
- Python 3.11+
- PostgreSQL 12+
- Poetry (для управления зависимостями)
## Установка
1. Клонируйте репозиторий:
```bash
git clone <repository-url>
cd hubmc-datagw
```
2. Установите зависимости:
```bash
poetry install
```
3. Создайте файл `.env` на основе `.env.example`:
```bash
cp .env.example .env
```
4. Настройте переменные окружения в `.env`:
```env
APP_ENV=prod
APP_HOST=0.0.0.0
APP_PORT=8080
APP_LOG_LEVEL=INFO
DB_DSN=postgresql+asyncpg://user:password@localhost:5432/hubgw
DB_POOL_SIZE=10
DB_MAX_OVERFLOW=10
API_KEY=your-secure-api-key-here
RATE_LIMIT_PER_MIN=1000
```
## Настройка базы данных
1. Создайте базу данных PostgreSQL:
```sql
CREATE DATABASE hubgw;
CREATE USER hubgw_user WITH PASSWORD 'secure_password';
GRANT ALL PRIVILEGES ON DATABASE hubgw TO hubgw_user;
```
2. Создайте таблицы (в будущем будет добавлена миграция):
```sql
-- Таблицы будут созданы автоматически при первом запуске
-- или можно использовать Alembic для миграций
```
## Запуск
### Разработка
```bash
poetry run hubgw
```
### Продакшн с Gunicorn
```bash
poetry run gunicorn hubgw.main:create_app -w 4 -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:8080
```
### Продакшн с Docker
```dockerfile
FROM python:3.11-slim
WORKDIR /app
# Установка Poetry
RUN pip install poetry
# Копирование файлов
COPY pyproject.toml poetry.lock ./
COPY src/ ./src/
# Установка зависимостей
RUN poetry config virtualenvs.create false
RUN poetry install --no-dev
# Запуск приложения
CMD ["poetry", "run", "hubgw"]
```
## Мониторинг
### Логи
Логи сохраняются в директории `logs/` в продакшне:
- `logs/hubgw.log` - основные логи приложения
- Ротация каждый день
- Хранение 30 дней
- Сжатие старых логов
### Health Check
```bash
curl http://localhost:8080/api/v1/health/
```
## Безопасность
1. **API Key**: Используйте сильный, случайный API ключ
2. **HTTPS**: Настройте SSL/TLS в продакшне
3. **Firewall**: Ограничьте доступ к порту 8080
4. **База данных**: Используйте отдельного пользователя БД с минимальными правами
## Масштабирование
### Горизонтальное масштабирование
- Используйте load balancer (nginx, HAProxy)
- Настройте sticky sessions если необходимо
- Используйте внешний Redis для сессий
### Вертикальное масштабирование
- Увеличьте `DB_POOL_SIZE` и `DB_MAX_OVERFLOW`
- Настройте `RATE_LIMIT_PER_MIN` под нагрузку
- Мониторьте использование памяти и CPU
## Резервное копирование
1. **База данных**: Регулярные бэкапы PostgreSQL
2. **Конфигурация**: Сохраните файл `.env` в безопасном месте
3. **Логи**: Архивируйте важные логи
## Обновление
1. Остановите приложение
2. Создайте бэкап базы данных
3. Обновите код
4. Установите новые зависимости: `poetry install`
5. Примените миграции (если есть)
6. Запустите приложение
7. Проверьте работоспособность
## Устранение неполадок
### Проблемы с подключением к БД
- Проверьте строку подключения в `DB_DSN`
- Убедитесь, что PostgreSQL запущен
- Проверьте права пользователя БД
### Проблемы с API
- Проверьте правильность API ключа
- Убедитесь, что заголовок `X-API-Key` передается
- Проверьте логи приложения
### Проблемы с производительностью
- Увеличьте размер пула БД
- Проверьте индексы в базе данных
- Мониторьте использование ресурсов