2021-03-29 09:32:51

오늘은 구름 IDE의 항상 켜두기 기능을 이용해서 flask 웹 서버를 구동하는 방법에 대해서 살펴보도록 하겠습니다. 참고로 저는 이 방식을 이용해서 다음과 같은 웹 사이트를 구동시켰습니다. 이미지를 업로드하면 이미지에서 색을 빼줘서 색칠 공부 도안을 만들어주는 웹 사이트입니다. https://coloring.dev-sim.com/ 

 

항상 켜두기 컨테이너 생성하기

자! 그럼 이제 시작해보겠습니다. 먼저 구름 IDE에서 컨테이너를 하나 생성해주세요. 소프트웨어 스택에서 Flask를 선택해주세요.  

 

 

컨테이너 생성을 마치신 분들은 컨테이너 설정 버튼을 클릭한 후에 컨테이너 항상 켜두기를 해줍니다. 이 항상 켜두기 기능은 예전에는 유료였는데 지금은 무료 사용자도 한 개의 컨테이너에 한해서 사용할 수 있습니다.  

 

 

 

컨테이너 설정 화면에서 아래 좀 더 내려가시면 URL과 포트번호가 나옵니다. 우리의 웹 사이트는 이 주소로 접근이 가능합니다. 

 

 

이제 컨테이너에 들어가신 후에 웹 사이트를 만듭니다. 우리가 원하는 것은 이 구름 IDE의 컨테이너를 닫더라도 웹 서버가 계속 작동하게 만드는 것입니다. 

 

웹 서버 백그라운드에서 실행되게 하기

먼저 vim my_shellscript.sh로 my_shellscript.sh라는 파일을 연 후에 다음과 같은 내용을 담습니다. 저는 main.py를 FLASK_APP 파일로 설정했고, 그것을 실행해야 플라스크 웹 서버가 구동됩니다.  

 

#!/bin/bash

export FLASK_APP=main.py
python3 main.py

 

참고로 제가 코딩한 main.py의 끝부분은 다음과 같이 생겼습니다. 

 

 

그 다음에 nohup을 이용해서 다음과 같은 명령을 터미널에 주면 백그라운드에서 my_shellscript.sh가 실행됩니다.

 

sudo nohup ./my_shellscript.sh > nohup_script.out &

 

즉, 터미널을 꺼도, 컨테이너를 닫아도 우리가 만든 웹 사이트가 구동됩니다. 한 번 컨테이너를 닫아보시고 웹 페이지를 열어보세요. 잘 열리시죠? 참고로 nohup은 no hang up의 약자로, "끊지마"의 뜻을 지닙니다. 

 

또한 nohup_script.out에 로그가 남습니다. 

 

 

백그라운드에서 실행한 프로그램을 종료하고자 할 때는 먼저 프로세스의 아이디를 알아내야 합니다. 

 

ps ux

 

위와 같은 명령을 주면 두번째 열에 PID, 즉 프로세스 아이디가 출력됩니다. 

 

 

만약 PID가 5392인 프로세스를 종료시키려면, 다음과 같은 명령을 터미널에 주면 됩니다. 

 

kill -9 5392

 

그러면 더 이상 웹 사이트가 작동하지 않습니다. 

 

관련 글

- [flask] flask로 웹 어플리케이션 만들기 (코로나 19 오늘 확진자 수 알림)  

 

 

(이 글은 마지막으로 2022-11-4에 수정되었습니다)