diff --git a/deploy-host-build.sh b/deploy-host-build.sh index d72e71b..712246d 100644 --- a/deploy-host-build.sh +++ b/deploy-host-build.sh @@ -4,28 +4,40 @@ cd "$(dirname "$0")" MIRROR="${NPM_REGISTRY:-https://registry.npmmirror.com}" MIRROR="${MIRROR%/}" +NODE_IMAGE="${NODE_IMAGE:-node:22-alpine}" echo "==> npm registry: $MIRROR" -npm config set 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 -echo "==> npm ci (روی خود سرور، خارج از Docker)..." -npm ci --no-audit --no-fund +# نصب و بیلد داخل یک کانتینر موقت 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 "==> prisma generate + build..." -npx prisma generate -npm run build - -# prisma CLI برای migrate داخل کانتینر لازم است -npm install prisma ts-node typescript --no-save --no-audit --no-fund --registry="$MIRROR" - -echo "==> Docker up (بدون دانلود npm داخل بیلد)..." +echo "==> ساخت و اجرای کانتینر API (بدون دانلود npm در بیلد)..." export RUN_SEED="${RUN_SEED:-true}" docker compose -f docker-compose.prebuilt.yml up -d --build echo "" -echo "OK. health: curl http://127.0.0.1:3000/api/health" -echo "logs: docker compose -f docker-compose.prebuilt.yml logs -f api" +echo "OK → curl http://127.0.0.1:3000/api/health" +echo "logs → docker compose -f docker-compose.prebuilt.yml logs -f api"