Document deploy workflow in README.md and AGENTS.md

This commit is contained in:
keboss-m 2026-06-10 14:27:35 +03:00
parent eee8f4c8a4
commit 80d665e948
2 changed files with 114 additions and 0 deletions

View File

@ -49,3 +49,39 @@ through OpenCode.
- sqlite-vec недоступен → numpy cosine in-memory. - sqlite-vec недоступен → numpy cosine in-memory.
- Embedding-модель не загрузилась → BM25-only режим. - Embedding-модель не загрузилась → BM25-only режим.
## Deploy
**Архитектура: код в git, модели отдельно (rsync).**
- `Makefile` — основные цели: `init`, `pull-models`, `up`, `down`, `restart`, `logs`, `status`, `test`, `deploy`.
- `scripts/pull_models.sh``MODELS_SOURCE=user@host:path` → rsync моделей; fallback на `download_models.py` из интернета.
- `scripts/deploy.sh` — rsync кода + `.env` + `make pull-models && make up` на удалённом сервере.
- `.env.example` — коммитится. `.env` — нет (в `.gitignore`).
### Что в git / что нет
| В git (~2 MB) | НЕ в git |
|---|---|
| `src/`, `backend/`, `tests/`, `scripts/`, `Makefile` | `models/` (5.83 GB) |
| `Dockerfile*`, `docker-compose*.yml`, `config.yaml` | `processed/`, `uploads/`, `data/` (рантайм) |
| `AGENTS.md`, `README.md`, `.env.example` | `migrate/*.tar.gz` (9.5 GB) |
| `openspec/` (спецификации) | `.env` (секреты) |
### Деплой одной командой (с исходной машины)
```bash
git add -A && git commit -m "..." && git push origin main
./scripts/deploy.sh user@server /opt/transcription
```
### Первый запуск на новом сервере
```bash
git clone https://gts.meratalk.online/keboss/transcription.git /opt/transcription
cd /opt/transcription
make init # .env из .env.example
nano .env # вписать HF_TOKEN, OPENCODE_API_KEY
make pull-models MODELS_SOURCE=user@dev-host:/opt/transcription/models/
make up
```

View File

@ -449,6 +449,84 @@ python start_server.py
| `/api/files/content?path=...` | GET | Содержимое файла | | `/api/files/content?path=...` | GET | Содержимое файла |
| `/api/files/download?path=...` | GET | Скачивание файла | | `/api/files/download?path=...` | GET | Скачивание файла |
## 🚀 Деплой (git + rsync моделей)
Архитектура: **только код в git** (~2 MB), **модели отдельно** (5.83 GB через bind-mount). `.env` с секретами исключён из git, разворачивается вручную или через `scripts/deploy.sh`.
### На исходной машине (один раз после изменений)
```bash
# Коммит и push кода
git add -A
git commit -m "..."
git push origin main
# Деплой на сервер (rsync + remote make)
./scripts/deploy.sh user@server /opt/transcription
```
`scripts/deploy.sh` делает:
1. `rsync` кода (исключая `models/`, `processed/`, `data/`, `migrate/`, `.git`)
2. Копирует `.env` (с секретами) на сервер
3. По SSH: `make pull-models MODELS_SOURCE=... && make up`
### На новом сервере (Linux + Docker)
```bash
# 1. Установить Docker
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER # перелогиниться
# 2. Клонировать код
git clone https://gts.meratalk.online/keboss/transcription.git /opt/transcription
cd /opt/transcription
# 3. Создать .env
make init # cp .env.example .env
nano .env # вписать HF_TOKEN, OPENCODE_API_KEY, JWT_SECRET
# 4. Загрузить модели (5.83 GB) одним из способов:
make pull-models MODELS_SOURCE=user@dev-host:/opt/transcription/models/
# или
rsync -avz user@dev-host:/opt/transcription/models/ ./models/
# 5. Запустить
make up # docker compose up --build -d
# 6. Проверить
make status # docker compose ps + curl /api/health
make logs # docker compose logs -f transcription
```
### Make-цели (шпаргалка)
```bash
make help # список всех целей
make init # создать .env из .env.example
make pull-models # rsync моделей (нужна MODELS_SOURCE)
make up # build + запуск
make down # остановка
make restart # перезапуск без rebuild
make logs # логи в follow
make status # ps + /api/health
make test # pytest
make deploy # pull-models + up (всё вместе)
make clean # down -v (ОСТОРОЖНО: стирает volumes)
```
### Почему не Git LFS?
5.83 GB моделей в git = тяжёлый clone, раздутая история. Rsync быстрее, проще, безопаснее. Если позже понадобится — добавим Git LFS отдельным шагом.
### Где живут секреты
| Файл | В git? | Где на сервере |
|---|---|---|
| `.env.example` | ✅ да | — |
| `.env` | ❌ нет | копируется `scripts/deploy.sh` или вручную |
| `config.yaml` | ✅ да | bind-mount `:ro` в compose |
| `models/` | ❌ нет | bind-mount `./models/huggingface:/root/.cache/huggingface` |
## Ограничения ## Ограничения
- Перекрывающаяся речь (overlap) распознаётся плохо - Перекрывающаяся речь (overlap) распознаётся плохо