NestJS API for POPO @ PoApper
POPO, POstechian's POrtal
👉 POPO
POPO는 PoApper에서 개발하고, POSTECH 총학생회에서 운영하는 포털 사이트입니다. POPO를 통해 교내의 장소/장비를 예약하고, 자치단체 및 동아리 정보를 열람할 수 있습니다.
POPO 어플리케이션은 Docker Container로 실행되고 있으며, Docker Swarm을 통해 오케스트레이션 되고 있다. Portainer라는 웹 도구를 사용해 컨테이너 환경을 제어하고 모니터링 하고 있다. Dev-Prod의 two-stage 배포 정책을 가지고 있으며, 각 stage에 배포하기 위한 조건은 아래와 같다.
- Dev Stage
- POPO 도커 이미지의
latest버전을 업데이트 한다. - 이때, Web 어플리케이션의 경우는 도커 이미지 빌드 때
NEXT_PUBLIC_ENV=dev로 설정해줘야 한다. latest버전이 업데이트 되면, Github Action을 통해 Auto-deploy 해준다.
- POPO 도커 이미지의
- Prod Stage
- POPO 도커 이미지의 특정 태그를 업데이트 한다. (ex.
v1.2.3) - 이때, Web 어플리케이션의 경우는 도커 이미지 빌드 때
NEXT_PUBLIC_ENV=prod로 설정해줘야 한다. - Portainer 웹에서 "직접" Prod stage의 버전을 바꿔준다.
- POPO 도커 이미지의 특정 태그를 업데이트 한다. (ex.
Portainer Secrets로 .env를 등록할 때, 서비스의 Secrets 설정에서 Override를 눌러 File name을 /usr/src/app/.env로 반드시 지정해야 한다. 앱이 WORKDIR 기준으로 .env를 찾기 때문에, 경로를 지정하지 않으면 기본 경로에 마운트되어 무시된다.
NODE_ENV는 stage에 맞게prod/dev로 넣는다. 키 목록은.env.example참고.- 정상 로드 여부는 기동 로그의
Running in prod mode로 확인한다.undefined mode면 경로가 잘못된 것이다.
- Seokyun Ha (@bluehorn07)
- Jeongwon Choi (@jjeongone)
- Hyojeong Yun (@hyojeongyunn)
- Gwanho Kim (@khkim6040)
