paint-brush
GitHub 및 AWS EC2를 사용하여 CI/CD 파이프라인을 만드는 방법~에 의해@wesleybaxterhuber
758 판독값
758 판독값

GitHub 및 AWS EC2를 사용하여 CI/CD 파이프라인을 만드는 방법

~에 의해 Wes Huber6m2024/04/30
Read on Terminal Reader

너무 오래; 읽다

이 기술을 사용하면 기본적으로 EC2 서버가 Github 리포지토리에 푸시된 변경 사항에 응답할 수 있습니다.
featured image - GitHub 및 AWS EC2를 사용하여 CI/CD 파이프라인을 만드는 방법
Wes Huber HackerNoon profile picture

안녕하세요 여러분, 오늘 저는 NodeJS/Express를 사용하여 Amazon EC2 서버에 빠른 REST API를 배포하는 제가 가장 좋아하는 방법 중 하나에 대한 튜토리얼을 작성하고 싶습니다. 이 기술을 사용하면 기본적으로 EC2 서버가 GitHub 리포지토리에 푸시된 변경 사항에 응답할 수 있습니다.

가장 먼저 해야 할 일, “Hello World”

NodeJS/Express 앱이 작동하도록 컴퓨터에 새 디렉터리를 만듭니다. 나는 나의 rekognition 부르고 있다


터미널을 열고 이 명령을 실행하여 package.json을 초기화합니다 npm init -y


express.js npm i express


기본 경로에 'hello world'를 사용하여 기본 Express 서버를 만듭니다.

 const express = require('express'); const app = express(); const port = 3000; app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(port, () => { console.log(`Example app listening at http://localhost:${port}`); });

'Hello World!'가 표시되는지 테스트해 보세요. http://localhost:3000/ 에서


잘했어요. 1단계가 완료되었습니다! 💪

다음으로 코드를 GitHub에 푸시해 보겠습니다.

디렉터리에서 Git 저장소를 초기화하고 첫 번째 커밋을 수행합니다.

 git init git add . git commit -m "First commit"


GitHub 계정에 원격 저장소 만들기

새 저장소를 원본으로 추가하고 분기를 푸시하세요.

 git remote add origin <REMOTE_REPOSITORY_URL> git push -u origin master


<REMOTE_REPOSITORY_URL> 방금 생성한 원격 저장소에 대한 링크로 바꿉니다.


'main' 대신 'master'를 기본 분기로 사용하려면 저장소 설정을 변경해야 할 수도 있습니다.

이 작업을 수행한 후 '기본' 분기를 삭제할 수 있습니다.


2단계: 완료! 가스로 요리해요 ⛽️

클라우드로 가자 — Ec2 서버 설정

EC2 인스턴스를 시작하는 단계는 다음과 같습니다.



  • EC2 대시보드로 이동하여 새 인스턴스를 시작합니다.

  • 적절한 AMI(Amazon Machine Image)를 선택합니다. Amazon Linux 2를 사용하고 있습니다.


  • 인스턴스 유형을 선택합니다(예: 무료 등급인 경우 t2.micro).


  • 필요에 따라 인스턴스 세부 정보를 구성하고, 스토리지를 추가하고, 태그를 추가합니다.


  • 필요한 포트(SSH 및 애플리케이션 포트의 경우 최소 TCP 포트 22, 웹 트래픽의 경우 3000)에서 인바운드 트래픽을 허용하도록 보안 그룹을 구성합니다.


  • 인스턴스를 검토하고 시작합니다. SSH 액세스에 사용되는 키 쌍을 저장했는지 확인하세요.


이제 터미널에서 SSH를 통해 서버에 로그인하는 것을 테스트해 보겠습니다.

ssh ec2-user@<YOUR_SERVER_IP> -i <YOUR_PRIVATE_KEY>.pem


거기에 있는 변수를 EC2 인스턴스에 대해 정의한 값으로 바꿉니다.

이 내용이 보이면 서버에 연결된 것입니다. 축하합니다! 👏

아직 끝나지 않았습니다. 이제 막 시작하는 단계입니다 😏

서버에 NodeJS를 설치해 보겠습니다.
sudo yum install -y nodejs


npm을 통해 서버에 pm2를 전역적으로 설치합니다.

sudo npm i -g pm2


서버에 git을 설치하고 자격 증명을 구성합니다.

