Skip to content

Commit

Permalink
Merge pull request #135 from sopt-makers/develop
Browse files Browse the repository at this point in the history
hotfix: 하루 방문자 수 오류 수정 및 AWS ECR 배포 처리
  • Loading branch information
Lim-Changi authored Sep 8, 2024
2 parents 52a5e91 + fb8e955 commit 2bb5812
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 55 deletions.
40 changes: 15 additions & 25 deletions .github/workflows/cd.develop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,30 +26,20 @@ jobs:
- name: Checkout
uses: actions/checkout@v2

- name: Docker meta
id: docker_meta
uses: crazy-max/ghaction-docker-meta@v3
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
images: ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKER_IMAGE }}

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2

- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Build and push
uses: docker/build-push-action@v3
with:
context: .
file: ./dockerfile
platforms: linux/amd64
push: true
tags: ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKER_IMAGE }}:latest

aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_KEY }}
aws-region: ${{ secrets.AWS_REGION }}

- name: Push Image to AWS ECR Public Repo
id: ecr-image-push
run: |
aws ecr-public get-login-password --region ${{ secrets.AWS_PUBLIC_REPO_REGION }} | docker login --username AWS --password-stdin public.ecr.aws/${{ secrets.AWS_ACCOUNT_ID }}
docker build -t ${{ secrets.DEV_ECR_REPO }}:latest .
docker tag ${{ secrets.DEV_ECR_REPO }}:latest public.ecr.aws/${{ secrets.AWS_ACCOUNT_ID }}/${{ secrets.DEV_ECR_REPO }}:latest
docker push public.ecr.aws/${{ secrets.AWS_ACCOUNT_ID }}/${{ secrets.DEV_ECR_REPO }}:latest
deploy:
needs: build
Expand All @@ -66,6 +56,6 @@ jobs:
sudo docker rm dev-server
sudo docker rm -f $(docker ps -qa)
sudo docker image prune -a -f
sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKER_IMAGE }}:latest
sudo docker run --name dev-server --env-file .env -d -p 3000:3000 -t ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKER_IMAGE }}:latest
sudo docker pull public.ecr.aws/${{ secrets.AWS_ACCOUNT_ID }}/${{ secrets.DEV_ECR_REPO }}:latest
sudo docker run --name dev-server --env-file .env -d -p 3000:3000 -t public.ecr.aws/${{ secrets.AWS_ACCOUNT_ID }}/${{ secrets.DEV_ECR_REPO }}:latest
55 changes: 26 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,51 +1,48 @@
# README

## Description
- SoptOfficial 공홈 API 서버 입니다.
- Sopt Official NestJS 공홈 API 서버 입니다.
- Package Manager는 ```Yarn Package Manager``` 를 사용합니다.

