diff --git a/api/api.Dockerfile b/api/api.Dockerfile index dc9d3f8..66e76e2 100644 --- a/api/api.Dockerfile +++ b/api/api.Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.10 +FROM python:3.10-slim-bookworm WORKDIR /api diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 45a1d62..7b95df7 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -11,11 +11,7 @@ services: container_name: "view" build: context: ./view - dockerfile: view.Dockerfile - volumes: - - ./view:/view - - ./view/node_modules:/view/node_modules - command: sh -c "yarn start" + dockerfile: prod.view.Dockerfile ports: - "3000:3000" stdin_open: true @@ -29,8 +25,8 @@ services: build: context: ./api dockerfile: api.Dockerfile - volumes: - - ./api:/api + # volumes: + # - ./api:/api ports: - "9004:9004" command: uvicorn main:app --reload --host 0.0.0.0 --port 9004 diff --git a/docker-compose.yml b/docker-compose.yml index 6121195..bafea9e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,7 +9,6 @@ services: volumes: - ./view:/view - ./view/node_modules:/view/node_modules - command: sh -c "yarn && yarn dev" ports: - "3000:3000" stdin_open: true diff --git a/script/down.sh b/script/down.sh index 929a6bb..2642ea0 100644 --- a/script/down.sh +++ b/script/down.sh @@ -1 +1 @@ -docker-compose -f docker-compose.prod.yml down +docker compose -f docker-compose.prod.yml down diff --git a/script/up.sh b/script/up.sh index ff69c6b..66f6ed6 100644 --- a/script/up.sh +++ b/script/up.sh @@ -1,4 +1,2 @@ -docker-compose -f docker-compose.prod.yml build -docker compose -f docker-compose.prod.yml run --rm view yarn -docker compose -f docker-compose.prod.yml run --rm view yarn build -docker compose -f docker-compose.prod.yml up -d +docker compose -f docker-compose.prod.yml build +docker compose -f docker-compose.prod.yml up -d view api diff --git a/view/next.config.mjs b/view/next.config.mjs index 8ee926d..5198d5d 100644 --- a/view/next.config.mjs +++ b/view/next.config.mjs @@ -14,6 +14,7 @@ const nextConfig = (phase, { defaultConfig }) => { } return { + output: "standalone", /* 開発フェーズを除く全てのフェーズで有効なオプションを設定 */ webpack: (config, options) => { // ----- ここから本番環境で、console.log を出力しない系の設定 ----- diff --git a/view/prod.view.Dockerfile b/view/prod.view.Dockerfile new file mode 100644 index 0000000..e95b1d6 --- /dev/null +++ b/view/prod.view.Dockerfile @@ -0,0 +1,46 @@ +FROM node:20.11.1-bookworm-slim AS base + +FROM base AS deps + +WORKDIR /app + +COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./ +RUN \ + if [ -f yarn.lock ]; then yarn; \ + elif [ -f package-lock.json ]; then npm ci; \ + elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm i --frozen-lockfile; \ + else echo "Lockfile not found." && exit 1; \ + fi + +FROM base AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . + +ENV NEXT_TELEMENTRY_DISABLED 1 + +RUN \ + if [ -f yarn.lock ]; then yarn run build; \ + else echo "Lockfile not found." && exit; \ + fi + +FROM base AS runner +WORKDIR /app + +ENV NDOE_ENV production + +ENV NEXT_TELEMENTRY_DISABLED 1 + +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs + +COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static + +USER nextjs + +EXPOSE 3000 + +ENV PORT 3000 + +CMD HOSTNAME="0.0.0.0" node server.js diff --git a/view/view.Dockerfile b/view/view.Dockerfile index 2ae45bf..cefb7e1 100644 --- a/view/view.Dockerfile +++ b/view/view.Dockerfile @@ -1,4 +1,4 @@ -FROM node:20.11.1 +FROM node:20.11.1-bookworm-slim WORKDIR /view COPY ./ /view @@ -6,3 +6,4 @@ COPY ./ /view RUN yarn set version stable RUN yarn install +CMD sh -c "yarn && yarn dev"