mirror of
https://gitverse.ru/kpa39l/yaru.nixg.ru.git
synced 2026-09-29 09:55:06 +00:00
Initial commit: проект документации YARU
This commit is contained in:
@@ -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)?
|
||||
Reference in New Issue
Block a user