Newer
Older
PixelPaintWar / Dockerfile
# ================================================================
# Stage 1: Builder (ビルド用の環境)
# ================================================================
FROM node:20-slim AS builder

# pnpmの準備
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable

WORKDIR /app

# 1. 依存関係の定義ファイルをコピー
COPY package.json pnpm-workspace.yaml pnpm-lock.yaml ./
COPY apps/server/package.json ./apps/server/
COPY packages/shared/package.json ./packages/shared/

# 2. 依存関係をインストール
RUN pnpm install --frozen-lockfile

# 3. ソースコードをコピー
COPY packages/shared ./packages/shared
COPY apps/server ./apps/server

# 4. ビルド(共通ライブラリ -> サーバーの順)
RUN pnpm --filter @repo/shared build
RUN pnpm --filter server build

# 5. 開発用ライブラリを削除(本番に必要なものだけ残す)
ENV CI=true
RUN pnpm prune --prod

# ================================================================
# Stage 2: Runner (実行専用の軽量環境)
# ================================================================
FROM node:20-slim AS runner

WORKDIR /app

# Builderステージから、動かすのに必要なファイルだけをコピー
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/apps/server/node_modules ./apps/server/node_modules
COPY --from=builder /app/apps/server/dist ./apps/server/dist
COPY --from=builder /app/apps/server/package.json ./apps/server/
COPY --from=builder /app/packages/shared/dist ./packages/shared/dist
COPY --from=builder /app/packages/shared/package.json ./packages/shared/

# 実行環境の設定
ENV NODE_ENV=production
USER node

# サーバーを起動
WORKDIR /app/apps/server
CMD ["node", "dist/index.js"]