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
-
-
-
- - - - - -
- ++ + + + +
+ ## 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: