Dev./Github Actions

[Cloud] Github Actions: Concept of CI

Ivan'show 2023. 8. 28.
728x90
반응형

CI: Continuous Intergration

야러 개발자들이 동시에 작업하고 있는 소스 코드의 변경사항과 테스트를 통합하여 한번에 프로세싱하게 한다. 이는 일련의 과정들을 자동으로 반드시 진행하게 하여 반복되는 문제점에 대한 개선사항을 테스트하게 된다.

Muti stage 설계

  • local: 각 개발자가 작업하는 소스코드가 있는 공간
  • dev: local 단계의 소스코드를 모아서 관리하는 공간
  • test: 소스코드의 결함을 찾아내는 공간
  • staging: test 와 비슷 한개념으로 production 으로 넘어가기 전 단계인 공간
  • production: 실제 서비스가 운영되는 공간으로 유저가 사용하게되는 공간

django 에서는 settings.py 와 .env 파일등을 각 stage 별로 관리하게 된다.

실제 Staging 환경 구축 과정 요약

  • NCP 에서 인스턴스를 새로 생성해서 staging django server 와 staging DB server 를 만든다.
  • DB 서버에 접속해서 PostgreSQL:13 으로 이미지를 pull 받아서 (docker hub) 컨테이너를 띄운다.
  • 이때 staging server 에 적용되는 환경변수들은 production 에 적용된 내용이랑 다르게 한다.
  • Django 서버를 열어 lion-app (NCP - container registry 에 있는) 이미지를 pull 받아온다.
  • 리눅스 서버에서 컨테이너로 파일들을 카피하여 Django 서버를 여는 작업이기 때문에 직접 컨테이너로 접속해서 환경변수와 내용들을 수정해줘야 한다.
  • 환경변수들을 연결하여 DB 서버와 정상적인 커넥션을 확인하고 브라우저에서 접속하여 체크한다.
  • [Additional] AWS CLI 환경도 설치하여 AWS 에서도 사용할 수 있게 해보자
  • 브라우저로 접속해서 Disallowed 가 뜨면 연결 성공

Process with code

인스턴스 설정 후 생성

BE

도커 설치

sudo apt-get update && sudo apt-get install docker.io

권한 부여

sudo usermod -aG docker lion

ssh 연결 해제 이후 다시 접속

exit

NCP 로그인

docker login ${NCP address}

Username: ${ACCESSKEY}
Password: ${SECRETKEY}

NCP docker pull

docker pull ${NCP address}/${image}:${tag}

환경변수 설정

vi .env

...

혹은 깃 클론 받은 환경파일에 작성

--env-file .envs/prod/db --env-file .envs/prod/django --env-file .envs/prod/server

컨테이너를 띄울 때 따로 볼륨을 설정하지 않았으니 AWS 설정

#
vi ~/.aws/config

# 
vi ~/.aws/credentials

파일 안쪽 내용은 로컬에서 가져와서 복사 붙여넣기

컨테이너 실행

docker run -p 8000:8000 -d --name lion-app-staging --env-file .envs/prod/db --env-file .envs/prod/django --env-file .envs/prod/server -v ~/.aws/:/root/.aws ${NCP address}/${image name}:${tag} /start

내 명령어

docker run -p 8000:8000 -d --name lion-app-staging --env-file .envs/prod/db --env-file .envs/prod/django --env-file .envs/prod/server -v ~/.aws/:/root/.aws [likelion-cr-mh.kr.ncr.ntruss.com](<http://likelion-cr-mh.kr.ncr.ntruss.com/>)/lion-app:latest /start

만약 DB 가 연결되어 있지 않다면

docker logs -f lion-app-staging 

#
Wating for PostgreSQL ...
Wating for PostgreSQL ...
Wating for PostgreSQL ...
Wating for PostgreSQL ...

DB 가 연결되어 있다면

docker logs -f lion-app-staging 

#
Connecting to database...
PostgreSQL is available

160 static files copied to '/var/www/html/static'.
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, forumapp, sessions
Running migrations:
  No migrations to apply.
[2023-08-16 01:06:15 +0000] [14] [INFO] Starting gunicorn 21.2.0
[2023-08-16 01:06:15 +0000] [14] [INFO] Listening at: <http://0.0.0.0:8000> (14)
[2023-08-16 01:06:15 +0000] [14] [INFO] Using worker: sync
[2023-08-16 01:06:15 +0000] [15] [INFO] Booting worker with pid: 15
[2023-08-16 01:06:15 +0000] [16] [INFO] Booting worker with pid: 16
[2023-08-16 01:06:15 +0000] [17] [INFO] Booting worker with pid: 17
[2023-08-16 01:06:15 +0000] [18] [INFO] Booting worker with pid: 18
[2023-08-16 01:06:15 +0000] [19] [INFO] Booting worker with pid: 19

DB

도커 설치

sudo apt-get update && sudo apt-get install docker.io

권한 부여

sudo usermod -aG docker lion

ssh 연결 해제 이후 다시 접속

exit

환경변수 설정

# .env

vi .env

도커 실행

docker run -p 5432:5432 -d --name db-staging --env-file .env -v postgres_data:/var/lib/postgresql/data postgres:13

postgres:13 의 경우 미리 pull 을 받지 않아도 run 하는 과정에서 이미지를 받아오기 떄문에 바로 run 가능

Django 서버 주소로 들어가면

 

Load balancer

로드밸랜서로 들어가서 설정 후 생성

원래는 VPC 도 production 과 다르게 해야하지만 우선은 같게 진행

Target Group 설정

접속정보 확인 후 접속

이렇게 되면 인프라 구축은 완성

 

 

 

 

 

 

 

 

 

 

728x90
반응형

댓글