diff --git a/backend/.dockerignore b/backend/.dockerignore new file mode 100644 index 0000000..f3e29ca --- /dev/null +++ b/backend/.dockerignore @@ -0,0 +1,6 @@ +.idea/ +*.iml +*.iws +target/ +.sonar/ +.sonarlint/ \ No newline at end of file diff --git a/backend/Dockerfile b/backend/Dockerfile index 0fc23e4..d461631 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,13 +1,34 @@ FROM azul/zulu-openjdk:17 LABEL authors="eunhwa" +WORKDIR /app +COPY ./ /app -ARG JAR_FILE=build/libs/*.jar -COPY ${JAR_FILE} app.jar +RUN chmod 755 ./gradlew +RUN ./gradlew clean build +ARG JAR_FILE=build/libs/backend-0.0.1-SNAPSHOT.jar +COPY ${JAR_FILE} /app.jar + +# SQLite 데이터베이스 파일이 존재하는 /data 디렉터리를 생성 +RUN mkdir -p /data ENTRYPOINT ["java" , "-jar", "/app.jar"] -RUN \ - apt-get update && \ - apt-get install -y vim \ +# RUN \ +# apt-get update && \ +# apt-get install -y vim \ + +# FROM ghcr.io/graalvm/jdk:ol8-java17 as builder + +# WORKDIR /app +# COPY ./ /app + +# RUN chmod +x gradlew +# RUN ./gradlew clean build + +# ARG JAR_FILE=./build/libs/*.jar + +# COPY ${JAR_FILE} app.jar + +# ENTRYPOINT ["java","-jar","app.jar"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..855954a --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,53 @@ +services: + frontend: + build: + context: ./frontend + dockerfile: Dockerfile + container_name: lightswitch-frontend + restart: always + ports: + - "80:80" + networks: + - lightswitch-network + depends_on: + - backend + + backend: + build: + context: ./backend + dockerfile: Dockerfile + container_name: lightswitch-backend + # restart: always + ports: + - "8080:8080" + networks: + - lightswitch-network + environment: + SPRING_DATASOURCE_URL: "jdbc:sqlite:lightswitch-dev.sqlite" + SPRING_DATASOURCE_DRIVER_CLASS_NAME: "org.sqlite.JDBC" + volumes: + - sqlite_data:/data + depends_on: + - database + + database: + image: alpine:latest + container_name: lightswitch_db + restart: always + networks: + - lightswitch-network + volumes: + - sqlite_data:/data + entrypoint: + - /bin/sh + - -c + - | + apk add --no-cache sqlite && \ + touch /data/lightswitch-dev.sqlite && \ + tail -f /dev/null + +networks: + lightswitch-network: + +volumes: + sqlite_data: diff --git a/frontend/.dockerignore b/frontend/.dockerignore new file mode 100644 index 0000000..fde667a --- /dev/null +++ b/frontend/.dockerignore @@ -0,0 +1,3 @@ +node_modules +.next +out \ No newline at end of file diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..b15776a --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,30 @@ +FROM node:20-alpine AS builder +WORKDIR /app + +# Install PNPM +RUN corepack enable && corepack prepare pnpm@9.15.4 --activate + +# use dependency cache with using package.json& pnpm-lock.yaml +COPY package.json pnpm-lock.yaml ./ + +RUN pnpm install --frozen-lockfile && ls -al node_modules +COPY . . +RUN pnpm build + +# Nginx로 정적 파일 서빙 +FROM nginx:alpine + +WORKDIR /usr/share/nginx/html +COPY --from=builder /app/.next/static ./static +COPY --from=builder /app/public ./public +COPY --from=builder /app/.next/BUILD_ID . +COPY --from=builder /app/.next/routes-manifest.json . +COPY --from=builder /app/.next/export-marker.json . +COPY --from=builder /app/.next/prerender-manifest.json . + +# Nginx 설정 복사 +COPY nginx/default.conf /etc/nginx/conf.d/default.conf + +# 80 포트에서 실행 +EXPOSE 80 +CMD ["nginx", "-g", "daemon off;"] diff --git a/frontend/nginx/default.conf b/frontend/nginx/default.conf new file mode 100644 index 0000000..859034a --- /dev/null +++ b/frontend/nginx/default.conf @@ -0,0 +1,17 @@ +server { + listen 80; + server_name _; + + location / { + root /usr/share/nginx/html; + index index.html; + try_files $uri /index.html; + } + + location /api/ { + proxy_pass http://localhost:8080/api/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } +}