2021/08/05

잡초김·2021년 8월 4일
0

스파르타코딩클럽

목록 보기
4/5

스파르타 5주차 끝.
5주차에는 aws에 서버를 올려서 배포하는 법을 배움.

대충씀.

aws는 ec2인스턴스를 사용한다.

그냥 ec2 콘솔 들어가서 인스턴스 시작 누르면 됨.

그리고 나서 git bash를 열어서 명령어를 입력해 준다.

ssh -i (키파일) ubuntu@ (인스턴스 퍼블릭 ip 주소)

이렇게 하고 git bash에 ubuntu@ip- (뭐시기) 이렇게 뜨면 원격으로 aws에다가 우리가 산 컴퓨터에 원격으로 연결된 것임.

그 컴퓨터에 파일을 올릴때 좋은거는 FileZila임. 이거는 파일을 전송해주는거. 원격으로 연결되어있기 때문에 SFTP프로토콜로 올리면 된다. 그냥 파일 가져다가 드래그해서 올리면 됨.

해서 올리고 서버 실행시키고 브라우저에 ip주소:(포트번호) 입력하면 바로 실행이 안된다.

왜냐면 aws자체에 방화벽이 있어서 그런거임. 뭐 5000포트로 돌리고 있어도 막 접속하면 안되고 우리가 포트를 열어줘야 한다.

어떻게하냐면 인스턴스 누르고 보안 > 보안그룹 > Edit inbound rules 에 들어가면 22는 미리 열려있는데 그래서 파일질라로 파일을 올릴 수 있었던 것임.

규칙 추가하고 포트범위 5000, 소스 Anywhere-IPv4 해주고,

포트범위 80으로 하나 더, 27017로 하나 더 규칙 추가한다.

이제 ip주소:(포트번호) 들어가질거임.

이제 몽고DB도 aws서버에 있으니까 그거를 로보3T로 데이터가 잘 들어갔나 봐야한다.

file > Create > connection 에서 이름 아무거나하고 Address aws서버 ip주소 입력하고

Authentication에서 User Name, Password입력하고 테스트하고 save하고 들어가면 된다.

아이디 비번이 있는건 딴놈들이 내 서버 db조작하고 그러면 안돼서 그런거임.

mongoDB 아이디 비번 설정 :

아마존 원격 연결된 상태에서 명령어 쓰면 됨.

mongo admin --eval 'db.createUser({user: "test", pwd: "test", roles:["root"]})

user, pwd 를 test말고 딴걸로 바꾸면 됨.

그리고 app.py에서도

client = MongoClient('localhost', 27017)

이부분을

client = MongoClient('mongodb://(아이디):(비밀번호)@localhost', 27017)

이렇게 바꿔줘야함.

test:test 여기는 user, pwd임.

이걸 왜하냐면 aws에있는 mongoDB에 아이디랑 비번 넣어줬으니까 pymongo에도 아이디랑 비번 넣어줘야 DB에 올바르게 접근할 수 있어서.

그다음에 aws에 app.py, static, templates를 올리고 실행시키면 됨. 그냥 venv이런거 다있는 파일 통째로 올려도 됨.

실행하면 잘된다.

근데 터미널을 꺼버리면 aws 서버도 꺼져버리는데 이러면 서버를 산 의미가 없지?

그래서 ssh접속 끊어도 서버가 계속 돌게 해줘야 한다.

음.. 그전에 url에서 포트번호가 나오면 좀 그렇지..? 그래서 포트번호를 떼주고싶다..

일단 5000포트는 플라스크서버로 사용하고 있으니까 5000번포트로 들어오면 플라스크 서버로 들어가는거고, 27017로 들어가면 몽고디비로 드가는거고 이런거임. 이거는 ec2에서 열어줬었다.

지금은 5000포트에서 웹 서비스가 실행되고 있는데 매번 :5000이라고 뒤에 붙여주면 귀찮으니까 포트번호를 없애고 싶다..

http프로토콜은 80포트가 기본이기 때문에 굳이 :80을 안붙여도 자동으로 연결ㅇ이 된다.

포트 번호를 입력하지 않고 자동으로 접속되기 위해 80포트로 오는 요청을 5000 포트로 전달하게 하는 포트포워딩을 해줄 것이다. 이건 리눅스에서 기본으로 제공해줌.

혹시 80으로 들어왔니? 아! 5000으로 가! 이런식임.

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000

이런 명령어 치면 되는데.. 80포트로 들오는 요청을 5000포트로 넘겨주는 명령어임.

초기셋팅할때 보통 해준다...

다시..터미널을 꺼버리면 서버도 꺼지는 문제를 해결해 볼까?

터미널에서

nohup python app.py &

nohup을 추가해서 이렇게 해주면 터미널 꺼도 서버가 잘 돌아간다.

서버를 끄려면

다시 원격 접속해서

ps -ef | grep 'app.py'

ps -ef : 모든 프로세스를 다 보여줌. | (그중) app.py가 포함된 친구만 솎아내라 이런 뜻.

이렇게 명령어 입력해주면

이런식으로 뜨는데

22142랑 22152를(숫자는 다 다름. 이거는 프로세스 번호임) 강제 종료 시켜주는 방법으로 끄는거다.

kill -9 22142
kill -9 22152

명령어 써주면 강종되는거임.

자.. 그다음 url이 저렇게 숫자로 되어있으면 이상하니까 도메인을 붙여야겠지?

도메인은 파는사이트 많은데 가비아를 이용할 것임. 지금 .shop도메인 500원 할인 이벤트라 개꿀이니까 그거 사서 쓰면 됨.

마이페이지 > DNS관리툴 > 설정 > 레코드 수정 > 레코드 추가 > 호스트에다가 @ 쓰고, IP주소는 내 aws IP주소 그대로 쓰면 됨. > 확인 저장

(이거는 url 주소가 ip와 연결되는 걸 전세계에 퍼뜨리는거.)

그러면 도메인 연결 끝.

정리
nohup python app.py & : 터미널 꺼도 aws에서 서버 돌아가도록

원격으로 aws에 있는 flask서버 종료 : 위에 ps -ef ~~, kill -9 ~~ 이 명령어로 끄면 됨.

aws ec2인스턴스 끄는법 : 그냥 콘솔가서 인스턴스 종료 하면 없어짐 중지 하면 aws서버 컴퓨터가 꺼지는거

profile
잡초처럼다시살아남는남자김경섭

0개의 댓글