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

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. pnpm deploy を使用して、serverアプリを /app/out に独立させる(--prodで本番環境用のみ抽出)
RUN pnpm --filter server --prod deploy /app/out

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

WORKDIR /app

# Builderステージで抽出した独立環境(/app/out)をそのままコピーするだけ
COPY --from=builder /app/out ./

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

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