Initial commit: проект документации YARU

This commit is contained in:
2026-03-01 17:32:45 +03:00
commit 243b5caf7e
860 changed files with 13239 additions and 0 deletions
+205
View File
@@ -0,0 +1,205 @@
# Деплой и инфраструктура
## Архитектура развёртывания
```
┌─────────────────┐
│ 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)?