-
Notifications
You must be signed in to change notification settings - Fork 1
[재하] 1203(일) 개발기록
박재하 edited this page Dec 3, 2023
·
1 revision
- 멀티 스테이징을 활용한 docker 이미지 최적화
- docker 이미지 최적화 (yarn berry, 모노레포 고려)
- 배포 테스트
사전학습에서 배운 docker 이미지 최적화 전략을 활용, builder
, runner
로 스테이지를 구분 후
필요한 데이터(dist, 의존성)만 builder에서 runner로 옮긴 후 이미지를 만들고 실행하도록 구성해보았다.
FROM node:20-alpine AS builder
WORKDIR /app
ADD . /app
RUN SHARP_IGNORE_GLOBAL_LIBVIPS=1 npm_config_arch=x64 npm_config_platform=linux yarn workspace server add sharp@0.32.6
RUN yarn workspace server build
FROM node:20-alpine AS runner
WORKDIR /app
COPY --from=builder /app/packages/server/dist /app/packages/server/dist
COPY --from=builder /app/packages/server/package.json /app/packages/server/package.json
COPY --from=builder /app/.yarn /app/.yarn
COPY --from=builder /app/.pnp.cjs /app/.pnp.cjs
COPY --from=builder /app/.yarnrc.yml /app/.yarnrc.yml
COPY --from=builder /app/yarn.lock /app/yarn.lock
COPY --from=builder /app/package.json /app/package.json
EXPOSE 3000
ENTRYPOINT ["yarn", "workspace", "server", "start:prod"]
추가로 고려해줘야 했던 사항은 모노레포에 yarn berry를 사용하기 때문에, 정상적으로 실행되게 하기 위해 node_modules 대신 .yarn 폴더를, 그리고 packges/server 폴더 구조를 그대로 유지한 채로 옮겨줘야 한다는 것 등이였다.
docker build -t qkrwogk/web16-b1g1-be:week5-test1 -f ./Dockerfile-was . --platform linux/amd64
에러 없이 빌드되며, build, push 속도도 훠어어어~~~~~얼씬 더 빨랐다 ㅋ 진즉 해야했다..
docker push qkrwogk/web16-b1g1-be:week5-test1
사진에서도 확인할 수 있지만 용량이 두 배 가까이 차이난다.
배포 환경에서 예정대로 잘 실행되는지 테스트해보자.
실행중인 컨테이너를 확인해보니 페어 분이 GitHub Actions를 거치지않고 핫픽스한 컨테이너를 직접 배포해 놓으신 것 같아서, 문제 생길 수 있으니 그냥 컨테이너 하나 더 띄워서 3001번 포트로 열고 정상 실행되는지만 확인해보기로 했다.
docker pull qkrwogk/web16-b1g1-be:week5-test1
pull도 아주그냥 훨씬 빠름 ㅋ
docker run -d -p 3001:3000 --env-file ./.env2 qkrwogk/web16-b1g1-be:week5-test1
에러 없이 잘 올라가는 것 확인했고
ACG에서 3001번 임시 허용
아주 잘 실행된다. 성공성공!!
© 2023 debussysanjang
- 🐙 [가은] Three.js와의 설레는 첫만남
- 🐙 [가은] JS로 자전과 공전을 구현할 수 있다고?
- ⚽️ [준섭] NestJS 강의 정리본
- 🐧 [동민] R3F Material 간단 정리
- 👾 [재하] 만들면서 배우는 NestJS 기초
- 👾 [재하] GitHub Actions을 이용한 자동 배포
- ⚽️ [준섭] 테스트 코드 작성 이유
- ⚽️ [준섭] TypeScript의 type? interface?
- 🐙 [가은] 우리 팀이 Zustand를 쓰는 이유
- 👾 [재하] NestJS, TDD로 개발하기
- 👾 [재하] AWS와 NCP의 주요 서비스
- 🐰 [백범] Emotion 선택시 고려사항
- 🐧 [동민] Yarn berry로 모노레포 구성하기
- 🐧 [동민] Vite, 왜 쓰는거지?
- ⚽️ [준섭] 동시성 제어
- 👾 [재하] NestJS에 Swagger 적용하기
- 🐙 [가은] 너와의 추억을 우주의 별로 띄울게
- 🐧 [동민] React로 멋진 3D 은하 만들기(feat. R3F)
- ⚽️ [준섭] NGINX 설정
- 👾 [재하] Transaction (트랜잭션)
- 👾 [재하] SSH 보안: Key Forwarding, Tunneling, 포트 변경
- ⚽️ [준섭] MySQL의 검색 - LIKE, FULLTEXT SEARCH(전문검색)
- 👾 [재하] Kubernetes 기초(minikube), docker image 최적화(멀티스테이징)
- 👾 [재하] NestJS, 유닛 테스트 각종 mocking, e2e 테스트 폼데이터 및 파일첨부
- 2주차(화) - git, monorepo, yarn berry, TDD
- 2주차(수) - TDD, e2e 테스트
- 2주차(목) - git merge, TDD
- 2주차(일) - NCP 배포환경 구성, MySQL, nginx, docker, docker-compose
- 3주차(화) - Redis, Multer 파일 업로드, Validation
- 3주차(수) - AES 암복호화, TypeORM Entity Relation
- 3주차(목) - NCP Object Storage, HTTPS, GitHub Actions
- 3주차(토) - Sharp(이미지 최적화)
- 3주차(일) - MongoDB
- 4주차(화) - 플랫폼 종속성 문제 해결(Sharp), 쿼리 최적화
- 4주차(수) - 코드 개선, 트랜잭션 제어
- 4주차(목) - 트랜잭션 제어
- 4주차(일) - docker 이미지 최적화
- 5주차(화) - 어드민 페이지(전체 글, 시스템 정보)
- 5주차(목) - 감정분석 API, e2e 테스트
- 5주차(토) - 유닛 테스트(+ mocking), e2e 테스트(+ 파일 첨부)
- 6주차(화) - ERD
- 2주차(화) - auth, board 모듈 생성 및 테스트 코드 환경 설정
- 2주차(목) - Board, Auth 테스트 코드 작성 및 API 완성
- 3주차(월) - Redis 연결 후 RedisRepository 작성
- 3주차(화) - SignUpUserDto에 ClassValidator 적용
- 3주차(화) - SignIn시 RefreshToken 발급 및 Redis에 저장
- 3주차(화) - 커스텀 AuthGuard 작성
- 3주차(수) - SignOut시 토큰 제거
- 3주차(수) - 깃헙 로그인 구현
- 3주차(토) - OAuth 코드 통합 및 재사용
- 4주차(수) - NestJS + TypeORM으로 MySQL 전문검색 구현
- 4주차(목) - NestJS Interceptor와 로거
- [전체] 10/12(목)
- [전체] 10/15(일)
- [전체] 10/30(월)
- [FE] 11/01(수)~11/03(금)
- [전체] 11/06(월)
- [전체] 11/07(화)
- [전체] 11/09(목)
- [전체] 11/11(토)
- [전체] 11/13(월)
- [BE] 11/14(화)
- [BE] 11/15(수)
- [FE] 11/16(목)
- [FE] 11/19(일)
- [BE] 11/19(일)
- [FE] 11/20(월)
- [BE] 11/20(월)
- [BE] 11/27(월)
- [FE] 12/04(월)
- [BE] 12/04(월)
- [FE] 12/09(금)
- [전체] 12/10(일)
- [FE] 12/11(월)
- [전체] 12/11(월)
- [전체] 12/12(화)