아래 주제를 중심으로
어떤 기술적 경험을 했는지
에 대해 발표를 진행해보세요.
- 주간 계획과 실제 수행 결과
- 분야 간 협업 경험과 향후 계획
# Node.js 기본 이미지
FROM node:20.9.0-alpine as builder
# 작업 디렉토리 설정
WORKDIR /app
# 루트의 package.json 파일 복사
COPY package*.json ./
# packages 폴더의 내용 복사
# packages 폴더가 여러 개 있을 경우, 필요에 따라 추가 복사
COPY packages ./packages
# # app/backend 폴더의 내용 복사
COPY app/backend ./app/backend
# 의존성 설치
RUN npm ci
# app/backend 폴더로 이동
WORKDIR /app/app/backend
# 애플리케이션 빌드
RUN npx prisma generate
RUN npm run build
# 실행을 위한 최종 스테이지
FROM node:20.9.0-alpine as runner
# 필요한 도구 설치
RUN apk add --no-cache netcat-openbsd
WORKDIR /app
# 빌더 스테이지에서 필요한 파일만 복사
COPY --from=builder /app/app/backend/dist /app/dist
COPY --from=builder /app/app/backend/prisma /app/prisma
COPY --from=builder /app/node_modules /app/node_modules
# 필요한 경우, 런타임에 필요한 추가 파일 복사
# 예: 환경변수 파일, 정적 파일 등
# 애플리케이션 실행
# CMD ["node", "dist/src/main.js"]
COPY app/backend/wait-for-it.sh /wait-for-it.sh
COPY app/backend/docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /wait-for-it.sh
RUN chmod +x /docker-entrypoint.sh
CMD ["/wait-for-it.sh", "db:3306", "--", "/docker-entrypoint.sh"]
version: '3.8'
services:
backend:
build:
context: ../..
dockerfile: app/backend/Dockerfile # 위에 선언된 backend Dockerfile을 사용함
ports:
- "8080:8080" # 호스트의 포트:컨테이너의 포트
environment:
# .env에 설정되어있는 환경 변수를 Docker container에 세팅
- GOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID}
- GOOGLE_SECRET=${GOOGLE_SECRET}
- GOOGLE_CALLBACK_URL=${GOOGLE_CALLBACK_URL}
- JWT_ACCESS_SECRET=${JWT_ACCESS_SECRET}
- JWT_REFRESH_SECRET=${JWT_REFRESH_SECRET}
- DATABASE_URL=mysql://mokak:_mokak123@db:3306/testDB
- REDIS_PORT=${REDIS_PORT}
- REDIS_HOST=redis
- REDIS_MAX_AGE_REFRESH_TOKEN=${REDIS_MAX_AGE_REFRESH_TOKEN}
- MAX_AGE_ACCESS_TOKEN=${MAX_AGE_ACCESS_TOKEN}
- MAX_AGE_REFRESH_TOKEN=${MAX_AGE_REFRESH_TOKEN}
depends_on:
- db
- redis
db:
image: ccxz84/mokak-mysql:latest
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=anl@oiq12^&()
volumes:
- mysql-data:/var/lib/mysql
redis:
image: redis:alpine
ports:
- "${REDIS_PORT}:6379"
volumes:
mysql-data: