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 |