pdf-parse@2.4.5 pulls in @napi-rs/canvas (native Skia binary) which crashes on import in Alpine containers. Moved to lazy require() so the app starts normally and pdf-parse loads only when PDF conversion is actually requested. - Lazy-load pdf-parse in pdfToStatement to avoid startup crash - Add libc6-compat, fontconfig, freetype to Alpine runner stage - Increase npm fetch timeouts in both Dockerfiles for slow networks - Add connectionTimeoutMillis to pg Pool for faster failure detection
31 lines
1.1 KiB
Docker
31 lines
1.1 KiB
Docker
FROM node:20-alpine AS builder
|
|
|
|
WORKDIR /app
|
|
|
|
# Копируем корень и конфигурации
|
|
COPY package.json package-lock.json* tsconfig.json* ./
|
|
|
|
# Копируем исходники воркспэйсов
|
|
COPY shared ./shared
|
|
COPY frontend ./frontend
|
|
|
|
# Увеличиваем таймауты и повторы для нестабильной сети
|
|
RUN npm config set fetch-retry-mintimeout 20000 && \
|
|
npm config set fetch-retry-maxtimeout 120000 && \
|
|
npm config set fetch-timeout 300000
|
|
|
|
# Устанавливаем зависимости из корня
|
|
RUN npm install
|
|
|
|
# Сначала собираем shared (если там есть скрипт build)
|
|
RUN npm run build -w @family-budget/shared || echo "No build script in shared, skipping..."
|
|
|
|
# Теперь собираем frontend
|
|
RUN npm run build -w @family-budget/frontend
|
|
|
|
# Финальный образ — nginx для раздачи статики
|
|
FROM nginx:alpine
|
|
COPY --from=builder /app/frontend/dist /usr/share/nginx/html
|
|
COPY frontend/nginx.conf /etc/nginx/conf.d/default.conf
|
|
EXPOSE 80
|