1. 인프라 서비스 비교
ㆍ필요한 부분
: 컴퓨팅 / RDB / 쿠버네티스 서비스
: Jenkins를 이용한 CICD 고려
-> Amazon EKS를 사용할 경우 컨트롤 플레인 노드를 AWS에서 관리 가능
-> MS AKS를 사용할 경우 컨트롤 플레인 노드를 Azure에서 관리 가능
=> AWS로 결정
2. fc 인프라 계획
ㆍ초기
: 클라우드 서비스 { AWS EC2 + Amazon Aurora }
: 컨테이너 (Docker + Docker Compose + Docker Swarm)
: CI/CD (Jenkins)
※ Amazon Aurora
: AWS에서 제공하는 관계형 DB 서비스
: MySQL 및 PostgreSQL과 호환
: Aurora 클러스터를 생성하면 Aurora SSD라는 스토리지가 포함되어 생성됨
: 데이터베이스의 용량이 늘어나면 볼륨이 자동으로 확장 되며 최대 크기는 128TB
※ Docker
: 컨테이너 생성 도구
: 컨테이너는 독립적인 개발 환경을 구축하는 역할 수행
: 개발 환경을 일관적으로 편리하게 유지할 수 있음
※ Docker Compose
: 한 번에 여러 개의 컨테이너를 실행하는 도구
※ Docker Swarm
: Docker Compose와 연동하여 컨테이너가 항상 실행되도록 유지해주는 컨테이너 오케스트레이션
: 한 서비스 (서버 프로그램)의 컨테이너 개수 조절 및 업데이트 간 서비스 유지 기능 등 지원
※ 컨테이너 오케스트레이션
: 수많은 컨테이너를 제어 및 조율하는 도구
: 컨테이너의 개수나 가용성 유지, 업데이트, 자원할당 등의 기능
ㆍ중기
: 클라우드 서비스 { AWS EC2 + Amazon Aurora }
: 컨테이너 (Docker + Docker Compose)
: 컨테이너 오케스트레이션 (Kubernetes)
: CI/CD (Jenkins or AWS CICD 도구)
: 모니터링 (그라파나 or 프로메테우스 or AWS 지원 도구)
: 로깅 (AWS 지원 도구 활용)
3. fc 협업도구
ㆍ협업도구별 비교
: https://2mukee.tistory.com/311
ㆍ선정한 협업도구
: 슬랙
ㆍ선정이유
: Github 와의 연동을 통한 푸쉬 등 이벤트 알림 가능
: Jenkins 와의 연동을 통한 빌드 성공 여부 알림 가능
: 메신저 및 화상통화 기능 제공
: 공지전파 및 중요 공지 강조 가능
: 무료
1. 백엔드 빌드 방법
: cd /backend
: go build
1-1. 백엔드 실행 방법
: cd /backend
: ./backend.exe
2. 프론트엔드 빌드 방법
: cd /frontend
: npm run build
2-1. 프론트엔드 빌드 방법
: cd /frontend/.next
: npm start
할 일
1. 백엔드 및 프론트 docker image 작성
: multistage build
2. docker compose file 작성
: 백엔드 및 프론트 엔드 running
3. Shellfile 작성
: container build and compose update
=> onpremis server에서 수행
4. 모니터링에 대한 연구
: 그라파나, 프로메테우스 등 도구에 대한 연구
: 모니터링 도구 선정
5. 로깅에 대한 연구
: ELK 스택 등 도구에 대한 연구
: 로깅 도구 선정
1. AWS Ec2 관련
- Amazon Aurora DB
: MySQL 및 PostgreSQL 호환되는 관계형 데이터베이스 서비스
: Aurora SSD라는 스토리지와 DBMS를 제공
: 데이터베이스의 용량이 늘어나면 볼륨이 자동으로 확장. 최대 128TB까지 확장 가능
=> Ec2에서 Aurora DB 연결 테스트 이후 공지 예정
- Ec2
: 프리티어 인스턴스 1대에 여러 컨테이너를 두고 구동
2. 컨테이너 및 CICD 관련
- Docker
: Docker compose, Docker Swarm을 우선적으로 사용하여 컨테이너의 가용성 유지 등의 관리 수행
- Jenkins
: Slack 및 github와 연동 예정 (github와 slack도 연동 예정)
: Ec2에 설치 예정
※ 질문사항
: 현재 웹페이지를 띄우는건 next라는 프레임워크로 빌드를 하고 따로 웹 서버 없이 구동하는 것인지?
=> 프론트 run <build 명령어 및 build 실행 명령어 필요>
: 실제 서비스를 할때에도 go 웹 서버 대신 next를 통해 제공하고 go언어로 WAS를 작성하는 건지?
=> REST API / MVC에서 M,C
: 현재 레포지터리를 개발용인 fc와 빌드용인 상평통보를 따로 사용하는데
Docker의 multistage build를 통해 빌드용 이미지와 배포용 이미지를 한번에
빌드해서 소스코드의 빌드와 배포를 컨테이너에서 수행시키는건 어떻게 생각하시는지?
=> go언어 소스코드 빌드 하는 명령어 <./build.bat> / 빌드물 실행 명령어 <./run.bat>
빌드명령어: go build
빌드 후 dist 파일 이름: backend.exe
=> 응용프로그램 실행 -> Backend dir
=> 프론트 소스코드 빌드 하는 명령어 (npm run build) / 빌드물 실행 명령어 (npm start) <dist>
=> 응용프로그램 실행 -> .next dir
※ 배포 방법에 대해서
: Ec2 한 대에 젠킨스를 설치하고 쉘파일을 통해 컨테이너 업데이트
=> 1안 구성 후 쿠버네티스를 공부하여 AWS의 쿠버네티스 관리 서비스 혹은 쿠버네티스 자체 사용 고려
※ 모니터링에 대해서
: 그라파나와 프로메테우스 등 도구들을 알아보고 필요한 도구를 함께 선정
: 로깅의 경우 AWS 자체 도구를 사용하거나 ELK Stack을 사용 고려중
1. AWS 인스턴스 생성
- ssh 포트 변경
- 사용자 계정 로그인 세팅
: vi /etc/group (admin에 ,fc-dev 추가)
: vi /etc/sudoers (fc-dev ALL=(ALL) ALL)
: sudo gpasswd -a fc-dev wheel
: su fc-dev
: mkdir /home-/fc-dev/.ssh
: touch /home-/fc-dev/authorized_keys
: touch /home-/fc-dev/fc-dev.pem
: ssh-keygen -t rsa -b 4096
: cat id_rsa.pub >> authorized_keys
: cat id_rsa >> fc-dev.pem
: sudo id_rsa.pub >> ~/.ssh/authorized_keys
: EC2에 키페어 추가 (public)
: pem 파일 생성 (개발PC/private) -> ---BEGINRSA--- 에서 ---ENDRSA---까지
: sudo systemctl restart sshd
: chmod 600 /home/fc-dev/.ssh/
: chmod 600 /home/fc-dev/.ssh/authorized_keys
: chmod 400 /home/fc-dev/.ssh/fc-dev.pem
: chmod 700 /home/fc-dev
- 기타사항
: putty를 통한 ssh 접속 시 파일 필요 (ppk 파일 = 개인연락)
2. 필요 라이브러리 및 패키지 설치
- 준비사항 (OS정보 확인)
: cat /etc/*release*
- Docker 설치
: yum install docker
: systemctl enable docker
: systemctl stat docker
- git 설치
: yum install git
- jenkins 설치
: wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
: rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
: amazon-linux-extras install epel
: amazon-linux-extras install java-openjdk11
: yum-config-manager --enable epel
: yum install daemonize
: yum install jenkins
3. 젠킨스 설정
- 젠킨스 포트 변경
: vi /etc/sysconfig/jenkins
: JENKINS_PORT="18260"
- 방화벽 설정
: yum install firewalld
: systemctl enable firewalld
: systemctl start firewalld
: firewall-cmd --zone=public --add-port=18260/tcp --permanent
: firewall-cmd --zone=public --add-service=http --permanent
: firewall-cmd --reload
- 젠킨스 시스템 등록 및 자동실행 설정
: systemctl enable jenkins
: systemctl start jenkins
: chkconfig jenkins on
- 젠킨스 접속 및 설정
: 필요 플러그인 설치
- 젠킨스 깃허브 연결
: 완료 (pull request 및 push에 대한 webhook 등)
- 젠킨스 슬랙 연동
: 완료
※ 예정사항
도커 설정
- Docker Swarm 설치
- Docker Permission 설정
- AWS에서의 서버 포트 개통
- Aurora DB와 컨테이너의 연결
'Development > Project' 카테고리의 다른 글
211214 ~ 211215 fc- 개발일지 (0) | 2022.01.30 |
---|---|
211207 ~ 211210 fc- 개발일지 (0) | 2022.01.30 |
211020~211122 이게뭐약 리뉴얼 개발일지 (0) | 2022.01.30 |
모해묵지 프로젝트 Readme (0) | 2021.11.28 |
Hermes - flutter / dart 정리 (0) | 2021.10.20 |