[CI & CD - AWS] 1 - Deploy Server

2023. 4. 16. 00:27·⚙️ Ops/CI & CD
목차
  1. 💡 AWS 환경이 아닐경우 & AWS 환경일 경우
  2. 💡 AWS
  3. IAM Role 생성
  4. 보안그룹 포트 오픈
  5. EC2 인스턴스 생성 (Elastic IP 설정)
  6. EC2 내부 패키지 설치
  7. AWS CodeDeploy & CodePipeline 설정
  8. CodeDeploy
  9. CodePipeline
  10. 💡 Github SSH Key 등록
  11. 💡 appspec.yml & buildspec.yml 작성
  12. 💡 git clone or sftp를 이용한 서버 배포 & 실행
  13. 💡 서버 실행 Shell Script 작성
  14. 💡 수동 실행 -> 스크립트를 이용한 자동 서버 실행 (Optional)

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


AWS 환경이 아닐 경우

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

AWS CLI 환경일 경우

  • curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip["](https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip") -o "awscliv2.zip"
  • unzip awscliv2.zip
  • sudo ./aws/install

💡 AWS


IAM Role 생성

  • AmazonS3FullAccess
  • AmazonEC2RoleforAWSCodeDeploy
  • AWSCodeDeployRole
  • AmazonSSMFullAccess
  • AmazonEC2FullAccess

추가한 정책 목록

img


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

img


EC2에 IAM Role 연결

img


보안그룹 포트 오픈

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

img


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

img


EC2 내부 패키지 설치


JDK 설치

  • amazon-linux-extra install -y openjdk11


GIT 설치

  • yum -y install git


AWS CLI 설치

  • curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip["](https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip") -o "awscliv2.zip"
  • unzip awscliv2.zip
  • sudo ./aws/install

img


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 설치

img


Docker & Docker Compose 설치

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

Docker 설치

img

  • curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
  • chmod +x /usr/local/bin/docker-compose
  • docker-compose up -d --build (Dockerfile이 작성된 상태인 경우)

Docker-compose 설치

img


DB 컨테이너 생성

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

img


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

img

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

AWS CodeDeploy & CodePipeline 설정


CodeDeploy

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

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

CodePipeline

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

💡 Github SSH Key 등록

img


💡 appspec.yml & buildspec.yml 작성

# 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

# 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

#!/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 파일들

img


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


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

서버 실행

img


💡 서버 실행 Shell Script 작성

#!/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 &

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

img


img

저작자표시 (새창열림)

'⚙️ Ops > CI & CD' 카테고리의 다른 글

[CI & CD - AWS] 5 - Automated Deployment  (0) 2023.04.16
[CI & CD - AWS] 4 - ELB & Cert & Route53  (0) 2023.04.16
[CI & CD - AWS] 3 - Connect RDS  (0) 2023.04.16
[CI & CD - AWS] 2 - Deploy Client  (0) 2023.04.16
[CI & CD - Github Actions] with AWS Code Deploy  (0) 2023.04.09
  1. 💡 AWS 환경이 아닐경우 & AWS 환경일 경우
  2. 💡 AWS
  3. IAM Role 생성
  4. 보안그룹 포트 오픈
  5. EC2 인스턴스 생성 (Elastic IP 설정)
  6. EC2 내부 패키지 설치
  7. AWS CodeDeploy & CodePipeline 설정
  8. CodeDeploy
  9. CodePipeline
  10. 💡 Github SSH Key 등록
  11. 💡 appspec.yml & buildspec.yml 작성
  12. 💡 git clone or sftp를 이용한 서버 배포 & 실행
  13. 💡 서버 실행 Shell Script 작성
  14. 💡 수동 실행 -> 스크립트를 이용한 자동 서버 실행 (Optional)
'⚙️ Ops/CI & CD' 카테고리의 다른 글
  • [CI & CD - AWS] 4 - ELB & Cert & Route53
  • [CI & CD - AWS] 3 - Connect RDS
  • [CI & CD - AWS] 2 - Deploy Client
  • [CI & CD - Github Actions] with AWS Code Deploy
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (422)
      • 📘 Frontend (71)
        • Markup (1)
        • Style Sheet (2)
        • Dart (8)
        • Javascript (12)
        • TypeScript (1)
        • Vue (36)
        • React (2)
        • Flutter (9)
      • 📘 Backend (143)
        • Java (34)
        • Concurrency (19)
        • Reflection (1)
        • Kotlin (29)
        • Python (1)
        • Spring (42)
        • Spring Cloud (5)
        • Message Broker (5)
        • Streaming (2)
        • 기능 개발 (5)
      • 💻 Server (6)
        • Linux (6)
      • ❌ Error Handling (11)
      • 📦 Database (62)
        • SQL (31)
        • NoSQL (2)
        • JPQL (9)
        • QueryDSL (12)
        • Basic (4)
        • Firebase (4)
      • ⚙️ Ops (57)
        • CS (6)
        • AWS (9)
        • Docker (8)
        • Kubernetes (13)
        • MSA (1)
        • CI & CD (20)
      • 📚 Data Architect (48)
        • Data Structure (10)
        • Algorithm (8)
        • Programmers (17)
        • BaekJoon (5)
        • CodeUp (4)
        • Design Pattern (4)
        • AI (0)
      • ⚒️ Management & Tool (8)
        • Git (7)
        • IntelliJ (1)
      • 📄 Document (10)
        • Project 설계 (6)
        • Server Migration (3)
      • 📄 책읽기 (2)
        • 시작하세요! 도커 & 쿠버네티스 (2)
      • 🎮 Game (4)
        • Stardew Vally (1)
        • Path of Exile (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      React #Markdown
      GStreamer #Pipeline
      Lock #Thread #Concurrency
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    [CI & CD - AWS] 1 - Deploy Server
    상단으로

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.