transcription/scripts/deploy.sh

68 lines
2.4 KiB
Bash
Raw Permalink Normal View History

#!/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'"