#!/usr/bin/env bash set -euo pipefail cd "$(dirname "$0")" MIRROR="${NPM_REGISTRY:-https://registry.npmmirror.com}" MIRROR="${MIRROR%/}" # میرور ایمیج Docker (ایران) — اگر کار نکرد با NODE_IMAGE عوض کن NODE_IMAGE="${NODE_IMAGE:-docker.iranserver.com/library/node:22-alpine}" echo "==> npm registry: $MIRROR" echo "==> Node image: $NODE_IMAGE" echo "==> اگر pull طول کشید صبر کن؛ اولین بار ایمیج دانلود می‌شود" # آماده‌سازی lockfile برای میرور sed -i \ -e "s|https://registry.npmjs.org|${MIRROR}|g" \ -e "s|https://mirror.iranserver.com/npm|${MIRROR}|g" \ package-lock.json pull_node() { if docker image inspect "$NODE_IMAGE" >/dev/null 2>&1; then echo "==> Node image already present" return 0 fi echo "==> Pulling Node image..." if docker pull "$NODE_IMAGE"; then return 0 fi echo "==> میرور اول شکست خورد؛ تلاش با Docker Hub..." NODE_IMAGE="node:22-alpine" docker pull "$NODE_IMAGE" } pull_node echo "==> npm ci + 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..." 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"