From 463043b43bbecf962a67f717fb867a70b3a8b81d Mon Sep 17 00:00:00 2001 From: Cosmo Date: Mon, 27 Apr 2026 09:59:21 +0000 Subject: [PATCH] =?UTF-8?q?build:=20BuildKit=20cache=20mounts=20=E2=86=92?= =?UTF-8?q?=20CI=203-5=C3=97=20=D0=B1=D1=8B=D1=81=D1=82=D1=80=D0=B5=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Текущая сборка ~7 минут — npm ci качает все 183 пакета с нуля + next build без incremental cache на каждом push. - Dockerfile: BuildKit cache mount на /root/.npm (npm install) и .next/cache (Next.js incremental TS/swc/webpack cache). - workflow: DOCKER_BUILDKIT=1 чтобы cache mounts работали. - .dockerignore: убираем node_modules/.next/.git/docs из контекста — меньше копирования + чище инвалидация слоёв. - Поднимаем NODE_OPTIONS heap до 4G в build-стадии (TS падал с OOM). Первый билд после этого коммита заполнит cache — второй и дальше будут значительно быстрее (deps install ~5-10с вместо 60-90с, next build тоже ускорится за счёт incremental). --- .dockerignore | 21 +++++++++++++++++++++ .gitea/workflows/deploy.yml | 6 ++++++ Dockerfile | 10 ++++++++-- 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..24c9cfe --- /dev/null +++ b/.dockerignore @@ -0,0 +1,21 @@ +# Build output / зависимости — пересобираются внутри контейнера +node_modules +.next +.turbo +dist + +# VCS / IDE +.git +.gitea +.idea +.vscode + +# Env / секреты — на сервере есть отдельный tablet.env +.env* + +# Документация / временные +*.md +HANDOFF.md +.DS_Store +*.log +tsconfig.tsbuildinfo diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 8121007..7cfb4e6 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -9,11 +9,17 @@ jobs: runs-on: self-hosted steps: - name: Build and deploy + env: + DOCKER_BUILDKIT: "1" run: | apk add --no-cache docker-cli git cd /opt/digital-home/smart-home-tablet git config --global --add safe.directory /opt/digital-home/smart-home-tablet git pull origin main + # BuildKit включён через DOCKER_BUILDKIT=1 — Dockerfile использует + # cache mounts для /root/.npm и .next/cache, что ускоряет повторные + # сборки в 3-5 раз (npm install не качает заново, next build + # пользует incremental TS-cache). docker build -t smart-home-tablet:latest . docker stop tablet-yfh53kixpwkjlo4zibglx4n2 || true docker rm tablet-yfh53kixpwkjlo4zibglx4n2 || true diff --git a/Dockerfile b/Dockerfile index 96f0853..7db91ee 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,14 +1,20 @@ +# syntax=docker/dockerfile:1.7 FROM node:20-alpine AS deps WORKDIR /app COPY package.json package-lock.json* ./ -RUN npm ci --prefer-offline || npm install +# BuildKit cache mount → npm cache переживает между билдами, install в 5-10x быстрее +RUN --mount=type=cache,target=/root/.npm,sharing=locked \ + npm ci --prefer-offline --no-audit --no-fund FROM node:20-alpine AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . ENV NEXT_TELEMETRY_DISABLED=1 -RUN npm run build +ENV NODE_OPTIONS="--max-old-space-size=4096" +# BuildKit cache mount → .next/cache (incremental TS/swc) переживает между билдами +RUN --mount=type=cache,target=/app/.next/cache,sharing=locked \ + npm run build FROM node:20-alpine AS runner WORKDIR /app