sudo yum install git -y

 git config --global user.name "Your Name" git config --global user.email "[email protected]"


좋습니다. 이제 var/www/ 폴더가 아직 없으면 생성하겠습니다.

sudo mkdir -p /var/www


그런 다음 ec2-user에게 소유권을 추가합니다.

sudo chown -R ec2-user:ec2-user /var/www


/home 폴더가 아닌 서버 루트의 디렉터리로 이동하세요. people 👌 cd ~/var/www


이제 여기에서 git 저장소를 복제하겠습니다. git clone https://github.com/USERNAME/REPO_NAME.git YOUR_PROJECT_DIRECTORY

[USERNAME] [REPO_NAME] 및 [YOUR_PROJECT_DIRECTORY]를 원하는 값으로 바꾸세요.


다음으로 디렉토리를 저장소로 변경하여 cd YOUR_PROJECT_DIRECTORY pm2 설정을 위한 ecosystem.config.js 파일을 생성할 수 있도록 합니다.

nano ecosystem.config.js


다음과 같습니다.

 module.exports = { apps : [{ name: "my-app", // A name for your application script: "app.js", // The script file to launch the app instances: "max", // This can be set to the number of CPU cores to use, or "max" to use all available autorestart: true, // Automatically restart app if it crashes watch: false, // Enable/disable watching file changes for automatic restart max_memory_restart: '1G', // Optional: Restart app if it reaches a memory limit env: { NODE_ENV: "development", }, env_production: { NODE_ENV: "production", } }] };

콩을 시원하게 만드세요. 생성되고 저장되면 pm2로 앱을 시작해 보겠습니다.

pm2 start ecosystem.config.js


이제 'Hello World!'가 있는지 확인할 수 있습니다. 포트 3000의 서버에서:

서버가 다시 시작될 때 pm2가 자동으로 시작되도록 하려면 다음을 실행해 보겠습니다.

 pm2 save pm2 startup

서버가 실행 중인지 확인하려면 pm2 status 수행하십시오. 여기에서 pm2 의 문서를 읽을 수 있습니다.


여기까지 오셨다면 당신은 슈퍼스타입니다 ⭐️

GitHub 작업과 통합

이것이 우리 프로세스의 마지막 단계입니다. 마스터 브랜치에 변경 사항이 푸시될 때마다 서버를 업데이트하기 위해 Github 작업용 .yml 파일을 생성하겠습니다.

저장소에서 '작업' 탭으로 이동하여 새로운 사용자 정의 워크플로를 만듭니다. 내 nodejs.yml 호출하고 있습니다.


저장소를 업데이트하고 pm2를 다시 시작하기 위한 .yml 파일은 다음과 같습니다.

 name: Node.js CI/CD on Amazon Linux on: push: branches: [ master ] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install dependencies run: npm install - name: Deploy to AWS EC2 uses: appleboy/scp-action@master with: host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} source: "./" # This now correctly points to the current directory target: "/var/www/your_project_directory" - name: Restart PM2 application uses: appleboy/ssh-action@master with: host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} script: | cd /var/www/your_project_directory pm2 reload all # This command restarts your application

'your_project_directory'를 업데이트하세요.


마지막으로 이러한 환경 비밀을 추가해야 합니다. REMOTE_HOST 이것은 서버의 IP 주소입니다. REMOTE_USER 이는 Amazon Linux 2 AMI의 ec2-user 입니다. 그런 다음 .pem 파일의 내용을 SSH_PRIVATE_KEY 로 붙여넣습니다.


저장소 설정에서 이 모든 작업을 수행할 수 있습니다.

그게 다야! 이제 끝났네요 😁


'Hello World' 메시지를 변경하고 해당 변경 사항을 마스터 브랜치에 푸시하여 이 모든 것을 테스트할 수 있습니다. 그러면 http://your.ip.address:3000 에서 업데이트를 볼 수 있습니다.


설정하는 데는 약간의 프로세스가 있지만 개발할 때 REST API 서버에 변경 사항을 자동으로 배포하는 쉬운 CI/CD 파이프라인을 갖는 것은 정말 좋습니다. 이렇게 하면 변경 사항을 실시간으로 빠르게 배포하고 웹/모바일 애플리케이션의 프런트 엔드에서 확인할 수 있습니다.


이것이 도움이 되었는지 댓글로 알려주시고 읽어주셔서 감사합니다!!


평화를 누리세요,

— 웨스