From 3c45282455b3cb2e50e8b9b3aaf2df4dc2a9c4ac Mon Sep 17 00:00:00 2001 From: JongYeob Sheen Date: Mon, 13 Nov 2023 12:16:57 +0900 Subject: [PATCH] =?UTF-8?q?Docker=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.dev.sample | 4 ++-- .env.local.sample | 4 ++-- .env.prod.sample | 1 + docker/dev/Dockerfile | 12 ++++++++---- docker/dev/docker-compose.yml | 22 +++++++++++++++++++++- docker/local/Dockerfile | 15 +++++++++------ prisma/schema.prisma | 1 - script/start.sh | 5 +++++ src/components/program/QuizCheckPanel.tsx | 2 +- 9 files changed, 49 insertions(+), 17 deletions(-) create mode 100644 script/start.sh diff --git a/.env.dev.sample b/.env.dev.sample index 0c8fbba..46154d0 100644 --- a/.env.dev.sample +++ b/.env.dev.sample @@ -1,5 +1,5 @@ -//DATABASE_URL="mysql://root:fbOgZ6Xxn5VXBYihjqygRXyaK6ZUgKL6@db/learnsteam_quiz" -DATABASE_URL="mysql://learnsteam:fbOgZ6Xxn5VXBYihjqygRXyaK6ZUgKL6@127.0.0.1/learnsteam_quiz" +DATABASE_URL="mysql://root:fbOgZ6Xxn5VXBYihjqygRXyaK6ZUgKL6@db/learnsteam_quiz" +//DATABASE_URL="mysql://learnsteam:fbOgZ6Xxn5VXBYihjqygRXyaK6ZUgKL6@127.0.0.1/learnsteam_quiz" NEXTAUTH_URL=https://learnsteam-quiz.jongyeob.com NEXT_PUBLIC_API_ENDPOINT=https://learnsteam-quiz.jongyeob.com NEXTAUTH_SECRET=dd87d8220ed9535d3152910f62ca40fb8ae292ac527e9528425118406aebbce0 \ No newline at end of file diff --git a/.env.local.sample b/.env.local.sample index 77609ed..e9f8300 100644 --- a/.env.local.sample +++ b/.env.local.sample @@ -1,6 +1,6 @@ //DATABASE_URL="mysql://learnsteam:fbOgZ6Xxn5VXBYihjqygRXyaK6ZUgKL6@jongyeob.com/learnsteam_quiz" -//DATABASE_URL="mysql://root:fbOgZ6Xxn5VXBYihjqygRXyaK6ZUgKL6@db/learnsteam_quiz" -DATABASE_URL="mysql://learnsteam:fbOgZ6Xxn5VXBYihjqygRXyaK6ZUgKL6@127.0.0.1/learnsteam_quiz" +DATABASE_URL="mysql://root:fbOgZ6Xxn5VXBYihjqygRXyaK6ZUgKL6@db/learnsteam_quiz" +//DATABASE_URL="mysql://learnsteam:fbOgZ6Xxn5VXBYihjqygRXyaK6ZUgKL6@127.0.0.1/learnsteam_quiz" NEXTAUTH_URL=http://localhost:3000 NEXT_PUBLIC_HOST=http://localhost:3000 NEXT_PUBLIC_API_ENDPOINT=http://localhost:3000 diff --git a/.env.prod.sample b/.env.prod.sample index edc148a..fadf061 100644 --- a/.env.prod.sample +++ b/.env.prod.sample @@ -1,3 +1,4 @@ +DATABASE_URL="mysql://root:fbOgZ6Xxn5VXBYihjqygRXyaK6ZUgKL6@db/learnsteam_quiz" //DATABASE_URL="mysql://learnsteam:fbOgZ6Xxn5VXBYihjqygRXyaK6ZUgKL6@jongyeob.com/learnsteam_quiz" NEXTAUTH_URL=https://learnsteam-quiz.jongyeob.com NEXT_PUBLIC_HOST=https://learnsteam-quiz.jongyeob.com diff --git a/docker/dev/Dockerfile b/docker/dev/Dockerfile index ccc9bf0..f92ffc4 100644 --- a/docker/dev/Dockerfile +++ b/docker/dev/Dockerfile @@ -18,10 +18,14 @@ RUN yarn upgrade RUN npx prisma generate RUN yarn build RUN npm prune --production +COPY ./script/start.sh . +RUN chmod +x start.sh FROM alpine AS runner -RUN apk add --no-cache nodejs +RUN apk add --no-cache nodejs npm +RUN npm install npx -g WORKDIR /app + ENV NODE_ENV production RUN addgroup --system --gid 1001 nodejs RUN adduser --system --uid 1001 nextjs @@ -31,9 +35,9 @@ COPY --from=builder --chown=nextjs:nodejs /app/public ./public COPY --from=builder --chown=nextjs:nodejs /app/package.json ./package.json COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static -# COPY --from=builder --chown=nextjs:nodejs /app/node_modules ./node_modules -# COPY --from=builder --chown=nextjs:nodejs /app/prisma ./prisma -# COPY --from=builder --chown=nextjs:nodejs /app/start.sh . +COPY --from=builder --chown=nextjs:nodejs /app/node_modules ./node_modules +COPY --from=builder --chown=nextjs:nodejs /app/prisma ./prisma +COPY --from=builder --chown=nextjs:nodejs /app/start.sh . USER nextjs EXPOSE 3000 diff --git a/docker/dev/docker-compose.yml b/docker/dev/docker-compose.yml index 8ecceb9..a430774 100644 --- a/docker/dev/docker-compose.yml +++ b/docker/dev/docker-compose.yml @@ -1,10 +1,30 @@ version: "3" services: + db: + image: mysql:latest + environment: + MYSQL_ROOT_PASSWORD: fbOgZ6Xxn5VXBYihjqygRXyaK6ZUgKL6 + MYSQL_DATABASE: learnsteam_quiz + ports: + - "33062:3306" + volumes: + - db-data:/var/lib/mysql app: build: context: ../../ dockerfile: docker/dev/Dockerfile image: learnsteam/learnsteam-quiz:dev ports: - - "3000:3000" + - "3100:3000" + environment: + DB_HOST: db + DB_PORT: 3306 + DB_USER: root + DB_PASSWORD: fbOgZ6Xxn5VXBYihjqygRXyaK6ZUgKL6 + DB_NAME: learnsteam_quiz + depends_on: + - db + restart: always +volumes: + db-data: diff --git a/docker/local/Dockerfile b/docker/local/Dockerfile index af8da77..3f5eac2 100644 --- a/docker/local/Dockerfile +++ b/docker/local/Dockerfile @@ -1,4 +1,4 @@ -FROM node:alpine AS base +FROM node:21-alpine AS base FROM base AS deps RUN apk add --no-cache libc6-compat @@ -11,18 +11,20 @@ RUN yarn --frozen-lockfile FROM base AS builder WORKDIR /app -COPY .env.local.sample .env.production COPY . . +COPY .env.local.sample .env ENV NEXT_TELEMETRY_DISABLED 0 +RUN yarn upgrade RUN npx prisma generate RUN yarn build RUN npm prune --production COPY ./script/start.sh . +RUN chmod +x start.sh -# FROM alpine AS runner -# RUN apk add --no-cache nodejs npm -# RUN npm install npx -g -# WORKDIR /app +FROM alpine AS runner +RUN apk add --no-cache nodejs npm +RUN npm install npx -g +WORKDIR /app ENV NODE_ENV production RUN addgroup --system --gid 1001 nodejs @@ -33,6 +35,7 @@ COPY --from=builder --chown=nextjs:nodejs /app/public ./public COPY --from=builder --chown=nextjs:nodejs /app/package.json ./package.json COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static +COPY --from=builder --chown=nextjs:nodejs /app/node_modules ./node_modules COPY --from=builder --chown=nextjs:nodejs /app/prisma ./prisma COPY --from=builder --chown=nextjs:nodejs /app/start.sh . diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 4651976..20bbf9c 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -36,7 +36,6 @@ model Program { @@map("program") @@index([course]) - @@index([tag]) @@index([status]) @@index([updated_at]) @@index([created_at]) diff --git a/script/start.sh b/script/start.sh new file mode 100644 index 0000000..f461328 --- /dev/null +++ b/script/start.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +npx prisma generate +npx prisma db push +node server.js \ No newline at end of file diff --git a/src/components/program/QuizCheckPanel.tsx b/src/components/program/QuizCheckPanel.tsx index fa61ad7..5eb7fe0 100644 --- a/src/components/program/QuizCheckPanel.tsx +++ b/src/components/program/QuizCheckPanel.tsx @@ -72,7 +72,7 @@ const QuizCheckPanel = (props: Props) => { - +