Newer
Older
PixelPaintWar / Dockerfile
# --- ステージ1: ビルド ---
FROM node:20-slim AS builder
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable

WORKDIR /app

# モノレポ全体のファイルをコピー
COPY . .

# 依存関係のインストール(フローズンロックファイルで確実な再現性を確保)
RUN pnpm install --frozen-lockfile

# 共通ライブラリをビルド(必須手順)
RUN pnpm --filter @repo/shared build
# サーバーアプリをビルド
RUN pnpm --filter server build
# 実行に不要なdevDependenciesを削除
RUN pnpm prune --prod

# --- ステージ2: 本番実行 ---
FROM node:20-slim AS runner
WORKDIR /app

# 本番実行に必要なファイルだけを抽出
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/packages/shared ./packages/shared
COPY --from=builder /app/apps/server/dist ./apps/server/dist
COPY --from=builder /app/apps/server/package.json ./apps/server/package.json

# 環境変数のデフォルト設定
ENV NODE_ENV=production
ENV PORT=3000
EXPOSE 3000

# サーバー起動(apps/server/package.json の start スクリプトを呼び出す)
WORKDIR /app/apps/server
CMD ["npm", "run", "start"]