해결된 질문
작성
·
93
0
강사님 안녕하세요. nest를 완강하고 개인적으로 Node로 만들어보고 있습니다. 근데
Github Actions 까지 무사히 잘 완료가 되었는데요.
배포가 제대로 되어있는지 확인하려고 하니까 안되고 있습니다.
이렇게 서버가 살아있고 저는 3000번 포트를 사용해서 https://43.202.202.143:3000/ 이라고 작성했는데 접속이 안되더라고요.
제가 Gpt랑 나름 찾아봐서 작성해본 코드는 아래와 같습니다.
=============================
name: Deploy To EC2
on:
push:
branches:
- dev
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Github Repository 파일 불러오기
uses: actions/checkout@v4
- name: Node 설치
uses: actions/setup-node@v4
with:
node-version: "20"
- name: 의존성(라이브러리) 설치
run: yarn install --frozen-lockfile
- name: .env 파일 만들기
run: |
echo '${{secrets.ENV}}' > .env
# - name: 테스트 코드 실행
# run: npm run test
# - name: 빌드
# run: npm run build
- name: 압축하기
run: tar -czvf project.tar.gz .env package.json yarn.lock src
- name: SCP로 EC2에 빌드된 파일 전송하기
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
source: project.tar.gz
target: /home/ubuntu/Solo-Resume-Project/tobe
- name: SSH로 EC2에 접속하기
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.EC2_HOST }} # EC2의 퍼블릭 IPv4 주소 = 고정 주소를 말함. 연결 된 상태의 43.202.xxx.xxx <- 이런거
username: ${{ secrets.EC2_USERNAME }} # EC2 접속 username = 대부분 우분투
key: ${{ secrets.EC2_PRIVATE_KEY }} # EC2의 key-pair 파일의 내부 텍스트
script_stop: true
script: |
rm -rf /home/ubuntu/Solo-Resume-Project/current
mkdir /home/ubuntu/Solo-Resume-Project/current
mv /home/ubuntu/Solo-Resume-Project/tobe/project.tar.gz /home/ubuntu/Solo-Resume-Project/current/project.tar.gz
cd /home/ubuntu/Solo-Resume-Project/current
tar -xvf project.tar.gz
yarn install
pm2 kill
pm2 start src/app.js --name "backend-server"
=============================
세팅도 전부 다했고요.
근데 pm2 logs를 작성하면 아래와 같이 나옵니다.
제가 env에 서버포트 번호를 넣어놓고 상수값을로 지정한 후에 따로 빼서 사용하는데 그것 때문인가요?
기존의 vs 코드에서는 잘 작동이 됩니다.
처음 혼자서 node로 작성하는거다보니 너무 질문이 많아서 죄송한데 답을 알려주시옵소서!!!
답변 2
0
안녕하세요 사무엘님! 좋은 시도를 하고 계시네요ㅎㅎㅎ
우선 CI/CD의 과정을 셋팅하기 전에
https://43.202.202.143:3000/ 으로 접속했을 때 접속이 가능하게 만드는 게
우선일 것 같습니다!
여기로 접속이 안 되는 이유는 밑에 댓글을 달아주신 값을 확인해보니
보안그룹의 설정 때문에 적용이 안 됐던 것 같습니다.
보안그룹으로 3000번 포트에 모든 IPv4에 대해 허용하게끔 설정을 추가해보신 뒤에
접속을 시도해보시기 바랍니다!
이 과정을 먼저 해결하신 뒤에 접속이 정상적으로 되는 걸 확인하시면
그 다음에 다시 CI/CD 과정을 이어서 진행해보시기 바랍니다!
이 과정 중에 CI/CD 과정이 다시 막힌다면 또 질문 남겨주세요~~
기존에 서버가 잘 열리는지 express 서버 배포 강의를 참고해서 vi .env를 통해서 .env 내용을 추가해서 우선 서버가 연결되는지 확인하였습니다. 그 후에 추가로 test를 하나씩 추가하면서 오류를 GPT에게 물어보면서 제 파일들과 맞추니 서버가 잘 연결 되었습니다 ^^
혹시나 다른 분들이 제 Q&A를 보실까봐 제 CI/CD 파일 로그를 남겨놓습니다.
name: Deploy To EC2
on:
push:
branches:
- dev
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Github Repository 파일 불러오기
uses: actions/checkout@v4
- name: Node 설치
uses: actions/setup-node@v4
with:
node-version: "20"
- name: 의존성(라이브러리) 설치...
run: yarn install --frozen-lockfile
- name: .env 파일 만들기
run: |
echo '${{secrets.ENV}}' > .env
# - name: 테스트 코드 실행
# run: npm run test
# - name: 빌드
# run: npm run build
- name: 압축하기
run: tar -czvf project.tar.gz .env package.json yarn.lock src prisma
- name: SCP로 EC2에 빌드된 파일 전송하기
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
source: project.tar.gz
target: /home/ubuntu/Solo-Resume-Project/tobe
- name: SSH로 EC2에 접속하기
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.EC2_HOST }} # EC2의 퍼블릭 IPv4 주소 = 고정 주소를 말함. 연결 된 상태의 43.202.xxx.xxx <- 이런거
username: ${{ secrets.EC2_USERNAME }} # EC2 접속 username = 대부분 우분투
key: ${{ secrets.EC2_PRIVATE_KEY }} # EC2의 key-pair 파일의 내부 텍스트
script_stop: true
script: |
rm -rf /home/ubuntu/Solo-Resume-Project/current
mkdir /home/ubuntu/Solo-Resume-Project/current
mv /home/ubuntu/Solo-Resume-Project/tobe/project.tar.gz /home/ubuntu/Solo-Resume-Project/current/project.tar.gz
cd /home/ubuntu/Solo-Resume-Project/current
tar -xvf project.tar.gz
yarn install --frozen-lockfile
yarn prisma generate
pm2 kill
pm2 start src/app.js --name "backend-server"
0
안녕하세요, 인프런 AI 인턴입니다. 송사무엘님.
Node.js 서버와 관련된 문제를 해결하는 데 몇 가지 단계를 고려해볼 수 있습니다.
포트와 환경 변수 확인: pm2 로그에서 “undefined번 포트로 연결 되었습니다.“라는 메시지가 나온 것을 보면, 서버가 제대로 포트를 인식하지 못하고 있습니다. 이는 대개 process.env
에서 직접 값을 가져오지 못하는 경우 발생합니다. .env
파일에서 SERVER_PORT
변수가 제대로 설정되었는지 확인해 보시고, GitHub Actions에서 .env
파일을 올바르게 만들어지고 있는지 확인해야 합니다.
환경 변수 로드:
dotenv
패키지를 사용한다면, require('dotenv').config();
가 가장 먼저, 코드의 최상단에 위치되어야 합니다..env 파일 만들기
단계에서 값이 제대로 입력되었는지, process.env
로 읽어들일 수 있는지 검토해 보세요.포트 개방 확인: AWS 보안 그룹 설정에서 3000번 포트가 인바운드 규칙에 따라 열려 있는지 확인해 주세요. EC2 인스턴스에서는 이 설정이 기본적으로 닫혀 있을 수 있습니다.
서버 설정: app.listen
부분에서 SERVER_PORT
변수를 사용하고 있는데, console.log()
로 ENV 값을 제대로 가져오고 있는지 디버깅해 보면 기본적인 설정 오류를 발견할 수 있습니다.
PM2 구성 확인: PM2를 사용할 때 환경 변수가 제대로 처리되지 않았다면 pm2 start
명령을 일부 수정하여 --watch --env production
와 같은 옵션들을 추가해 보는 것도 방법일 수 있습니다.
또한, 비슷한 문제의 해결법을 제시한 기존 질문도 확인해 보실 수 있습니다.
- 배포는 성공하지만, pm2 list를 확인해보면 에러가 발생되어 있습니다.: 배포 후 PM2 등이 관련된 문제를 해결한 질문과 답변입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
포트와 환경 변수 확인 같은 경우는 pm2 logs 보니까 DB 연결이 제대로 되는 거 보니까 잘 연결 된 거 같습니다.
환경 변수 로드:같은 경우 vs 코드 터미널에서 제대로 입력되어 나오는 것 보니까 잘 연결된 것 같습니다.
포트 개방 확인 은 아래와 같은데 여기가 문제인가요?
번도 vs 코드에서 잘 나오고 있어서 문제 없는 것 같습니다.
혹시 강의 6-1. 실습1에 나오는 아래의 사진과 같이 포트를 하나 더 열어야하는건가요?!
아래와 같이 포트를 하나 더 인바운드 규칙에 추가하고 ec2 서버를 재부팅하고 다시 push하여 연결했는데도 역시나 접속이 안되고 있습니다.