안녕하세요 여러분, 오늘 저는 NodeJS/Express를 사용하여 Amazon EC2 서버에 빠른 REST API를 배포하는 제가 가장 좋아하는 방법 중 하나에 대한 튜토리얼을 작성하고 싶습니다. 이 기술을 사용하면 기본적으로 EC2 서버가 GitHub 리포지토리에 푸시된 변경 사항에 응답할 수 있습니다.
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단계가 완료되었습니다! 💪
디렉터리에서 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 대시보드로 이동하여 새 인스턴스를 시작합니다.
적절한 AMI(Amazon Machine Image)를 선택합니다. Amazon Linux 2를 사용하고 있습니다.
이제 터미널에서 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 작업용 .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 파이프라인을 갖는 것은 정말 좋습니다. 이렇게 하면 변경 사항을 실시간으로 빠르게 배포하고 웹/모바일 애플리케이션의 프런트 엔드에서 확인할 수 있습니다.
이것이 도움이 되었는지 댓글로 알려주시고 읽어주셔서 감사합니다!!
평화를 누리세요,
— 웨스