Edit: /opt/canhelp/scripts/deploy-no-install.sh (4130B)
#!/usr/bin/env bash
# =============================================================================
# deploy-no-install.sh — быстрый деплой без npm install
# Использование:
# scripts/deploy-no-install.sh — git pull + сборка + миграции + перезапуск
# =============================================================================
set -euo pipefail
APP_DIR="/opt/canhelp"
BRANCH="master"
ENV_FILE="$APP_DIR/.env"
LOG_FILE="$APP_DIR/deploy.log"
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
mkdir -p "$APP_DIR"
: > "$LOG_FILE"
log() { echo "[$TIMESTAMP] $*" | tee -a "$LOG_FILE"; }
log "====== DEPLOY (no-install) START ======"
if [[ ! -f "$ENV_FILE" ]]; then
echo "ОШИБКА: $ENV_FILE не найден."
exit 1
fi
# ─── 1. git pull ─────────────────────────────────────────────────────────────
log "[1/5] Обновление репозитория (git pull)"
cd "$APP_DIR"
git fetch origin "$BRANCH"
git reset --hard "FETCH_HEAD"
# ─── 2. Docker (PostgreSQL + Redis) ───────────────────────────────────────
log "[2/5] Запуск Docker-сервисов"
docker compose up -d postgres redis --quiet-pull
for i in {1..30}; do
docker compose exec -T postgres pg_isready -U canhelp -d canhelp >/dev/null 2>&1 && break
sleep 2
done
if ! docker compose exec -T postgres pg_isready -U canhelp -d canhelp >/dev/null 2>&1; then
log "ОШИБКА: PostgreSQL не стал доступен после запуска контейнера."
exit 1
fi
# ─── 3. Миграции ─────────────────────────────────────────────────────────────
log "[3/5] Миграции базы данных"
set -a; source "$ENV_FILE"; set +a
export DB_HOST="${DB_HOST:-127.0.0.1}"
export DB_PORT="${DB_PORT:-5433}"
export DB_NAME="${DB_NAME:-canhelp}"
export DB_USER="${DB_USER:-canhelp}"
export DB_PASSWORD="${DB_PASSWORD:-canhelp}"
export DATABASE_URL="postgresql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}"
export PGHOST="${DB_HOST}"
export PGPORT="${DB_PORT}"
export PGDATABASE="${DB_NAME}"
export PGUSER="${DB_USER}"
export PGPASSWORD="${DB_PASSWORD}"
DRIZZLE_BIN="$APP_DIR/node_modules/.bin/drizzle-kit"
[[ ! -f "$DRIZZLE_BIN" ]] && DRIZZLE_BIN="$APP_DIR/packages/db/node_modules/.bin/drizzle-kit"
(cd "$APP_DIR/packages/db" && "$DRIZZLE_BIN" migrate)
# ─── 4. Сборка Web ───────────────────────────────────────────────────────────
log "[4/5] Сборка Web"
if [[ -f "$APP_DIR/apps/web/.env.local" ]]; then
log "[3/5] ВНИМАНИЕ: найден apps/web/.env.local, временно отключаю его для production build"
mv "$APP_DIR/apps/web/.env.local" "$APP_DIR/apps/web/.env.local.bak"
fi
(cd "$APP_DIR/apps/web" && "$APP_DIR/node_modules/.bin/next" build)
if [[ -f "$APP_DIR/apps/web/.env.local.bak" ]]; then
mv "$APP_DIR/apps/web/.env.local.bak" "$APP_DIR/apps/web/.env.local"
fi
# ─── 5. Директории ───────────────────────────────────────────────────────────
mkdir -p "$APP_DIR/apps/api/uploads"
# ─── 6. Перезапуск PM2 ───────────────────────────────────────────────────────
log "[5/5] Перезапуск PM2"
if pm2 list | grep -q "canhelp"; then
pm2 reload ecosystem.config.js --update-env
else
pm2 start ecosystem.config.js
pm2 save
fi
log "====== DEPLOY DONE ======"
echo ""
echo "✓ Быстрый деплой завершён. Проверьте статус: pm2 status"