Files
yuriandClaude Opus 5.5 9749da5ae7 Lead Radar: исходный код
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-25 23:11:04 +04:00

49 lines
2.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# Выкладка Lead Radar на VPS: исходники → сборка образов на сервере → контейнеры.
# Запускается НА MAC из папки leadradar: ./deploy.sh
# Перед первым запуском на VPS должен лежать /opt/leadradar/.env (см. deploy/.env.production.example).
set -euo pipefail
VPS_HOST="${VPS_HOST:-root@188.116.21.175}"
SSH_KEY="${SSH_KEY:-$HOME/.ssh/yandp_vps}"
REMOTE_DIR="/opt/leadradar"
NPM_CONTAINER="nginx-proxy-manager"
SSH="ssh -i $SSH_KEY -o IdentitiesOnly=yes"
cd "$(dirname "$0")"
echo "→ Проверки перед выкладкой"
pnpm typecheck
pnpm test
# Файл compose проверяется здесь, а не на сервере: ошибка в нём не должна доезжать до выкладки.
POSTGRES_PASSWORD=check APP_URL=https://check NPM_NETWORK=proxy docker compose -f deploy/docker-compose.prod.yml config -q
echo "→ Загрузка исходников на $VPS_HOST"
$SSH "$VPS_HOST" "mkdir -p $REMOTE_DIR/app $REMOTE_DIR/backups"
rsync -az --delete -e "$SSH" \
--exclude node_modules --exclude dist --exclude data --exclude '.env' --exclude '.env.*' --exclude .git --exclude .DS_Store \
./ "$VPS_HOST:$REMOTE_DIR/app/"
echo "→ Сборка и запуск на сервере"
$SSH "$VPS_HOST" REMOTE_DIR="$REMOTE_DIR" NPM_CONTAINER="$NPM_CONTAINER" bash -s <<'REMOTE'
set -euo pipefail
cd "$REMOTE_DIR"
[ -f .env ] || { echo "Нет $REMOTE_DIR/.env — создайте его по образцу app/deploy/.env.production.example"; exit 1; }
NET=$(docker inspect "$NPM_CONTAINER" -f '{{range $k,$v := .NetworkSettings.Networks}}{{$k}}{{"\n"}}{{end}}' | head -n1)
[ -n "$NET" ] || { echo "Не удалось определить сеть NPM"; exit 1; }
COMPOSE="docker compose --env-file .env -f app/deploy/docker-compose.prod.yml"
NPM_NETWORK="$NET" BACKUP_DIR="$REMOTE_DIR/backups" $COMPOSE up -d --build
# Сервис стартует не мгновенно (миграции, запуск бота): ждём до минуты.
for i in $(seq 1 30); do
if docker exec "$NPM_CONTAINER" curl -sf -o /dev/null "http://leadradar-web/api/health"; then
echo " ✓ NPM видит leadradar-web, API отвечает"
exit 0
fi
sleep 2
done
echo " ⚠ leadradar-web не отвечает — смотрите: docker logs leadradar-api"
exit 1
REMOTE
echo "Готово."