2017-03-14 5 views
-1

내부 용으로 개발 한 작은 플라스크 응용 프로그램을 배포 할 준비를하고 있습니다. 나는 배치를 위해 사용할 Ubuntu Server 16.04, uWSGI 및 Nginx가있는 오래된 노트북을 가지고 있습니다.Flask 앱을 ​​배포 할 때 인스턴스/config.py를 프로덕션 서버에 업로드해야합니까?

옵션 1

나의 현재 응용 프로그램 설정은 I 버전 제어의에서 를 유지 한 instance/config.py 파일이 있습니다. 이 파일에는 다음이 포함

app/__init__.py에서 다음과 같이 instance/config.py 파일이로드
SECRET_KEY = ... 
SQLALCHEMY_DATABASE_URI = ... 

# Google 'client_id' and 'client_secret' for social authentication functionality. 

:

def create_app(config_name): 
    app = Flask(__name__, instance_relative_config=true) 
    app.config.from_object(app_config[config_name]) 
    app.config.from_pyfile('config.py') 

는 안전 생산에 instance/config.py 파일이 때문에 생산을 위해이 같은 설정을 유지하는 것입니다 섬기는 사람?

OPTION 2 대안

, I는 환경 변수를 사용합니까?

os.environ['FLASK_CONFIG'] = 'production' 
os.environ['SECRET_KEY'] = ... 
os.environ['SQL_ALCHEMY_DATABASE_URI'] = ... 

app/__init__.py에 다음과 같은 한 :이 경우라면, 나는 wsgi.py 그렇게 같은 것을해야

def create_app(config_name): 
    if os.getenv('FLASK_CONFIG') == 'production': 
    app = Flask(__name__) 
    app.config.update(
     SECRET_KEY=os.getenv('SECRET_KEY') 
     SQLALCHEMY_DATABASE_URI=os.getenv('SQLALCHEMY_DATABASE_URI') 
    ) 
    else: 
    app = Flask(__name__, instance_relative_config=true) 
    app.config.from_object(app_config[config_name]) 
    app.config.from_pyfile('config.py') 
+0

Production은 dev와는 다른 인스턴스이므로 인스턴스 설정이 달라야합니다. – davidism

+0

무슨 뜻인지 모르겠습니다. 나는'SQLALCHEMY_DATABASE_URI'가 제가 개발에 사용하는 것과 다르다는 것을 알고 있습니다 만, 당신은 다른'SECRET_KEY'를 사용해야한다고 말하고 있습니까?하지만 제 질문은 남아 있습니다 : ** 인스턴스 서버에'instance/config.py'를 사용하는 것이 안전합니까? ** 제 경우에는 다른 설정을 유지하는'/ config.py' 파일이 있습니다. (예 : 생산을위한'DEBUG = False') –

+1

프로덕션 환경에서 설정 파일의 존재가 안전하지 않다고 생각하는 이유는 무엇입니까? 또한, 왜 당신은 인스턴스 구성을 가지고 있고 다른 구성을 위해 config라는 다른 것을 별도로 가지고 있는지 확실하지 않습니다. 네가 혼란스럽게 만드는 것처럼 보이네. 대답은 "구성해야 할 항목을 구성"하는 것입니다. 그러나 배포를 위해이 작업을 수행 할 수 있습니다. – davidism

답변

0

이 질문에 대답하기 위해, 예는 서버만큼 안전 안전합니다. 다행히 개인 키를 사용해서 만 액세스 할 수 있기를 바랍니다. 로그인 할 때 비밀번호를 사용하는 경우 문제가 될 수 있습니다.

버전 제어에서 구성을로드하는 데 사용되는 실제 파일을 유지하는 것이 좋습니다. 사실 버전 관리에 config.py을 넣었던 서버 중 하나를 사용하여 실제로 실수를 저지르고 파일을 덮어 쓰지 않을 때마다주의해야합니다.

당신이 할 수있는 한 가지는 각 환경에 대한 설정 파일 (예 : prod.pydev.py)을 모두 체크인 한 다음 버전 제어에 체크 표시가없는 pointer.py을 생성하는 것입니다.

prod.py

SECRET_KEY = ... 
SQLALCHEMY_DATABASE_URI = ... 
... 

pointer.py

from prod import SECRET_KEY, SQLALCHEMY_DATABASE_URI, ... 

server.py

app.config.from_pyfile('pointer.py') 

DEV에서 간단히 변경할 import 문은 dev.py을 가리 킵니다. from prod import *을 사용할 수도 있지만 isn't very good practice입니다.