## INDEX
1. [Getting Started](#Getting-started)
2. [project-structure](#project-structure)
3. [Deploy_Pipeline](#deploy-pipeline)
2. [Project Structure](#Project Structure)
3. [Deploy_Pipeline](#Deploy-Pipeline)

# Getting-started
### 1.Local 서버 실행
### 서버 실행 환경
- Node v16
### 서버 실행
```bash
yarn start:local
# Local
npm run start:local
```
```yarn start:local``` 를 실행게되면 다음과 같은 작업을 수행합니다.

1. envs/local.develop.env 파일을 읽어서 환경변수를 root directory에 .env 파일로 copy 합니다.
2. docker-compose를 이용하여 local에 postgresql 데이터베이스 컨테이너를 실행합니다.
3. nestjs가 env파일을 읽어서 local Database에 연결하여 서버를 실행시킵니다.

### Develop Stage 서버 실행
```bash
yarn start:develop
# Dev
npm run start:dev
```
- env에 명시된 데이터베이스에 연결되어 서버를 실행합니다.


> production stage 서버는 직접 실행시키는 script가 없고, ```config:prod``` 명령어로 env파일을 읽어서 실행합니다.
> env 과같은 환경 변수는 담당자에게 공유 받으세요.
# project-structure
### OpenAPI
> /api-docs
아키텍처는 다음과 같이 형성되어있습니다.
## dev arichitecture
![img.png](public/dev-structure.png)
# Project Structure

## prod arichitecture
![img_1.png](public/prod-structure.png)
아키텍처는 다음과 같이 형성되어있습니다.
## Architecture
![Sopt_Official_diagram drawio](https://github.com/user-attachments/assets/16103a1c-61c7-4d19-9e81-709aa9e29fc7)

- 인스턴스는 EC2 내부에서 동작합니다.
- EC2 내부에 Docker container가 존재하고, 호스트, 컨테이너 포트는 3000:3000으로 포워딩 되어있습니다.
- docker image는 개인 dockerHub에서 관리하고 있고 인수인계시 계정을 전환하는 작업이 필요합니다.
- EC2 내부에 Docker container가 존재합니다.
- NestJS 의 경우, 3000:3000으로 포워딩 및 / route 에 매핑되어 있습니다.
- Spring Boot 의 경우, 8080:8080으로 포워딩 및 /v2 route 에 매핑되어 있습니다.
- Docker image는 AWS Public ECR 에서 관리하고 있고, 인수인계 시 AWS 계정에 PublicECR 관련 IAM Role 을 부여받아야 합니다.

둘다 비슷한 구조를 형성하고있지만 Nginx, ElB 존재 여부의 차이밖에 없습니다.
Dev, Prod 모두 동일한 구조를 형성하고 있고, 리소스 차이밖에 없습니다.

## deploy-pipeline
## Deploy-Pipeline
- deploy pipeline은 github action을 이용하여 구성되어있습니다.
- github action은 ```./github/workflows``` 에서 확인할 수 있습니다.
- workflow 파일은 총 3가지가 있고, 각각 다음과 같은 역할을 합니다.
Expand All @@ -54,11 +51,11 @@
3. ```cd.prod.yml``` : main 브랜치에 푸시(또는 머지)가 되었을때마다 수행합니다. production 서버에 배포가 됩니다.
- ```cd.***.yml``` workflow는 다음과 같은 동작을 합니다.
1. docker image를 빌드합니다.
2. docker image를 dockerHub에 push합니다.
3. EC2에 ssh로 접속하여 dockerHub에서 이미지를 pull합니다.
2. docker image를 ECR 에 push합니다.
3. EC2에 ssh로 접속하여 ECR 에서 이미지를 pull합니다.
4. EC2에서 실행중인 container를 종료합니다.
5. docker container를 실행합니다.
> DockerHub 관련 Secret은, gitHub 관리자에게 문의하여 Owner권한을 획득 후, Repository secret에서 설정하시기 바랍니다. 자세한 설명은 별도로 공유드린 문서에서 확인 하실 수 있습니다.
5. docker container 를 실행합니다.
> GitAction 관련 Secret은, GitHub 관리자에게 문의하여 Owner권한을 획득 후, Repository secret에서 설정하시기 바랍니다. 자세한 설명은 별도로 공유드린 문서에서 확인 하실 수 있습니다.


Expand Down
Binary file removed public/dev-structure.png
Binary file not shown.
Binary file removed public/prod-structure.png
Binary file not shown.
6 changes: 5 additions & 1 deletion src/visitor/service/visitor.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,12 @@ export class VisitorService {
const result: VisitorCountUpResponseDto = { Status: 'fail' };
try {
const ip = req.ip;
const realIp = req.headers['x-real-ip'] as string;
const forwardedFor = req.headers['x-forwarded-for'] as string;

const clientIp = realIp || forwardedFor || ip;
const userAgent = req.get('user-agent');
const uniqueUserInfo = `visitor-${userAgent}${ip}`;
const uniqueUserInfo = `visitor-${userAgent}${clientIp}`;

await this.cacheManager.set(uniqueUserInfo, 'visited', 24 * 60 * 60);

Expand Down

0 comments on commit 2bb5812

Please sign in to comment.