Docker build'ini optimize et: OOM kökü çözümü + bellek sınırlı builder
All checks were successful
Deploy / deploy (push) Successful in 7m33s
All checks were successful
Deploy / deploy (push) Successful in 7m33s
Prod VPS'te next build sırasında makineyi kilitleyen OOM'un çözümü:
- serverExternalPackages'a @google/genai, @anthropic-ai/sdk, resend eklendi;
Turbopack artık genai'nin protobufjs/google-auth-library/ws zincirini
derlemiyor (c2aba25 sonrası OOM'un tetiği buydu).
- Docker build'inde (BUILD_KAYNAK_KISITLI=1) bellek kısıtları: Turbopack 1.5G
hedefi, statik üretim tek worker × 4 sayfa, prerender source map kapalı.
- Dockerfile: runner'a tam node_modules kopyası kaldırıldı (imaj ~1.9G→966M),
pnpm store + .next/cache BuildKit cache mount'ları, açık COPY listesi,
V8 heap sınırı.
- scripts/standalone-linkleri-onar.sh: Turbopack ESM external'ların kök
node_modules symlink'ini nft trace'ine yazmıyor; eksik linkler build sonrası
tamamlanmazsa runtime MODULE_NOT_FOUND ile düşer.
- ci.yaml: build bellek sınırlı buildx docker-container builder'da (2200m,
max-parallelism 1; BuildKit --memory bayrağını yok sayıyor), deploy
up -d --no-build ile ayrıldı, temizlik if: always() ile her koşuda.
- compose: app'e mem_limit 1g + oom_score_adj -600.
- Kullanılmayan simple-icons ve @react-pdf/renderer kaldırıldı; npm artığı
package-lock.json silindi.
Doğrulama: imaj 2 CPU/2GiB VM'de sıfırdan build edildi, konteynerde ana
sayfa/universite 200 ve üç ESM external import OK.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
41
scripts/standalone-linkleri-onar.sh
Normal file
41
scripts/standalone-linkleri-onar.sh
Normal file
@@ -0,0 +1,41 @@
|
||||
#!/bin/sh
|
||||
# Next standalone çıktısında eksik kök node_modules linklerini tamamlar.
|
||||
#
|
||||
# Neden: Turbopack, serverExternalPackages'taki ESM paketleri (@google/genai,
|
||||
# @anthropic-ai/sdk, resend) çalışma anında bare import ile yükler ama nft
|
||||
# trace'ine yalnızca .pnpm gerçek yollarını yazar — kök symlink standalone'a
|
||||
# kopyalanmaz ve import MODULE_NOT_FOUND ile düşer. (CJS external'larda —
|
||||
# better-sqlite3, iyzipay — symlink trace'e giriyor, sorun yalnızca ESM'de.)
|
||||
# Bu script .pnpm altındaki her paket için eksik kök girdisini symlink'ler;
|
||||
# mevcut girdilere dokunmaz. Yeni bir external eklendiğinde de kendiliğinden
|
||||
# kapsar, paket adı/versiyon sabitlemez.
|
||||
set -eu
|
||||
|
||||
KOK="${1:-.next/standalone}/node_modules"
|
||||
[ -d "$KOK/.pnpm" ] || { echo "standalone .pnpm yok, atlandi: $KOK"; exit 0; }
|
||||
cd "$KOK"
|
||||
|
||||
for d in .pnpm/*/node_modules/*; do
|
||||
[ -e "$d" ] || continue
|
||||
base=${d##*/}
|
||||
case "$base" in
|
||||
.*) continue ;;
|
||||
@*)
|
||||
for sub in "$d"/*; do
|
||||
[ -d "$sub" ] || continue
|
||||
hedef="$base/${sub##*/}"
|
||||
if [ ! -e "$hedef" ]; then
|
||||
mkdir -p "$base"
|
||||
ln -s "../$sub" "$hedef"
|
||||
echo "link: $hedef"
|
||||
fi
|
||||
done
|
||||
;;
|
||||
*)
|
||||
if [ ! -e "$base" ]; then
|
||||
ln -s "$d" "$base"
|
||||
echo "link: $base"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
Reference in New Issue
Block a user