Files

206 lines
5.3 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.
# Деплой и инфраструктура
## Архитектура развёртывания
```
┌─────────────────┐
│ Nginx/Traefik │
│ (reverse proxy)│
└────────┬────────┘
│
┌──────────────┼──────────────┐
│ │ │
┌────────▼───────┐ ┌───▼────────┐ ┌───▼────────┐
│ FastAPI App │ │ FastAPI │ │ PostgreSQL│
│ (instance 1) │ │ (instance 2)│ │ + pgqueue │
└────────────────┘ └────────────┘ └────────────┘
```
---
## Docker контейнеризация
### Структура проекта
```
yaru.nixg.ru/
├── docker-compose.yml # Основной compose для разработки
├── docker-compose.prod.yml # Production конфигурация
├── Dockerfile # Образ приложения
└── docker/
├── nginx/
└── postgres/
```
### docker-compose.yml (разработка)
```yaml
version: '3.8'
services:
db:
image: postgres:15
environment:
POSTGRES_DB: yaru
POSTGRES_USER: yaru
POSTGRES_PASSWORD: yaru_dev
volumes:
- postgres_data:/var/lib/postgresql/data
app:
build: .
command: uvicorn main:app --reload --host 0.0.0.0
volumes:
- .:/app
environment:
DATABASE_URL: postgresql://yaru:yaru_dev@db/yaru
depends_on:
- db
nginx:
image: nginx:alpine
ports:
- "8000:80"
volumes:
- ./docker/nginx/dev.conf:/etc/nginx/nginx.conf
volumes:
postgres_data:
```
---
## Production развёртывание
### Требования
- [ ] VPS с Ubuntu 22.04+ (минимум 2GB RAM, 2 CPU)
- [ ] Домен с настроенным DNS
- [ ] SSL сертификат (Let's Encrypt)
### Переменные окружения (production)
```bash
# База данных
DATABASE_URL=postgresql://yaru:***@localhost/yaru_prod
DATABASE_POOL_SIZE=20
# Безопасность
SECRET_KEY=***
JWT_EXPIRE_HOURS=24
# Файлы
MEDIA_ROOT=/var/yaru/media
MAX_UPLOAD_SIZE=50MB
# Fediverse
SERVER_DOMAIN=yaru.nixg.ru
SERVER_NAME=YARU
# Логирование
LOG_LEVEL=INFO
```
---
## CI/CD пайплайн
### GitHub Actions (пример)
```yaml
name: Deploy
on:
push:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run tests
run: pytest
deploy:
needs: test
runs-on: ubuntu-latest
steps:
- name: Deploy to VPS
run: |
ssh user@server "cd /var/yaru && docker-compose pull && docker-compose up -d"
```
---
## Мониторинг и логирование
### Логи
- [ ] Access logs (Nginx)
- [ ] Application logs (FastAPI → JSON format)
- [ ] Database logs (PostgreSQL slow queries)
### Метрики для мониторинга
- [ ] Response time (p50, p95, p99)
- [ ] Error rate
- [ ] Active users
- [ ] Posts per hour
- [ ] Federation activities
### Инструменты
- [ ] Prometheus + Grafana (метрики)
- [ ] Loki (логи)
- [ ] Uptime Kuma (доступность)
---
## Резервное копирование
### Что备份ровать
- [ ] PostgreSQL дамп (ежедневно)
- [ ] Медиафайлы (ежедневно)
- [ ] Конфигурационные файлы
### Стратегия
```bash
# Ежедневный бэкап БД
pg_dump -U yaru yaru > /backups/yaru_$(date +%Y%m%d).sql
# Синхронизация медиа
rsync -av /var/yaru/media /backups/media/
# Хранение: 7 дней локально, 30 дней в облаке
```
---
## Масштабирование
### Горизонтальное
- [ ] Несколько инстансов FastAPI за load balancer
- [ ] PostgreSQL репликация (read replicas)
- [ ] CDN для статики и медиа
### Оптимизация
- [ ] Кэширование лент в Redis
- [ ] Индексы PostgreSQL для частых запросов
- [ ] Фоновая отправка ActivityPub через очереди
---
## Чеклист деплоя
- [ ] Купить домен, настроить DNS
- [ ] Подготовить VPS (Ubuntu, firewall, SSH keys)
- [ ] Установить Docker + Docker Compose
- [ ] Настроить Nginx + SSL (Let's Encrypt)
- [ ] Развернуть PostgreSQL
- [ ] Запустить FastAPI приложение
- [ ] Настроить бэкапы
- [ ] Настроить мониторинг
- [ ] Протестировать ActivityPub federation
---
## Вопросы для обсуждения
- [ ] Какой хостинг выбрать (Timeweb, Selectel, Hetzner, DigitalOcean)?
- [ ] Нужен ли отдельный сервер для БД или всё на одном VPS?
- [ ] Использовать ли managed PostgreSQL или свой инстанс?
- [ ] Требуется ли CDN для медиа (Cloudflare, BunnyCDN)?