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
'Development > Project' 카테고리의 다른 글
모해묵지 개발을 위한 준비 (0) | 2022.02.26 |
---|---|
211214 ~ 211215 fc- 개발일지 (0) | 2022.01.30 |
211116 ~ 211206 fc- 개발일지 (0) | 2022.01.30 |
211020~211122 이게뭐약 리뉴얼 개발일지 (0) | 2022.01.30 |
모해묵지 프로젝트 Readme (0) | 2021.11.28 |