기록/CI&CD

[Flask] 플라스크 배포(feat.Docker)

5월._. 2022. 10. 12.
728x90

1. main.py

main.py의 main함수의 app.run부분을 이렇게 설정한다. 

main에서 app.run()을 써서 아무 설정 없이 그대로 돌아가도록 하면 flask에 기본적으로 내장돼있는 웹서버를 쓰게된다. 로컬에서는 정말 간편하지만 이걸 서버로 배포할 때는 문제가 생긴다. 어떻게 해도 외부접속이 안되기 때문이다. 따라서 app.run() 말고(=로컬호스트127.0.0.1에서만 돌아간다) app.run(host='0.0.0.0')으로 바꿔야 한다.

if __name__ == "__main__":
    app.run(debug=False, host='0.0.0.0', port=5000)

 

2. waitress_server.py 생성

여기서 main은 위에서 내가 만든 flask 파일이다. main 파일을 waitress_server.py에서 import한다.

from waitress import serve
import main
serve(main.app, host='0.0.0.0', port=5000)

 

3. requirements.txt

requirements 만드는 방법은 아래와 같다.

pip freeze > requirements.txt
wheel == 0.37.1
waitress == 2.0.0

 

4. dockerfile

requirements.txt에 있는 pip install 목록을 전부 다운받은 후 waitress_server.py을 실행시킨 결과를 5000포트로 노출시킨다는 의미이다.

FROM python:3.7.10
WORKDIR /usr/src/app

COPY . .

RUN pip install --upgrade pip
RUN pip install -r requirements.txt

EXPOSE 5000
CMD ["python", "./waitress_server.py"]

 

5. Jenkins

jenkins에서 freestyle project를 선택한 후 Build Steps > Execute shell을 고르고 다음을 작성했다.

be라는 이름의 컨테이너가 있다면 중지하고 없앤다.backend_flask라는 이름으로 flask 폴더 아래의 dockerfile을 이용해서 이미지를 생성한다.내부포트 5000을 외부포트 5000으로 노출시켜서 backend_flask이미지를 be라는 이름의 컨테이너로 실행시킨다.

docker stop be || true && docker rm be || true
docker build -t backend_flask ./flask
docker run -d --name be -p 5000:5000 backend_flask

 

댓글