본문 바로가기
Coding

Flask/Uwsgi/Supervisor 환경변수 문제 해결방법

by Hide­ 2019. 1. 4.
반응형

목적

Flask를 배포하기위해 Uwsgi와 Supervisor를 통해 엮어줬을 때 발생하는 환경변수 문제 해결방법에 대해 기술한다.

문제점

Flask를 배포하기 위해선 Uwsgi를 사용해야한다.

또한 오류 발생 시 재시작을 해주기 위해 Supervisor를 사용한다.

일반적으로 도커를 사용하여 배포했을때 여러가지 변수들을 시스템 환경변수에 선언해놓고 해당 변수를 참조하여 사용하는데

Uwsgi와 Supervisor를 통해 엮어주면 로컬에 설정해뒀던 환경변수를 읽지 못하는 문제가 발생한다.

정확한 원인은 모르지만 로컬 쉘과 Supervisor를 사용하는 쉘이 다르기 때문에 로컬에 설정한 환경변수를 읽지 못하는 것으로 판단된다.

처음에는 위와 같은 상황인 줄 알고 Uwsgi에 환경변수를 설정했었는데, 해당 문제는 아니었다.

supervisor의 환경변수 파일(.conf)을 열고 아래의 라인을 추가함으로써 환경변수를 설정시킬 수 있다.


environment=FLASK_CONFIGURATION="%(ENV_FLASK_CONFIGURATION)s", NEWRELIC_KEY="%(ENV_NEWRELIC_KEY)s"


environment=환경변수명="%(ENV_기존 환경변수명)s" 와 같은 형태로 설정하면 된다.

여러개의 환경변수를 읽어올 시 위처럼 , 로 구분하여 사용하면 된다.

Trouble shooting

  1. 위처럼 환경변수를 설정하면 for \'environment\' contains names which cannot be expanded' 와 같은 오류가 발생할 수 있다. 이 문제는 apt-get등의 패키지 관리자가 아닌 pip를 사용함으로써 해결할 수 있다. 참고로 pip로 supervisor를 설치하면 설정파일의 위치 등이 조금씩 달라지므로 수정해줘야 한다.
  2. Supervisor는 파이썬 3버전을 지원하지 않는다. 따라서 2버전을 사용하거나 다른 방법을 사용하는데, 다음과 같은 방법으로 직접 git에 접근하여 설치할 수 있다. 
    pip3 install git+https://github.com/Supervisor/supervisor