
EC2에 Nginx 설정
/etc/nginx/sites-available 설정법
프록시 설정: 80 → 3000번 포트(예시)
참고사항
오늘 실습 전체의 흐름은 참고 첫번째 링크에 다 나와있다!
원래 nginx랑 certbot으로 https 적용을 한 포스트 안에 다하려고 했는데
아차차! nginx 설정만 해도 오류가 많아 나누게 되었다
실습을 진행하며 생긴 오류 순서대로 번호를 부여했고, 내용이 다 이어져있어 뒤에 내용까지 보면 이해가 될거라 생각한다.
이번 포스트는 약 2시간 넘게 오류만 고친 사람의 기록이다
(정신 찵이고 포스트 찵여.)
이번 실습은 GPT를 쓰지 않고 진행했다.(그래서 마지막 부분이 안풀리고 있다)
sudo apt-get install nginx를 시도하던 중 발생한 오류
구글링 → process 884에 lock이 걸려있다. 이걸 지우면 해결. → ps -ef로 확인 →

?
884번 프로세스는 없었음. 차분히 다시 sudo apt-get install nginx를 입력하니 다른 오류가 떴다.
공간이 부족하다!
구글링 → df -h로 상태를 확인해보니 /dev/root의 용량을 100% 전부 다 썼음을 확인 할 수 있었다.

EC2 인스턴스 볼륨의 용량 부족문제 임을 확인 하고 볼륨 수정하여 8 GiB → 32GiB로 늘려줬다. (내 요금 ^_ㅜ)
볼륨만 수정했다고 끝이 아니다. 사용하던 파티션을 늘린 용량만큼 확장 해줘야한다. lsblk로 디스크 상태를 확인해보면,

밑에 있는 xvda1이 변경해줘야할 파티션이다. → xvda1 파티션을 확장해보자
growpart라는 파티션을 확장해 주는 명령어를 사용한다.
#sudo growpart /dev/파티션명 파티션번호
sudo growpart /dev/xvda 1
얘도 뭔가 저장공간의 문제.
블록 디바이스에 남은 공간 없음 오류를 방지하려면 임시 파일 시스템 tmpfs를 /tmp 탑재 지점에 탑재합니다. 그러면 /tmp에 탑재된 10M tmpfs가 생성됩니다.
sudo mount -o size=10M,rw,nodev,nosuid -t tmpfs tmpfs /tmp
이렇게 입력 후 다시 sudo growpart /dev/xvda1 해주면 되는 줄 알았다.
sudo sfdisk --list /dev/xvda로 파티션 테이블을 확인하려 했는데 발생한 오류.
root로 전환 후 parted라는 명령어를 사용하여 GPT 정보를 수정하여 오류를 해결했다.

이렇게 입력해준 후 다시 fdisk를 해보면 에러메시지가 사라져있다.
(중간에 도커 이미지/컨테이너 크기땜에 부족한 줄 알고 지우려다가 도커 데몬 이 실행이 안되서 헤맨건 안비밀.. 여전히 모르겠다)
→ 이제 파일 시스템에 변경된 파티션 크기를 적용하자
sudo resize2fs /dev/xvda1 입력 후 다시 df -h로 확인해보면

