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) => {
-
+