#!/usr/bin/env bash set -euo pipefail cd "$(dirname "$0")/.." MIRROR="${NPM_REGISTRY:-https://registry.npmmirror.com}" OUT="deploy-bundle.tar.gz" PACK=".deploy-pack" echo "==> بیلد + بسته‌بندی کامل (dist + node_modules)" echo "==> بعداً روی سرور دیگر npm زده نمی‌شود" npm config set registry "$MIRROR" npm ci --no-audit --no-fund npx prisma generate rm -rf dist tsconfig.build.tsbuildinfo npx nest build test -f dist/main.js rm -rf "$PACK" /tmp/fabric-prod-pack mkdir -p "$PACK" /tmp/fabric-prod-pack cp package.json package-lock.json /tmp/fabric-prod-pack/ ( cd /tmp/fabric-prod-pack sed -i "s|https://registry.npmjs.org|${MIRROR}|g" package-lock.json || true npm ci --omit=dev --no-audit --no-fund --registry="$MIRROR" npm install prisma ts-node typescript --no-save --no-audit --no-fund --registry="$MIRROR" npx prisma generate ) cp package.json package-lock.json "$PACK/" cp -a prisma "$PACK/" cp prisma.config.ts docker-entrypoint.sh "$PACK/" cp -a dist "$PACK/" cp -a /tmp/fabric-prod-pack/node_modules "$PACK/" cp Dockerfile.bundle "$PACK/Dockerfile" cp docker-compose.bundle.yml "$PACK/docker-compose.yml" cp .env.example "$PACK/" # dockerignore داخل باندل: چیزی را حذف نکند cat > "$PACK/.dockerignore" <<'EOF' .git .env *.md EOF tar -czf "$OUT" -C "$PACK" . ls -lh "$OUT" echo "" echo "scp $OUT root@SERVER:/opt/parche/" echo "روی سرور:" echo " mkdir -p /opt/parche/app && tar -xzf /opt/parche/deploy-bundle.tar.gz -C /opt/parche/app" echo " cd /opt/parche/app && cp -n .env.example .env && nano .env" echo " RUN_SEED=true docker compose up -d --build" echo " # بیلد Docker فقط COPY است؛ npm ندارد"