Build with temporary Node container so host Node is not required

Use docker run node:22-alpine for npm ci/build, then package via Dockerfile.prebuilt.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-05 21:19:21 +03:30
co-authored by Cursor
parent 56afc032d2
commit 68f0d45adf
+25 -13
View File
@@ -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"