Files
netrunner-landing/Dockerfile
T
nineap 31368fdc17 Dockerfile: чинит cache-busting шаг под alpine (busybox grep без -P)
Builder-стейдж — node:20-alpine, там busybox grep, не понимающий -P/\K
(перловый lookbehind). Локально с GNU grep всё работало, в CI на alpine
падало с exit 2 ещё до sed. Извлекает ENGINE_VERSION чистым POSIX sed
вместо grep -oP.
2026-07-08 23:21:04 +07:00

75 lines
3.2 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# syntax=docker/dockerfile:1
# --- Stage 0: Сборка Rust/Wasm ---
FROM rust:1.80-slim AS wasm-builder
RUN apt-get update && apt-get install -y pkg-config libssl-dev curl && \
curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
WORKDIR /build
COPY ./matrix-engine ./matrix-engine
WORKDIR /build/matrix-engine
# Собираем Wasm. Кэширование теперь полагается на слои Docker (Registry Cache)
RUN cargo install wasm-bindgen-cli --version 0.2.100 --locked
RUN wasm-pack build --target web --release
# --- Stage 1: Установка зависимостей Node.js ---
FROM node:20-alpine AS deps
WORKDIR /app
RUN npm install -g pnpm
COPY package.json pnpm-lock.yaml* ./
RUN pnpm install --frozen-lockfile
# --- Stage 2: Сборка Next.js ---
FROM node:20-alpine AS builder
WORKDIR /app
RUN npm install -g pnpm
COPY --from=deps /app/node_modules ./node_modules
COPY . .
# 1. Создаем директорию для статики движка
RUN mkdir -p ./public/wasm-matrix/
# 2. Копируем результат компиляции Rust (wasm, glue js)
COPY --from=wasm-builder /build/matrix-engine/pkg/* ./public/wasm-matrix/
# 3. КОПИРУЕМ КЛИЕНТСКИЕ ФАЙЛЫ ВОРКЕРА
RUN cp matrix-engine/matrix_worker.js ./public/wasm-matrix/ && \
cp matrix-engine/shaders.js ./public/wasm-matrix/ && \
cp matrix-engine/gl-utils.js ./public/wasm-matrix/
# 3.1 Прописываем cache-busting версию (ENGINE_VERSION из NetrunnerMatrix.tsx)
# в импорты воркера. Без этого matrix_worker.js?v=X кэш-бастится сам по себе
# (см. NetrunnerMatrix.tsx), а его собственные `import ... from "./shaders.js"`
# и "./gl-utils.js" — нет: после деплоя браузер/CDN может отдать по тому же
# пути старую версию этих файлов, воркер не найдёт в ней нужный экспорт,
# упадёт молча и никогда не пришлёт READY — на экране просто фон Hero
# (белый/чёрный по теме) вместо матрицы, до жёсткой перезагрузки страницы.
RUN ENGINE_VERSION=$(sed -n 's/.*ENGINE_VERSION = "\([^"]*\)".*/\1/p' matrix-engine/NetrunnerMatrix.tsx | head -1) && \
sed -i \
-e "s/^const version = \".*\";/const version = \"${ENGINE_VERSION}\";/" \
-e "s/from \"\.\/shaders\.js\";/from \".\/shaders.js?v=${ENGINE_VERSION}\";/" \
-e "s/from \"\.\/gl-utils\.js\";/from \".\/gl-utils.js?v=${ENGINE_VERSION}\";/" \
./public/wasm-matrix/matrix_worker.js
# 4. Собираем Next.js
ENV NEXT_TELEMETRY_DISABLED=1
RUN pnpm run build
# --- Stage 3: Продакшен сервер ---
FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
USER nextjs
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./package.json
EXPOSE 3000
CMD ["npm", "start"]