68 lines
2.4 KiB
Bash
68 lines
2.4 KiB
Bash
|
|
#!/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'"
|