티스토리 뷰

728x90
반응형

목차

     

     

    이제 기본적인 구현은 어느 정도 완료되었다는 생각이 들어서 다음 단계로 넘어가려고 한다.

     

    이 글부터 몇 개의 글을 이용해 AWS와 Github Actions, NGINX를 이용한 자동배포를 구현하고

     

    다음 글에서는 AWS를 사용하는 김에 S3에 이미지를 업로드 및 썸네일 생성까지 구현해 보겠다.

     

    각 주제별로 하나씩 글을 적는 것이 목표이지만..

     

    일단 시작해 본다.

     

    먼저 사용하려는 서비스에 대해 각각 요약을 하고 지나가자.

     

    Github Actions란 개발자라면 누구나 하나 이상의 계정을 가진 깃허브에서 제공하는 CI/CD 서비스이다.

     

    그 간결함과 속도 덕분에 점유율을 빠르게 높이고 있으며, 상대적으로 구현 난도가 낮아 지금과 같은

     

    토이 프로젝트에서 사용해 보기 좋다.

     

    나머지 개념들은 이전 글에 정리해 둔 것이 있으니 링크로 대체한다.

     

    [Cloud]CI, CD, 배포 자동화(Deployment Automation)

     

    [Cloud]CI, CD, 배포 자동화(Deployment Automation)

    컴퓨터를 사용한 자동화의 가장 큰 목적이자 정의 중 하나는 사람의 관여를 줄이는 것이다. 이는 단순 반복 작업에서 사람을 자유롭게 하고, 휴먼 에러(Human Error)에서 프로그램을 자유롭게 해 개

    gnidinger.tistory.com

    [면접 준비 - Cloud]AWS EC2, S3, RDS, 그리고

     

    [면접 준비 - Cloud]AWS EC2, S3, RDS, 그리고

    목차 AWS(Amazon Web Service) 아마존의 클라우드 컴퓨팅 사업부. 클라우드 컴퓨팅을 통한 서비스 배포에 필요한 각종 서비스를 제공한다. EC2(Elastic Compute Cloud) EC2는 AWS에서 제공하는 클라우드 컴퓨팅

    gnidinger.tistory.com

    [면접 준비 - Network]부하 분산(SLB), AWS ELB에 관하여

     

    [면접 준비 - Network]부하 분산(SLB), AWS ELB에 관하여

    목차 Server Load Balancing(SLB) SLB란 말 그대로 하나의 서버에 사용량이 집중되지 않도록 서버를 분산하고, 서버 리소스에게 작업을 나누어주는 기술을 말하며, 당연하게도 그 목적은 가용성과 응답

    gnidinger.tistory.com

    [Network]NGINX 튜토리얼

     

    [Network]NGINX 튜토리얼

    목차 여기저기에서 이름은 많이 주워들은 엔진엑스. 좋다! 빠르다! 가볍다! 길래 쓰지 않을 이유가 없어 보여 한 번 써볼까 하고 기웃거리는 것이 이 글의 목적이다. 엔진엑스는 2004년 10월, 러시

    gnidinger.tistory.com

    추가로, 이 글의 구현을 마쳤을 경우의 대략적인 배포 플로우를 그림으로 표현하면 아래와 같다.

     

     

    AWS Configuration

     

    당연하게도 AWS 계정을 가지고 있되, 어떤 설정도 하지 않는 상태라고 가정하고 진행하겠다.

     

    IAM

     

     

    서비스에서 IAM을 검색한 뒤, 눌러서 대시보드에 접근하자.

     

    다음으로 EC2와 CodeDeploy가 사용할 역할을 생성해 주자.

     

    조금 헷갈릴 수 있겠지만 앞으로 생성할 역할과 IAM 유저는 서로 다른 것이다.

     

    역할 만들기를 눌러주고,

     

    위와 같이 두 개의 권한을 추가한 뒤 다음을 누른다.

     

    이어서 이름을 대충 지어주고 다른 것은 건드릴 필요 없이 바로 역할 생성.

     

    의도한 대로 역할이 생성된 것을 확인할 수 있다.

     

    EC2

     

    계속해서 AWS 설정을 이어가자. 가장 먼저 두 개의 EC2를 생성한다.

     

    위 그림에 그렸듯이 하나는 배포용, 하나는 mongoDB 구성용이다.

     

    EC2를 검색해서 들어간다.

     

    이어서 인스턴스 시작을 누르고,

     

    인스턴스 이름과 운영체제를 정한 뒤

     

    바로 아래에서 새 키 페어를 생성해 준다.

    위와 같이 기억하기 쉬운 이름을 지어주고 생성을 누르면 생성한 이름의 .pem 파일이 생성, 다운로드된다.

     

    이 파일은 이후에 터미널을 이용해 인스턴스에 접근하는데 반드시 있어야 하는 파일이며,

     

    잃어버리면 재생성이 불가능하기 때문에 프로젝트 폴더 근처에 반드시 잘 보관해야 한다.

     

    그 아래의 방화벽(보안그룹)은 일단 기본 설정으로 두고,

     

    스토리지는 프리 티어의 최대 용량인 30기가로 변경해 준다.

     

    그리고 인스턴스 시작.

     

    잠시 기다리면 인스턴스가 생성되고, 대시보드에서 인스턴스에 들어가면 잘 생성돼 실행 중인 것을 확인할 수 있다.

     

    인스턴스가 초기화되는 것을 기다리며, 탄력적 IP를 생성하자.

     

    이는 인스턴스가 재시작되어도 IP 주소가 바뀌지 않게 하려는 목적이다.

    탄력적 IP 주소 할당을 누르면 별 설정 없이 주소를 할당받을 수 있다.

     

    두 개 받아주자.

     

    이어서 주소 연결.

     

    연결할 인스턴스와 프라이빗 주소를 선택한 뒤에 연결을 눌러준다.

     

    이어서 아까 어물쩍 넘어간 보안그룹을 생성하자.

     

    이미 설정된 보안그룹을 고쳐서 써도 된다.

     

    이름과 설명을 적어준 뒤 규칙을 추가한다.

     

    배포 서버 규칙은 우선 위와 같이 다 열어주고 필요에 따라 조절한다.

     

    몽고디비용 서버는 위와 같이 설정한다.

     

    이어서 EC2 인스턴스로 이동, 보안그룹을 변경해 주자.

     

    위와 같이 선택하고,

    위에서 생성한 보안그룹을 추가하고, 기존의 보안그룹을 제거하자.

     

    몽고디비 서버도 같은 작업을 해 주면 된다.

     

    그리고 여기까지 온 김에,

     

    IAM 역할도 위에서 생성한 역할로 바꿔주자.

     

     

    이 작업은 deploy 서버에만 적용하면 된다.

     

    deploy server

     

    이제, 위에서 받았던 .pem 파일이 있는 곳으로 이동해 터미널을 열자.

     

    이어서 아래의 두 명령어를 이용해 .pem 파일의 권한을 변경해 준다.

    chmod 400 cogen-deploy.pem
    chmod 400 cogen-mongo.pem

    이어서 아래와 같은 명령어로 먼저 deploy 서버에 접속한다.

    ssh -i <pem파일 이름>.pem ubuntu@<탄력적 IP 주소>

    순조롭게 접속했다면 다음 명령어를 순서대로 입력한다.

    sudo apt-get update -y
    
    sudo apt-get install ruby-full ruby-webrick wget -y
    
    cd /tmp
    
    wget https://aws-codedeploy-us-east-1.s3.us-east-1.amazonaws.com/releases/codedeploy-agent_1.3.2-1902_all.deb
    
    mkdir codedeploy-agent_1.3.2-1902_ubuntu22
    
    dpkg-deb -R codedeploy-agent_1.3.2-1902_all.deb codedeploy-agent_1.3.2-1902_ubuntu22
    
    sed 's/Depends:.*/Depends:ruby3.0/' -i ./codedeploy-agent_1.3.2-1902_ubuntu22/DEBIAN/control
    
    dpkg-deb -b codedeploy-agent_1.3.2-1902_ubuntu22/
    
    sudo dpkg -i codedeploy-agent_1.3.2-1902_ubuntu22.deb
    
    sudo systemctl list-units --type=service | grep codedeploy
    
    sudo service codedeploy-agent status

    위와 같은 화면을 만났다면 성공이다.

     

    이어서 노드 실행 환경을 구성하자. 아래와 같이 순서대로 입력하면 된다.

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
    
    source ~/.bashrc
    
    nvm install 18
    
    nvm use 18
    
    node -v

    노드 버전이 v18.xx 형식으로 표시된다면 성공이다.

     

    mongoDB server

     

    다음으로 mongoDB 서버 설정이다. 동일하게 접속한 뒤에 업데이트를 해주자.

    sudo apt-get update -y

    이어서 아래의 명령어를 순서대로 입력한다.

     

    이 글의 EC2 버전은 우분투 22.04이기 때문에 몽고디비 6을 설치해야 한다.

    sudo apt-get install gnupg curl -y
    
    curl -fsSL https://pgp.mongodb.com/server-6.0.asc | \
       sudo gpg -o /usr/share/keyrings/mongodb-server-6.0.gpg \
       --dearmor
       
    echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-6.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
    
    sudo apt-get update -y
    
    sudo apt-get install -y mongodb-org
    
    echo "mongodb-org hold" | sudo dpkg --set-selections
    echo "mongodb-org-database hold" | sudo dpkg --set-selections
    echo "mongodb-org-server hold" | sudo dpkg --set-selections
    echo "mongodb-mongosh hold" | sudo dpkg --set-selections
    echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
    echo "mongodb-org-tools hold" | sudo dpkg --set-selections
    
    sudo systemctl start mongod
    
    sudo systemctl status mongod

    역시 위와 같은 화면을 만났다면 성공이다.

     

    이어서 몽고 디비에 접근해 보자.

    mongosh "mongodb://localhost:27017"

    위와 같은 화면을 만났다면 성공이다.

     

    계속해서 외부의 접근을 허용하도록 설정하자. 먼저 admin을 등록한다.

     

    위 test> 옆에 다음과 같이 입력한 뒤에,

    use admin

    admin>으로 바뀌면 아래와 같이 입력한다.

    db.createUser(
      {
        user: "gnidinger",
        pwd: passwordPrompt(), 
        roles: [
          { role: "userAdminAnyDatabase", db: "admin" },
          { role: "readWriteAnyDatabase", db: "admin" }
        ]
      }
    )

    유저 이름은 사용하고 싶은 대로 설정하면 된다. 이처럼 입력하면 비밀번호 입력 라인이 뜨고, 입력하면 완료다.

     

    다음으로 아래와 같이 입력 후,

    db.adminCommand( { shutdown: 1 } )

    exit를 눌러 몽고디비 밖으로 나와준다. 이어서 설정 변경이다. 터미널에 아래와 같이 입력한다.

    sudo vi /etc/mongod.conf

    문서에서 security: 부분의 주석을 해제하고 아래와 같이 적어준다.

    security:
      authorization: enabled

    이어서 net: 아래의 bindIp를 다음과 같이 작성한다.

    net:
      port: 27017
      bindIp: 0.0.0.0

    문서를 저장한 뒤 몽고디비를 재시작해준다.

    sudo systemctl stop mongod
    sudo systemctl start mongod

    이어서 방금 생성한 계정으로 접근을 시도한다.

    mongosh --port 27017  --authenticationDatabase "admin" -u "gnidinger" -p

    성공.

     

    마지막으로 우분투 방화벽을 설정하자. 터미널에서 아래와 같이 입력하면 된다.

    sudo ufw enable
    
    y
    
    sudo ufw allow ssh
    
    sudo ufw allow 27017

     

    마지막으로 로컬에 설치된 Mongo Compass를 통해

     

    위와 같이 입력하면

     

    짠, 접속에 성공한 것을 확인할 수 있다.

     

    S3

     

    계속해서 빌드 파일이 올라갈 S3 버킷을 생성해 보자.

     

    그전에 먼저 외부에서 해당 버킷에 접근하기 위해 IAM 사용자를 하나 생성해주어야 한다.

     

    IAM 서비스에 들어와 사용자 추가를 눌러준다.

     

    이름을 정해주고 다음.

     

    S3, EC2, CodeDeploy에 대한 모든 권한을 부여하고 다음을 누른다.

     

    사용자 생성.

    결과는 이렇다.

    이후엔 방금 생성한 사용자 이름을 눌러서 들어간다.

     

    아래로 조금 내려와 보안 자격 증명을 누르고 액세스 키 만들기 클릭.

     

    아래로 내려와 기타를 선택하고 다음을 누른다.

     

    태그는 옵션이니까 지정하지 않아도 된다. 계속해서 액세스 키 만들기.

     

    최종적으로 이렇게 생성이 된다. 여기서 비밀 액세스 키는 이 화면을 벗어나면 다시 확인할 수 없으니

     

    제대로 확인해서 안전하게 보관하도록 한다.

     

    계속해서 S3를 생성하자.

     

    서비스에서 S3를 검색해서 진입.

     

    버킷 만들기를 눌러준다.

     

    위와 같이 이름과 리전만 제대로 확인한 뒤,

     

    나머지 모든 설정은 기본으로 놓고 버킷을 만들어준다.

     

    끝.

     

    이제 AWS 설정의 절반 정도가 지났다.


    이렇게 해서 IAM 사용자 및 역할 생성, EC2 생성 및 구성, S3 버킷 만들기가 전부 끝났다.

     

    다음 글에선 가능하다면 CodeDeploy, 그리고 Github Actions의 구성을 끝내고 자동배포를 완성하고 싶다.

     

    일단 이 글은 끝!

    반응형
    댓글
    공지사항
    최근에 올라온 글
    최근에 달린 댓글
    Total
    Today
    Yesterday
    링크
    «   2024/06   »
    1
    2 3 4 5 6 7 8
    9 10 11 12 13 14 15
    16 17 18 19 20 21 22
    23 24 25 26 27 28 29
    30
    글 보관함