Initial commit: VoIdeaAI - voice-first AI idea assistant
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
# Runbook: Запуск проекта
|
||||
|
||||
---
|
||||
|
||||
## Первый запуск
|
||||
|
||||
```bash
|
||||
# 1. Клонировать репозиторий
|
||||
git clone <repo> && cd <repo>
|
||||
|
||||
# 2. Настроить окружение
|
||||
cp .env.example .env
|
||||
# Редактировать .env: JWT_SECRET_KEY, DATABASE_URL
|
||||
|
||||
# 3. Установить зависимости
|
||||
pip install -r requirements.txt
|
||||
|
||||
# 4. Запустить
|
||||
uvicorn app.main:app --reload --host 0.0.0.0 --port 8020
|
||||
```
|
||||
|
||||
## Проверка
|
||||
|
||||
```bash
|
||||
curl http://localhost:8020/health
|
||||
# → {"status": "healthy"}
|
||||
curl http://localhost:8020/docs
|
||||
# → Swagger UI
|
||||
```
|
||||
|
||||
## Остановка
|
||||
|
||||
```bash
|
||||
Ctrl+C # или kill $(pgrep -f uvicorn)
|
||||
```
|
||||
@@ -0,0 +1,36 @@
|
||||
# Runbook: Резервное копирование
|
||||
|
||||
---
|
||||
|
||||
## SQLite
|
||||
|
||||
```bash
|
||||
# Ручной бэкап
|
||||
cp app.db app.db.backup.$(date +%Y%m%d)
|
||||
|
||||
# Автоматический (cron)
|
||||
0 3 * * * cp /path/to/app.db /path/to/backups/app.db.$(date +\%Y\%m\%d)
|
||||
```
|
||||
|
||||
## PostgreSQL
|
||||
|
||||
```bash
|
||||
# Ручной бэкап
|
||||
pg_dump -U voidea -d voidea > backup.$(date +%Y%m%d).sql
|
||||
|
||||
# Восстановление
|
||||
psql -U voidea -d voidea < backup.sql
|
||||
|
||||
# Автоматический (cron)
|
||||
0 3 * * * pg_dump -U voidea -d voidea | gzip > /backups/db.$(date +\%Y\%m\%d).sql.gz
|
||||
```
|
||||
|
||||
## Что бэкапить
|
||||
- Базу данных (ежедневно)
|
||||
- .env (секреты, отдельно, в Vault/1Password)
|
||||
- User uploaded files (если есть)
|
||||
|
||||
## Хранение
|
||||
- Последние 7 дней: локально
|
||||
- Последние 30 дней: S3/облако
|
||||
- Старше 30 дней: удалять
|
||||
@@ -0,0 +1,53 @@
|
||||
# Runbook: Инциденты
|
||||
|
||||
---
|
||||
|
||||
## Сервис недоступен
|
||||
|
||||
```bash
|
||||
# 1. Проверить что процесс жив
|
||||
ps aux | grep uvicorn
|
||||
|
||||
# 2. Проверить логи
|
||||
journalctl -u voidea -n 50 --no-pager
|
||||
|
||||
# 3. Перезапустить
|
||||
systemctl restart voidea
|
||||
|
||||
# 4. Проверить
|
||||
curl http://localhost:8020/health
|
||||
|
||||
# 5. Если не помогло → rollback
|
||||
git checkout <previous-stable-tag>
|
||||
systemctl restart voidea
|
||||
```
|
||||
|
||||
## База данных недоступна
|
||||
|
||||
```bash
|
||||
# 1. Проверить PostgreSQL
|
||||
systemctl status postgresql
|
||||
|
||||
# 2. Проверить логи
|
||||
journalctl -u postgresql -n 50
|
||||
|
||||
# 3. Перезапустить
|
||||
systemctl restart postgresql
|
||||
|
||||
# 4. Если повреждена → восстановить из backup
|
||||
# psql -U voidea -d voidea < backup.sql
|
||||
```
|
||||
|
||||
## Высокая загрузка CPU
|
||||
|
||||
```bash
|
||||
# 1. Найти процесс
|
||||
top -o %CPU
|
||||
|
||||
# 2. Найти endpoint
|
||||
tail -n 100 /var/log/voidea/access.log
|
||||
|
||||
# 3. Временно отключить (если endpoint не критичен)
|
||||
|
||||
# 4. Разбираться после восстановления
|
||||
```
|
||||
@@ -0,0 +1,28 @@
|
||||
# Runbook: Масштабирование
|
||||
|
||||
---
|
||||
|
||||
## Когда масштабироваться
|
||||
|
||||
| Метрика | Действие |
|
||||
|---------|----------|
|
||||
| CPU > 80% постоянно | Добавить ядер/воркеров |
|
||||
| RAM > 80% | Увеличить RAM |
|
||||
| DB > 10M записей | Индексы → шардинг |
|
||||
| Response time p95 > 1s | Кэширование → реплики БД |
|
||||
|
||||
## Как масштабировать
|
||||
|
||||
### Vertical (проще)
|
||||
```bash
|
||||
# Увеличить ресурсы VPS
|
||||
# Затем перезапустить
|
||||
systemctl restart voidea
|
||||
```
|
||||
|
||||
### Horizontal (сложнее)
|
||||
```bash
|
||||
# 1. Поставить load balancer (Nginx)
|
||||
# 2. Запустить несколько инстансов
|
||||
# 3. Настроить shared session/кэш (Redis)
|
||||
```
|
||||
@@ -0,0 +1,41 @@
|
||||
# Runbook: Обновление
|
||||
|
||||
---
|
||||
|
||||
## Обновление с нулевым даунтаймом
|
||||
|
||||
```bash
|
||||
# 1. Задеплоить новую версию на второй порт (8021)
|
||||
# 2. Проверить health нового инстанса
|
||||
curl http://localhost:8021/health
|
||||
|
||||
# 3. Переключить Nginx на новый порт
|
||||
# 4. Остановить старый инстанс
|
||||
```
|
||||
|
||||
## Обновление зависимостей
|
||||
|
||||
```bash
|
||||
# 1. Обновить requirements.txt
|
||||
pip install --upgrade -r requirements.txt
|
||||
|
||||
# 2. Проверить
|
||||
ruff check .
|
||||
pytest
|
||||
|
||||
# 3. Закоммитить
|
||||
git add requirements.txt && git commit -m "chore: update dependencies"
|
||||
```
|
||||
|
||||
## Откат
|
||||
|
||||
```bash
|
||||
# 1. Откатить код
|
||||
git revert HEAD
|
||||
|
||||
# 2. Откатить БД (если была миграция)
|
||||
alembic downgrade -1
|
||||
|
||||
# 3. Перезапустить
|
||||
systemctl restart voidea
|
||||
```
|
||||
Reference in New Issue
Block a user