Skip to content

Commit

Permalink
update deploy strategy (#48)
Browse files Browse the repository at this point in the history
  • Loading branch information
BlueHorn07 authored Aug 15, 2023
1 parent 0bec43f commit 22be005
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 61 deletions.
14 changes: 9 additions & 5 deletions .github/workflows/github-action.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
on:
push:
release:
types: [published]

name: Docker Build and Push

Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down
75 changes: 22 additions & 53 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,5 @@
# POPO Admin Web

<br />

<p align="center">
<a href="https://github.com/PoApper/popo-admin-web/actions/workflows/github-action.yaml">
<img src="https://github.com/PoApper/popo-admin-web/actions/workflows/github-action.yaml/badge.svg">
</a>
<img src="https://img.shields.io/badge/node-%3E%3D14.16-brightgreen">
<img src="https://img.shields.io/badge/npm-%3E%3D7.20-brightgreen">
</p>

<p align="center">
<a href="http://popo.postech.ac.kr">
<img src="https://raw.githubusercontent.com/PoApper/POPO-nest-api/master/assets/popo.svg" alt="Logo" height="150">
Expand All @@ -23,54 +13,33 @@
</p>
</p>

<p align="center">
<img src="https://img.shields.io/badge/Docker-2CA5E0?style=flat-square&logo=Docker&logoColor=white"/>
<img src="https://img.shields.io/badge/node-18.7-brightgreen">
<img src="https://img.shields.io/badge/NextJS-12.3.4-brightgreen">
<img src="https://img.shields.io/badge/ReactJS-17.0.2-brightgreen">
</p>

## 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))
7 changes: 4 additions & 3 deletions docker-stack.yaml
Original file line number Diff line number Diff line change
@@ -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:
Expand All @@ -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:
Expand Down

0 comments on commit 22be005

Please sign in to comment.