#!/usr/bin/env bash set -euo pipefail cd "$(dirname "$0")" MIRROR="${NPM_REGISTRY:-https://registry.npmmirror.com}" MIRROR="${MIRROR%/}" NODE_IMAGE="${NODE_IMAGE:-node:22-alpine}" echo "==> npm registry: $MIRROR" echo "==> build with Docker image: $NODE_IMAGE (Node روی خود سرور لازم نیست)" # آماده‌سازی lockfile برای میرور sed -i \ -e "s|https://registry.npmjs.org|${MIRROR}|g" \ -e "s|https://mirror.iranserver.com/npm|${MIRROR}|g" \ package-lock.json # نصب و بیلد داخل یک کانتینر موقت Node (نه داخل docker build) # شبکه معمولی کانتینر معمولاً از docker build پایدارتر است docker run --rm \ -v "$PWD":/app \ -w /app \ -e NPM_CONFIG_REGISTRY="$MIRROR" \ "$NODE_IMAGE" \ sh -c "set -eux npm config set registry '$MIRROR' npm config set fetch-retries 5 npm config set fetch-retry-mintimeout 20000 npm config set fetch-retry-maxtimeout 120000 npm ci --no-audit --no-fund npx prisma generate npm run build npm prune --omit=dev npm install prisma ts-node typescript --no-save --no-audit --no-fund --registry='$MIRROR' " echo "==> ساخت و اجرای کانتینر API (بدون دانلود npm در بیلد)..." export RUN_SEED="${RUN_SEED:-true}" docker compose -f docker-compose.prebuilt.yml up -d --build echo "" echo "OK → curl http://127.0.0.1:3000/api/health" echo "logs → docker compose -f docker-compose.prebuilt.yml logs -f api"