diff --git a/.github/workflows/github-action.yaml b/.github/workflows/github-action.yaml index 97ab65d..d73a839 100644 --- a/.github/workflows/github-action.yaml +++ b/.github/workflows/github-action.yaml @@ -1,5 +1,7 @@ on: push: + release: + types: [published] name: Docker Build and Push @@ -30,12 +32,14 @@ jobs: uses: aws-actions/amazon-ecr-login@v1 - name: Determine Prod/Dev Stage run: | - if [[ ${{ github.ref }} == refs/tags/release-* ]]; then + if [[ ${{ github.event_name }} == 'release' ]]; then echo "PROD" - echo "IMAGE_TAG=prod" >> $GITHUB_ENV + echo "IMAGE_TAG=${{ github.event.release.tag_name }}" >> $GITHUB_ENV + echo "NEXT_PUBLIC_ENV=prod" >> $GITHUB_ENV else echo "DEV" - echo "IMAGE_TAG=dev" >> $GITHUB_ENV + echo "IMAGE_TAG=latest" >> $GITHUB_ENV + echo "NEXT_PUBLIC_ENV=dev" >> $GITHUB_ENV fi - name: Build and Push uses: docker/build-push-action@v3 @@ -44,11 +48,11 @@ jobs: platforms: linux/arm64 # support AWS EC2 t4g tags: ${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }} build-args: | - "NEXT_PUBLIC_ENV=${{ env.IMAGE_TAG }}" + "NEXT_PUBLIC_ENV=${{ env.NEXT_PUBLIC_ENV }}" cache-from: type=gha cache-to: type=gha,mode=max push: true - + deploy_health_check: name: Check Application Status needs: docker_build_and_push diff --git a/README.md b/README.md index b6b1b08..2979f80 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,5 @@ # POPO Admin Web -
- -

- - - - - -

-

Logo @@ -23,54 +13,33 @@

+

+ + + + +

+ ## About POPO는 PoApper에서 개발하고, POSTECH 총학생회에서 운영하는 포털 사이트입니다. POPO를 통해 교내의 장소/장비를 예약하고, 자치단체 및 동아리 정보를 열람할 수 있습니다. +## How to Deploy -## Commands - -```bash -$ npm install -# fill correct envrionments variables to .env file -$ npm run dev -``` - -### docker - -#### On Your Local Computer - -```bash -$ docker build . -t popo-admin-web -$ docker run -d -p 3001:3001 popo-admin-web -``` - -```bash -$ docker build . -t popo-admin-web -$ docker-compose up -d -``` - -#### Prod/Dev Release - -git tag를 추가/수정하면 Github Action이 트리거 된다. Github Action에서 도커 이미지를 빌드하고 AWS ECR에 push 한다. 그러면, Docker Swarm 클러스터의 마스터 노드가 새로운 이미지가 push 된 걸 확인하고 새로운 이미지로 디플로이 한다. - -이때, Prod 배포 할지, Dev 배포 할지는 git tag에 따라 결정된다. - -```bash -# Prod 배포 -$ git tag release-1.2.3 - -# Dev 배포 -$ git tag any-other-tags -``` +POPO 어플리케이션은 Docker Container로 실행되고 있으며, [Swarmpit](https://swarmpit.io/)을 통해 오케스트레이션 되고 있다. +Dev-Prod의 two-stage 배포 정책을 가지고 있으며, 각 stage에 배포하기 위한 조건은 아래와 같다. -git tag에 `release-`라는 접두사를 붙이면 Prod 배포된다. 그외의 경우엔 Dev에 배포된다. +- Dev Stage + - POPO 도커 이미지의 `latest` 버전을 업데이트 한다. + - 이때, Web 어플리케이션의 경우는 도커 이미지 빌드 때 `NEXT_PUBLIC_ENV=dev`로 설정해줘야 한다. + - `latest` 버전이 업데이트 되면, Swarmpit에서 Auto-deploy 해준다. +- Prod Stage + - POPO 도커 이미지의 특정 태그를 업데이트 한다. (ex. `v1.2.3`) + - 이때, Web 어플리케이션의 경우는 도커 이미지 빌드 때 `NEXT_PUBLIC_ENV=prod`로 설정해줘야 한다. + - Swarmpit에서 "직접" Prod stage의 버전을 바꿔준다. -## Specification +## Contributors & Maintainer -- ReactJS -- NextJS -- Semantic-ui-react -- styled-component -- docker swarm -- [Swarmpit](https://swarmpit.io) +- Seokyun Ha ([@bluehorn07](https://github.com/BlueHorn07)) +- Jeongwon Choi ([@jjeongone](https://github.com/jjeongone)) +- Hyojeong Yun ([@hodori314](https://github.com/hodori314)) diff --git a/docker-stack.yaml b/docker-stack.yaml index 747bf15..0b6560d 100644 --- a/docker-stack.yaml +++ b/docker-stack.yaml @@ -1,7 +1,7 @@ -version: '3.8' +version: '3.3' services: dev: - image: 151345152001.dkr.ecr.ap-northeast-2.amazonaws.com/popo-admin-web:dev + image: 151345152001.dkr.ecr.ap-northeast-2.amazonaws.com/popo-admin-web:latest ports: - 5001:3001 logging: @@ -16,7 +16,8 @@ services: - node.role != manager - node.labels.application == popo prod: - image: 151345152001.dkr.ecr.ap-northeast-2.amazonaws.com/popo-admin-web:prod + # Prod Image Tag should be updated manually + image: 151345152001.dkr.ecr.ap-northeast-2.amazonaws.com/popo-admin-web:vX.X.X ports: - 3001:3001 logging: