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
'기록 > CI&CD' 카테고리의 다른 글
[Jenkins] gradle 설정 (0) | 2022.10.06 |
---|---|
[NLP] Docker로 Konlpy 사용하는 Flask 배포 (0) | 2022.09.23 |
[AWS] 같은 브랜치에 있는 프론트엔드, 백엔드 자동배포하기 (6) Jenkinsfile, vue & springboot Dockerfile 작성 (0) | 2022.08.18 |
[AWS] 같은 브랜치에 있는 프론트엔드, 백엔드 자동배포하기 (5) jenkins 컨테이너 내부에 docker 설치 및 Webhook 설정 (0) | 2022.08.17 |
[AWS] 같은 브랜치에 있는 프론트엔드, 백엔드 자동배포하기 (4) Jenkins 설치 및 설정 (0) | 2022.08.13 |
댓글