[AWS Error] CodeDeploy 자동 배포 후 에러(Port 3000 is already in use) 처리 (1)

주형(Jureamer)·2022년 6월 6일
0

개요


CodeDeploy를 통한 자동 배포 후 로그를 확인하는데
3000 Port가 이미 사용 중이라는 "Port 3000 is already in use" 에러로 도배가 되고 있었다.


"Port 3000 is already in use" Error 처리


아차차 싶어서 원인을 찾았더니 계정 문제였다.
평소에 계정을 분리하는 정책을 내부적으로 갖고 있어서 root가 아닌 별도의 계정으로 서버를 올린다.
하지만 자동배포를 통해서는 root 계정을 통해 올리게 되면서
기존 서버가 올라간 게 제대로 지워지지 않아서 난 error였다.

ps -ef | grep "서버가 실행되는 파일" 명령어를 통해 서버가 어떤 계정으로 띄워져있는 지 확인 해볼 수 있다.

$ ps -ef | grep www

확인 해보니 root와 다른 계정과 충돌하고 있었다.

kill -9 "pid"명령어로 기존 서버들을 다 지우고 다시 올렸더니 일단 문제는 해결되었다.
하지만 근본적인 원인인 root로 서버를 실행시키는 문제를 해결하지 못했다.
그래서 다른 계정으로 실행시키는 방법을 찾게 되었다.

codeDeploy 실행 시 스크립트 실행을 위해 scripts 폴더 내에 initialize, start, stop 스크립트를 갖고 있다.

# initialize.sh
#!/bin/bash
cd /home/ubuntu
npm install
npm install pm2@latest -g
sudo apt-get update
sudo apt-get install authbind
sudo touch /etc/authbind/byport/80
sudo chown bvoat /etc/authbind/byport/80
sudo chmod 755 /etc/authbind/byport/80
# stop.sh
#!/bin/bash
cd /home/ubuntu
pm2 stop www 2> /dev/null || true
pm2 delete www 2> /dev/null || true
# start.sh
#!/bin/bash
cd /home/ubuntu
authbind --deep npm start

이 중 start.sh에 authbind --deep으로 npm start 실행 시키고 있는 부분이
제대로 작동하고 있지 않는 듯 했다. (authbind에 대한 부분은 따로 공부해서 포스팅 할 예정이다.)

이 부분을 원하는 계정으로 실행 시키기 위해서 su - "계정명" -c "명령어1;명령어2" 양식으로 변경 해주었다.

# start.sh
#!/bin/bash
su - "계정명" -c "cd /home/ubuntu; npm start"

이후 원하는 계정으로 잘 작동되는 것을 확인할 수 있었다!

하지만 또 다른 문제가 생겼는데,, 다음 포스팅에서 다루도록 하겠다.


참고


profile
작게라도 꾸준히 성장하는게 목표입니다.

0개의 댓글