transcription/scripts/deploy.sh
keboss-m eee8f4c8a4 Replace LightRAG with native Python RAG engine + add deploy tooling
- New: src/rag/engine/ — in-process hybrid search (FTS5 BM25 + sqlite-vec + LLM rerank)
- New: src/rag/qmd/ — compatibility layer (qmd_query, qmd_chat, qmd_chat_stream, qmd_index_*)
- New: src/ingest/stub_writer.py — .md stubs for binary files (videos, archives)
- New: scripts/deploy.sh + scripts/pull_models.sh + Makefile + .env.example
- Removed: LightRAG, sentence-transformers embedding via separate package, rag_standalone/
- Removed: @nousresearch/qmd npm dep (package not published); Node.js from Dockerfile
- Updated: tests/ (46 passed), docker-compose, .dockerignore, config.yaml, README

Engine: in-process Python (no daemon, no npm), sentence-transformers 384-dim,
RRF fusion (k=60), BM25 + vector with numpy fallback. WebSocket API unchanged.

Deploy: 'git clone' + 'make init' + 'make pull-models MODELS_SOURCE=...' + 'make up'.
Models (5.83 GB) live outside git; pulled via rsync from dev host.
2026-06-10 14:24:01 +03:00

68 lines
2.4 KiB
Bash
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.

#!/usr/bin/env bash
# scripts/deploy.sh — деплой кода на удалённый сервер через rsync + ssh.
#
# Использование:
# ./scripts/deploy.sh user@server /opt/transcription
# SERVER=user@server REMOTE_DIR=/opt/transcription ./scripts/deploy.sh
#
# Что делает:
# 1) rsync кода (исключая models, processed, uploads, data, tmp, .git, migrate)
# 2) Копирует .env (на текущем этапе — целиком с ключами; позже — Vault)
# 3) По SSH запускает на сервере: make pull-models && make up
#
# Переменные окружения:
# SERVER — user@host (обязательно)
# REMOTE_DIR — путь на сервере (по умолчанию /opt/transcription)
# WITH_ENV — если "1", копирует локальный .env на сервер (по умолчанию 1)
# MODELS_SOURCE — путь к моделям (если пусто — на сервере попробует fallback)
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
SERVER="${1:-${SERVER:-}}"
REMOTE_DIR="${2:-${REMOTE_DIR:-/opt/transcription}}"
WITH_ENV="${WITH_ENV:-1}"
if [ -z "$SERVER" ]; then
echo "Usage: $0 user@server [/opt/transcription]" >&2
echo "Or: SERVER=user@server REMOTE_DIR=/path $0" >&2
exit 1
fi
echo "[deploy] Target: $SERVER:$REMOTE_DIR"
# 1. rsync кода
echo "[deploy] Syncing code..."
rsync -avz --progress \
--exclude='.git' \
--exclude='models/' \
--exclude='processed/' \
--exclude='uploads/' \
--exclude='tmp/' \
--exclude='data/' \
--exclude='migrate/' \
--exclude='__pycache__/' \
--exclude='.pytest_cache/' \
--exclude='.env' \
--exclude='*.log' \
"$PROJECT_ROOT/" "$SERVER:$REMOTE_DIR/"
# 2. .env (если включено)
if [ "$WITH_ENV" = "1" ] && [ -f "$PROJECT_ROOT/.env" ]; then
echo "[deploy] Copying .env (with secrets)..."
scp "$PROJECT_ROOT/.env" "$SERVER:$REMOTE_DIR/.env"
else
echo "[deploy] .env not copied (WITH_ENV=$WITH_ENV). Run 'make init' on server."
fi
# 3. Remote deploy
echo "[deploy] Triggering remote deploy..."
ssh "$SERVER" "cd $REMOTE_DIR && \
export MODELS_SOURCE='${MODELS_SOURCE:-}' && \
make pull-models && \
make up"
echo "[deploy] Done. Check logs: ssh $SERVER 'cd $REMOTE_DIR && make logs'"