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:
@@ -31,7 +31,50 @@ jobs:
|
||||
GEMINI_API_KEY=${{ secrets.GEMINI_API_KEY }}
|
||||
EOF
|
||||
|
||||
- name: Build & deploy
|
||||
# BuildKit'te "docker build --memory" YOK SAYILIR (moby/buildkit#1362);
|
||||
# gerçek sınır ancak buildkitd'yi kendi cgroup'u olan bir container'da
|
||||
# (buildx docker-container driver) koşturarak konur. Böylece build OOM
|
||||
# olursa yalnızca builder container'ı ölür — uygulama + Gitea ayakta kalır
|
||||
# ve adım 35-90 dk sessiz kilitlenme yerine hızlı, görünür hata verir.
|
||||
#
|
||||
# Sınırlar container İLK oluşturulduğunda donar; değerleri değiştirmek için
|
||||
# önce: docker buildx rm sinirli && docker rm -f buildx_buildkit_sinirli0
|
||||
- name: Sınırlı builder hazırla
|
||||
run: |
|
||||
docker compose -p kolaytercih up -d --build --remove-orphans
|
||||
docker image prune -f
|
||||
cat > buildkitd.toml <<'EOF'
|
||||
[worker.oci]
|
||||
enabled = true
|
||||
max-parallelism = 1
|
||||
EOF
|
||||
# Act container'ı her koşuda sıfırdan geldiği için client kaydı hep
|
||||
# yeniden oluşturulur; host'taki buildx_buildkit_sinirli0 container'ı
|
||||
# (ve build cache'i) varsa bootstrap'ta aynen yeniden kullanılır.
|
||||
docker buildx create --name sinirli \
|
||||
--driver docker-container \
|
||||
--driver-opt memory=2200m \
|
||||
--driver-opt memory-swap=4200m \
|
||||
--driver-opt cpu-quota=150000 \
|
||||
--buildkitd-config ./buildkitd.toml \
|
||||
2>/dev/null || true
|
||||
docker buildx inspect sinirli --bootstrap >/dev/null
|
||||
|
||||
- name: Build (sınırlı builder)
|
||||
run: |
|
||||
docker compose -p kolaytercih build --builder sinirli
|
||||
# docker-container driver'da imajın daemon'a --load ile düştüğünü doğrula;
|
||||
# düşmediyse aynı cache'ten yeniden build edip elle yükle.
|
||||
docker image inspect kolaytercih-app >/dev/null 2>&1 || \
|
||||
docker buildx build --builder sinirli --load -t kolaytercih-app .
|
||||
|
||||
- name: Deploy
|
||||
run: docker compose -p kolaytercih up -d --no-build --remove-orphans
|
||||
|
||||
- name: Temizlik (başarısız build'de de çalışır)
|
||||
if: always()
|
||||
run: |
|
||||
docker image prune -f || true
|
||||
# sinirli builder'ın cache'ini 4 GB'ta tut (flag adı buildx sürümüne göre değişti)
|
||||
docker buildx prune --builder sinirli -f --max-used-space 4gb 2>/dev/null || \
|
||||
docker buildx prune --builder sinirli -f --keep-storage 4gb || true
|
||||
# eski varsayılan-builder cache artıkları
|
||||
docker builder prune -f --filter "until=72h" || true
|
||||
|
||||
Reference in New Issue
Block a user