1. key 문제
EC2 인스턴스 생성 후 pem키를 받아쓰는데 .pem키를 아무리 뭐 어쩌고.. 해봐도 auth failed 메세지가 떴다. 뭐 key is too opened이라길래 설마설마 했는데 EC2 보안 가이드에 나온대로 chmod 400 "<keyfilename>"를 하니 말끔히 해결됐다.
"key is too opened" 어쩌구 오류가 뜨면 key가 있는 디렉토리에 가서 아래 커맨드를 입력하자. 400은 rwx에 관한 권한 설정이다. 110000000 인데.... 이건 access control 관련 공부를 했으면 알 내용이니 패스.
$ chmod 400 <key_file_name>.pem
+) 인스턴스 생성하고 RSA 키페어를 만들 때 mac에선 키 파일이 기본적으로 .cer 확장자로 받아지게 된다. cer -> pem 바꾸기 커맨드를 구글링해서 확장자를 바꿔보려고 했는데 자꾸 에러가 떴다. 에러메세지를 뜯어보고 검색한 결과 원래 pem 파일을 pem으로 바꿔서 생기는 오류라고 한다. 그냥 확장자 .cer을 .pem으로 간단히 rename한 뒤 접속 시도를 하니 말끔히 해결됐다.
2. mongoDB 연결 문제
mongo cluster application 어쩌구로 connection url 생성해서 mongoose connect를 하고.. 인스턴스를 만든 후... 연결 탭에서 제공한 ssh 커맨드로 서버에 접속한다. 아주 퓨어한 상태의 서버에 nodejs를 실행시키기 위해 아래 커맨드들을 쫙 입력해서 기본적인 모듈을 다운받고 서버를 실행시켜본다.
$ sudo apt-get update
$ sudo apt-get install nodejs
$ sudo apt-get install npm
$ sudo apt-get install git
$ npm install
$ npm run start
설정한 Port에서 서버 연결은 잘 됐는데... DB연결이 삑났다.
사용한 mongoDB의 network access 탭의 IP address에 EC2 인스턴스 IP주소를 추가해줘야했다. 인스턴스 세부 정보에서 IP주소를 확인할 수 있으니 주소를 mongo cluster security의 network access란에 추가해주도록 하자.
3. port 문제
local에서 개발할 땐 port번호를 3000번으로 두고 했다. 사실 127.0.0.1에선 포트를 뭐로 두고 해도 상관없는데 이걸 서버로 올리면 port번호가 문제가 된다.
브라우저로 특정 ip주소에 접근할 때는 http, https(보안연결)를 사용한다. http는 80번, https는 443번 포트를 사용한다. 처음 ec2 인스턴스를 생성할 적에 인바운드 규칙에서 허용한 port 번호는 22번밖에 없다. 이건 ssh로 서버에 접속 시 사용했던 포트번호이다.
인바운드 규칙에 포트 범위에 내가 설정한 포트(나의 경우엔 3000), http를 위한 80, https를 위한 443을 추가해줬다.
그 뒤 주소창에 http://<DNS address>:<port번호> 를 입력하면! 정상적으로 접속이 가능하다..
근데 지금은 https 프로토콜로 접속할 수 없다. https의 s는 Security의 약자인데, 아직 인증서가 없는 상태이기 때문에.. 만약 https 헤더로 접근했다면 에러가 날 것이다. 나중에 도메인 이름을 정한 뒤에 certification을 발행해야 하는데.. 아직 그정도는 아니므로 패스.
4. port redirect
http는 ip address에 접근시 기본적으로 80번 포트를 이용하는데, 우리의 Express 서버의 포트번호는 3000번이다. 사용자가 배포한 서버에 접속할 적에 도메인 주소 뒤에 명시적으로 :3000을 붙이지 않으면 express app이 돌고있는 포트로 가지 않는다. 포트번호를 리다이렉트 하는 과정이 필요하다.
$ sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
ssh 서버 환경에서 위 커맨드를 입력해서 80번으로 접속했을 때 3000번으로 redirec할 수 있도록 하자. 참고로 포트 리다이렉트 목록을 확인하는 커맨드는 다음과 같고,
$ sudo iptables -t nat -L --line-numbers
확인한 목록에서 지우고싶은 리다이렉션 페어가 있다면 아래 명령어를 입력한다.
$ sudo iptables -t nat -D PREROUTING [number]
여기서 [number]은 리다이렉션 목록의 num 항목이다.