우주먼지
article thumbnail
Published 2022. 12. 2. 13:28
[CI/CD with AWS] - Deploy Server Ops/AWS

1. 💡 AWS 환경이 아닐경우 & AWS 환경일 경우

 

  • AWS 환경이 아닐 경우
    • jdk11.tar.gz 다운
    • tar xvfz openjdk-11+28_linux-x64_bin.tar.gz
    • vi /etc/profile (환경변수 잡아주기)
    • source /etc/profile
<java />
# java exportJAVA_HOME=/JAVA 설치경로/jdk-11 export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib/tools.jar

2. 💡 AWS

 

2.1. IAM Role 생성

 

  • AmazonS3FullAccess
  • AmazonEC2RoleforAWSCodeDeploy
  • AWSCodeDeployRole
  • AmazonSSMFullAccess
  • AmazonEC2FullAccess

 

추가한 정책 목록

 

신뢰정책에 내 리전의 codedeploy 서비스 추가

 

EC2에 IAM Role 연결


2.2. 보안그룹 포트 오픈

 

  • 3306 - DB Connection Endpoint
  • 8080 - Spring Boot Endpoint
  • 22 - SSH Endpoint
  • 6379 - RDS Endpoint
  • 5000 - Docker Private Registry Endpoint


2.3. EC2 인스턴스 생성 (Elastic IP 설정)

 


2.4. EC2 내부 패키지 설치

 

2.4.1. JDK 설치

  • amazon-linux-extra install -y openjdk11

 

2.4.2. GIT 설치

  • yum -y install git

 

2.4.3. AWS CLI 설치

 

2.4.4. CodeDeploy Agent 설치

  • yum -y update
  • yum -y install gcc (C Compiler)
  • gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
  • curl -sSL https://rvm.io/pkuczynski.asc | gpg2 --import -   -> import gpg key 
  • curl -sSL https://get.rvm.io | bash -s stable  (rvm 설치 스크립트)
  • source /etc/profile.d/rvm.sh  (시스템 환경변수 & rvm 정보 업데이트)
  • rvm reload
  • rvm requirements run  (rvm 의존성 패키지 설치)
  • rvm list known
  • rvm install [version] (2.7)
  • rvm list
  • rvm use [version] --default
  • ruby -v
  • gem install aws-sdk  (Ruby용 sdk 설치)
  • wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
  • chmod +x install
  • ./install auto > /tmp/logfile
  • service codedeploy-agent status

Code Deploy Agent 설치

 

2.4.5. Docker & Docker Compose 설치

  • yum -y install docker
  • systemctl start docker && systemctl enable docker && systemctl status docker
  • usermod -aG docker ec2-user

Docker 설치

Docker-compose 설치

 

2.4.6. DB 컨테이너 생성

  • docker run -d -p 3306:3306 --name maindb -e MYSQL_DATABASE=mainproject -e MYSQL_ROOT_PASSWORD=password mysql:latest
  • docker ps

 

2.4.7. Dockerfile 작성 (로컬환경)

  • Dockerfile 작성
  • docker build --tag={dockerhub-accounts}/main:1.0.0 --force-rm=true .
  • docker push {dockerhub-accounts}/main:1.0.0-beta  (Docker Hub에 Push)

Dockerfile

  • AWS 환경으로 돌아와서
  • docker pull {dockerhub-accounts}/main:1.0.0-beta
  • docker run -d -p 8080:8080 -t {dockerhub-accounts}/main:1.0.0-beta

2.5. AWS CodeDeploy & CodePipeline 설정

 

2.6. CodeDeploy

인스턴스 내에 CodeDeploy-Agent 설치가 되어있어야함

 

  • 어플리케이션 - 생성 - 배포그룹 생성
  • IAM & Instance Tag 지정, LoadBalancer 비활성화

 

2.7. CodePipeline

  • 파이프라인 생성 - 소스공급자(Github version 2)
  • Github 연결

3. 💡 Github SSH Key 등록

 


4. 💡 appspec.yml & buildspec.yml 작성

 

<bash />
# appspec.yml version: 0.0 os: linux files: - source: / destination: /root/build hooks: BeforeInstall: - location: server_clear.sh timeout: 3000 runas: root AfterInstall: - location: initialize.sh timeout: 3000 runas: 3000 ApplicationStart: - location: server_start.sh timeout: 3000 runas: root ApplicationStop: - location: server_stop.sh timeout: 3000 runas: root

 

<bash />
# buildspec.yml version: 0.2 phases: install: runtime-versions: java: corretto11 build: commands: - echo Build Starting on `date` - cd server - chmod +x ./gradlew - ./gradlew build post_build: commands: - echo $(basename ./server/build/libs/*.jar) artifacts: files: - server/build/libs/*.jar - server/scripts/** - server/appspec.yml discard-paths: yes

 

<bash />
#!/usr/bin/env bash chmod +x /home/ubuntu/build/** #!/usr/bin/env bash rm -rf /home/ubuntu/build #!/usr/bin/env bash cd /home/ubuntu/build sudo nohup java -jar DeployServer-0.0.1-SNAPSHOT.jar > /dev/null 2> /dev/null < /dev/null & #!/usr/bin/env bash sudo pkill -f 'java -jar'

 

script


5. 💡 git clone or sftp를 이용한 서버 배포 & 실행

 

./gradlew :base-api:clean :base-api:bootJar

서버 실행


6. 💡 서버 실행 Shell Script 작성

 

<bash />
#!/bin/bash # EC2 내 Spring Boot 실행 스크립트 # 서버가 실행중이면 프로세스 종료 ps -ef | grep "main_11-0.0.1-SNAPSHOT.jar" | grep -v grep | awk '{print $2}' | xargs kill -9 2> /dev/null # 종료 이력 파악 후 적절한 문구 출력 if [ $? -eq 0 ];then echo "Successfully Stopped" else echo "Application is Not Running" fi # 어플리케이션 재 실행 echo "Application Restarted!" echo $1 # 어플리케이션 백그라운드 실행 nohup java -jar /root/main/server/build/libs/main_11-0.0.1-SNAPSHOT.jar > /dev/null 2>&1 &

7. 💡 수동 실행 -> 스크립트를 이용한 자동 서버 실행 (Optional)

 

 

 

 

'Ops > AWS' 카테고리의 다른 글

[CI/CD with AWS] - Create & Connect RDS  (0) 2022.12.05
[CI/CD with AWS] - Deploy Client to S3 Bucket  (0) 2022.12.02
Amazon Web Service (AWS) Deployment  (2) 2022.12.02
AWS Memo  (0) 2022.09.22
AWS CloudWatch Custom Metric  (0) 2022.09.22
profile

우주먼지

@o귤o

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그