320x100
320x100

1. 서버 시간 동기화 
: sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
: 기존 /etc/localtime 삭제 후 진행

2. 도커 권한 관련 설정 (젠킨스에서의 빌드를 위함)
sudo usermod -aG jenkins $USER
sudo usermod -aG docker $USER 
sudo usermod -aG docker jenkins
sudo chown root:docker /var/run/docker.sock
shutdown -r now


3. 젠킨스를  통한 도커 이미지 빌드 테스트
: AWS 80 포트 개방
: firewall-cmd --permanent --add-port=80/tcp --zone=public
: firewall-cmd --reload
: 오류 분석
=> backend 및 frontend의 alpine linux 컨테이너의 go 및 nodejs, npm 버전 변경 


4. github와 slack 연동


5. 문제분석
- ec2 인스턴스의 용량이 낮아 Jenkins 실행시 프로세스 사용률이 너무 올라가버림

 

 

 

 

AWS EC2 인스턴스 요금
https://aws.amazon.com/ko/ec2/pricing/

요금제 
- 온디맨드 
: 사용한 만큼 지불
: 인스턴스 생성시 과금 시작. 종료시 반납

- 스팟 인스턴스 
: 사용한 만큼 지불
: 할인된 가격으로 AWS 인프라를 사용 (온디맨드에 비해 90%까지 저렴)
: AWS에서 남아도는 자원을 활용하기 위해 있는 요금제
: 시기에 따라 인스턴스의 사용 요금이 다름

- 예약 인스턴스
: 선납금
: 온디맨드에 비해 75%까지 저렴
: 인스턴스를 사용할 시기와 시간 등을 미리 설정하여 시작과 종료 시기 설정

- 전용 호스팅
: 고객 전용 물리적 EC2 서버 
: 온디맨드외 비교하여 70% 할인된 금액으로 인스턴스 예약 가능 

- 초당결제
: 60초 이상 사용분에 대한 인스턴스 요금 (시작~종료)



인스턴스 유형
https://aws.amazon.com/ko/ec2/instance-types/


스팟 인스턴스 가격 (t3와 t4g 위주로 확인)
https://aws.amazon.com/ko/ec2/spot/pricing/

 

 

 

 

 

 

1. 인프라 관련 준비사항
- AWS EC2 예약 인스턴스 생성 방법에 대한 검색
: 예약기간 설정

- EC2 인스턴스와 Aurora DB의 연결
: 인스턴스에서 서버 프로그램 실행 뒤 연결 테스트 후 컨테이너로 연결 테스트 (백엔드에 서버 연결 후 콘솔 표시 요청 필요)

- 프론트엔드 빌드 문제 해결
: npm WARN old lockfile This is a one-time fix-up, please be patient...

- 스펙
ㆍ빌드용
: x86 기반 cpu (2core) / 8gb ram / 25gb storage 
ㆍ배포용
: x86 기반 cpu (2core) / 8gb ram / 20gb storage
ㆍAurora DB 
: MySQL 8.0



2. 인프라 생성
- 구성
: Ec2 2대 생성 이후 두 인스턴스간 SSH 데이터 전송 세팅 (사용자 계정 설정 필요)

- Jenkins
: Jenkins 컨테이너를 빌드용 인스턴스에 생성 및 구동 
: Jenkins에서 master-slave 구조로 jenkins agent를 이용
: golang 및 DB 관리 컨테이너를 배포용 인스턴스에 생성 및 구동

- Docker Swarm
: 두 인스턴스에 대한 Docker Swarm 클러스터 구축 (Manage Node = 빌드용 인스턴스 / Worker Node = 배포용 인스턴스)

※ 고려사항
: Jenkins Agent Node에 대한 자세한 공부 (Docker Swarm과 굳이 병행해야 하는지) 
: Docker Swarm 클러스터와의 비교 (단독사용시, Agent Node와 Docker Swarm 중에 무엇을 골라야 하는가)



 

1. 인프라 고려사항
- Jenkins
: 1G 이상의 메모리 공간 필요
=> 현 사용중인 온프레미스 서버 기준 3.2GB의 메모리 차지
=> 컨테이너화를 통한 문제해결

- Docker
: 1G 이상의 메모리 공간 필요



2. 인프라 생성
- t4g,small 인스턴스 2개 생성
: arm64 기반 2core cpu / 2GB 메모리 
: 온디맨드 요금 시간당 0.0208 달러 / 2대 합 한달 37.21 달러

※ AWS pricing calculator
https://calculator.aws



3. 인프라 구성
- Build Server
: Jenkins Container

- Deploy Server
: golang 및 nodejs Container
: nodejs Container = react frontend Container

- 전체구성
: 빌드서버 (Jenkins Container > Build > SSH Send to Deploy Server Local > Exec Command)
: 배포 서버 (/usr/fc)



4. 서버 별 필요사항
- 빌드서버 (빌드 컨테이너 10개)
: 사용자 계정 세팅 (RSA / pem 파일 <SSH 접속용>)
: SSH 설정 (14260 포트 = 접속 / 15260 포트 = 전송)
: Docker 설치 
: git 설치
: firewall 설치 및 설정

- 배포서버 (백엔드 10개 / 프론트엔드 10개)
: 사용자 계정 세팅 (RSA / pem 파일 <SSH 전송용>)
: SSH 설정 (14260 포트 = 접속 / 15260 포트 = 전송)
: Docker 설치 
: git 설치
: firewall 설치 및 설정
: Docker Swarm 설치 및 init 
: Aurora DB와 연결


※ 젠킨스 SSH 전송 참조
https://2mukee.tistory.com/245








300x250
728x90