짠
사용공간이 늘어났음을 확인했다!
이제 다시 nginx 설치로 돌아가서,
sudo apt-get install nginx 실행
근데 실행 중 failed가 자꾸 뜨고 안되길래 apt-get update해줬는데도 계속 오류가 떴다.
DNS 서버 확인 후 수정하라길래 그대로 했다.
vi /etc/resolv.conf에 nameserver 8.8.8.8을 추가하여 저장.
다시 apt-get update시도하니 업데이트가 잘 됬다.
뭔가를 알 수 없다..?
/etc/hostname과 /etc/hosts 두 파일의 내용이 달라서 그렇다고 한다.
나는 /etc/hostname에 있는 ip주소를 /etc/hosts에 그대로 넣어줬다.
여기까지하면 그제야 sudo apt-get install nginx을 할 수 있다.
service nginx start로 nginx 실행 후 http://localhost:80으로 접속(http가 80번 포트를 의미하기에 생략 가능)
/etc/nginx안에서 주요하게 봐야할 것
- site-available/: nginx에서 관리되는 호스트 정보
- site-enabled/: site-abailable/에서 만든 사이트를 site-enabled/에 추가해야 활성화 됨. site-available/에 추가한 사이트를 site-enabled/에 심볼릭 링크하여 사이트를 활성화 할 수 있습니다.
nginx 설치시 기본으로 설치된 설정 파일 제거 → 1. 서버 생성(참고 첫번째 링크에 있음) → 2. site-available 사이트 추가
vim /etc/nginx/site-available/server1에 아래 코드 입력 후 저장
server {
listen 80 ;
listen [::]:80;
root /home/server1;
server_name server1 www.server1.com;
access_log /var/log/nginx/server1.access.log;
error_log /var/log/nginx/server1.error.log;
location /server1/ {
proxy_pass http://127.0.0.1:3000/;
}
}
마지막으로 site-available에 추가한 사이트를 site-enabled에 심볼릭 링크로 연결
ln -s /etc/nginx/sites-available/server1 /etc/nginx/sites-enabled/server1
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
nginx -s reload하면 curl http://localhost:3000시 응답이 잘 오는 것 처럼 웹사이트에도 응답이 떠야하는데 난 계속 404 NOT FOUND만 떴다.
shell 에서 nvm을 실행시킬 때 필요한 환경변수가 제대로 세팅이 되어있지 않아서 생긴 문제라고 한다.
자신이 쓰는 쉘에 따라 방법이 조금 다르다. 난 bash를 쓴다.
bash 인 경우: vi ~/.bashrc
zsh 인 경우: vi ~/.zshrc
키보드 i 를 누르고 아래 코드를 입력하고 ESC 키를 누르고 :wq! 입력
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
그리고 터미널을 재로그인하거나, source 명령어로 스크립트 실행
source ~/.bashrc or source ~/.zshrc
pm2 log 찍으면 계속 나오는 에러메시지

뭘 하지도 않았는데 reload가 저렇게 많이 된다고? (당황)
찾아보니 오래된 버전의 라이브러리가 있다면 이럴 수도 있대서 지우고 다시 설치했다.
pm2 kill
rm -rf node_modules
npm i
authbind --deep pm2 start app.js
localhost/server1로 접속한 웹사이트에 응답이 뜨지 않고 계속 404 NOT FOUND로 뜬다. 아무리 검색해도 안나와서 이건 GPT한테 후에 물어보고 고친 후 다시 포스트 업로드 해야겠음.
여전히 도커 데몬이 실행되지 않는다... 으악!
그리고 pm2 상태가 계속 바뀐다. 건들지 않아도 어쩔땐 online이다가 어쩔땐 errored였다가..
쓰다보니 /etc/nginx/sites-available 보단 그냥 오류 나열에 가까워지게 된거같다.. 정리해서 쓰는게 너무 어렵다 일단 쓰고 봐야한다.
참고
- [nginx] nginx 시작하기 1/3 - 기초편
- [ubuntu] Could not get lock /var/lib/apt/lists/lock. Error
- EC2 'No space left on device' 파일 시스템에 남은 공간 없을 때 EBS 볼륨 크기 늘리기
- 리눅스 디스크 에러 복구
- EC2 용량 늘리기
- [EC2][Server][Docker] EC2 용량 꽉 찼을 때 해결 / No space left on device 해결
- [Ubuntu ] Some index files failed to download. 에러 해결
- unable to resolve host 에러 해결 방법
- bash: nvm: command not found 에러 해결
- (에러핸들링) (AWS EC2) had too many unstable restarts
- [ERROR] command not found: nvm
- Node.js PM2 간단 정리