Flask Framework 튜토리얼 플라스크 앱 배포 기능에 관련된 문서입니다. 자세한 사항은 여기를 참고하세요.
- Build and Install
- Configure the Secret Key
- Run with a Production Server
이번 장에서 우리는, 당신이 애플리케이션을 배포할 서버가 있다고 가정합니다. 배포 파일을 만들고 설치하는 방법에 대한 개요를 제공하지만, 사용할 서버, 소프ㅌ웨어에 대해서는 구체적으로 설명하지 않습니다. 이번 장에서 배우는 것들을 시도하기 위해서, 개발 컴퓨터에서 새 환경을 설정할 수 있지만, 실제 호스팅되는 애플리케이션에 사용해서는 안됩니다. 애플리케이션을 호스팅하는 다양한 방법들에 대해서는 다음을 참조하세요.
다른 곳에서 애플리케이션을 배포하고 싶을 때, 우리는 배포 파일을 작성해야만 합니다. 현재 파이썬 배포의 표준 방식은 "wheel"을 이용하는 것입니다. (확장자는 .whl입니다.) 배포하기 위해서는 현재 당신의 서버에 wheel 라이브러리가 있는지 확인하여야 합니다. 없다면, 다음 명령어를 통해서 설치해주세요.
$ pip install wheel파이썬으로 "setup.py"를 실행하는 것으로 빌드 관련 명령을 실행하는 커맨드라인 도구가 제공할 수 있습니다. "bdist_wheel" 명령은 "wheel" 배포 파일을 만들어줍니다. 터미널에 다음을 입력해주세요.
$ python setup.py bdist_wheel당신은 "dist" 디렉토리에서, "flaskr-1,0.0-py3-none-any.whl"이라는 파일을 찾을 수 있을 겁니다. 파일 이름은 프로젝트의 이름, 버전, 설치 해야하는 파일들에 대한 몇 개의 태그들로 구성되어 있습니다. 이 파일을 다른 서버에 복사하고, 새 가상환경을 설정한 다음, pip로 파일을 설치해주세요. 터미널에 다음을 입력해주세요.
# 다른 서버
$ (venv) pip install flaskr-1.0.0-py3-none-any.whlpip는 해당 프로젝트의 의존성을 모두 설치해줄 것입니다. 다른 머신에서 실행했으므로, 인스턴스 폴더에 데이터베이스를 작성하여면, 다시 init-db 명령어를 실행시켜야합니다. 터미널에 다음을 입력해주세요.
$ export FLASK_APP=flaskr
$ flask init-db플라스크가 설치되어 있음을 감지하면, 인스턴스 폴더를 위해 다른 디렉토리를 사용합니다. 당신은 대신에 "venv/var/flaskr-instance"을 찾을 수 있습니다.
튜토리얼 시작 부분에서, 우리는 "SECRET_KEY"에 디폴트 값을 주었습니다. 이것을 상용 환경에서 사용하려면, 몇 개의 랜덤 바이트로 변경되어야만 합니다. 그렇지 않으면, 일부 공격자들은 공개된 "dev"키를 사용하여 세션, 쿠키 혹은 비밀 키를 사용하는 모든 것을 수정할 수 있습니다.
다음 명령을 사용하여 임의의 비밀 키를 출력할 수 있습니다.
$ python -c 'import os; print(os.urandom(16))'
b'_5#y2L"F4Q8z\n\xec]/'"instance-folder" 안에 "config.py"를 만들어주세요. 만약 존재한다면, 애플리케이션 팩토리가 이를 참조합니다. 위 명령어를 생성된 것을 SECRET_KEY의 value로 만들어주세요.
venv/var/flaskr-instance/config.py
SECRET_KEY = b'_5#y2L"F4Q8z\n\xec]/'SECRET_KEY가 현재 flaskr에 필요한 유일한 구성이지만 여기에서 다른 필요한 구성을 설정할 수 있습니다. (역자 주: 예를 들어 DB 경로 같은...)
개발 환경이 아닌 상용 환경에서, "flask run" 명령어로 실행하는 개발 서버를 사용하면 안됩니다. 개발 서버는 개발자의 편의를 위해 "Werkzeug"에서 제공되나, 효율적이거나 안정적인, 안전하게 설계되지는 않았습니다. 따라서, 우리는 상용 환경에서는 WSGI 서버를 사용할 것입니다. 이 튜토리얼에서는 "Waitress"라는 서버를 사용할 것입니다. 다음 명령어를 입력해주세요.
$ (venv) pip install waitress우리가 실행할 애플리케이션을 Waitress에게 알려주어야 하지만, "flask" 명령어와 같이 "FLASK_APP" 같은 환경 변수를 사용하지는 않습니다. 애플리케이션 팩토리를 가져와서, 호출한 후 애플리케이션 오브젝트를 호출해야 합니다. 터미널에 다음을 입력해주세요.
$ (venv) waitress-serve --call 'flaskr:create_app'
Serving on http://0.0.0.0:8080Deployment Options를 보면, 애플리케이션을 호스팅하는 여러 가지 방법들이 있습니다. "Waitress"는 하나의 예일 뿐이며, 튜토리얼에서 사용된 이유는 Windows, Linux 환경에서 잘 지원되기 때문입니다. 세상에는 애플리케이션을 호스팅하기 위한 WSGI 서버 및 배포 옵션이 더 많이 존재합니다.
Keep Developing!에서 계속됩니다.