Files
links/frontend/linktree-frontend/Dockerfile.optimized
Andrey K. Choi 01532e860a
Some checks failed
continuous-integration/drone/push Build is failing
CI/CD build notifications
2025-11-02 06:33:45 +09:00

86 lines
2.5 KiB
Docker

# Multi-stage build для оптимального размера
FROM node:20-alpine AS base
# Установка зависимостей для сборки
RUN apk add --no-cache libc6-compat curl
# Dependencies stage
FROM base AS deps
WORKDIR /app
# Копирование файлов зависимостей
COPY package.json package-lock.json* ./
# Установка зависимостей
RUN npm ci --only=production && npm cache clean --force
# Builder stage
FROM base AS builder
WORKDIR /app
# Копирование зависимостей из предыдущего stage
COPY --from=deps /app/node_modules ./node_modules
# Копирование исходного кода
COPY . .
# Build arguments
ARG BUILD_VERSION=latest
ARG BUILD_DATE
ARG VCS_REF
ARG NEXT_PUBLIC_API_URL
# Переменные окружения для сборки
ENV NODE_ENV=production \
NEXT_PUBLIC_API_URL=$NEXT_PUBLIC_API_URL \
BUILD_VERSION=$BUILD_VERSION
# Генерация статических файлов Next.js
RUN npm run build
# Production stage
FROM node:20-alpine AS runner
# Build arguments для метаданных
ARG BUILD_VERSION=latest
ARG BUILD_DATE
ARG VCS_REF
# Метаданные образа
LABEL org.opencontainers.image.title="CatLink Frontend" \
org.opencontainers.image.description="Next.js приложение для CatLink" \
org.opencontainers.image.version="$BUILD_VERSION" \
org.opencontainers.image.created="$BUILD_DATE" \
org.opencontainers.image.revision="$VCS_REF" \
org.opencontainers.image.source="https://github.com/smartsoltech/links"
WORKDIR /app
# Создание пользователя приложения
RUN addgroup --system --gid 1001 nodejs && \
adduser --system --uid 1001 nextjs
# Копирование собранного приложения
COPY --from=builder /app/public ./public
# Копирование статических файлов
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
# Переменные окружения
ENV NODE_ENV=production \
PORT=3000 \
HOSTNAME="0.0.0.0"
# Переключение на пользователя приложения
USER nextjs
# Health check
HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \
CMD curl -f http://localhost:$PORT/health || exit 1
# Открытие порта
EXPOSE $PORT
# Команда запуска
CMD ["node", "server.js"]