2017-03-14 11 views
-1

私は内部で使用するために開発した小さなFlaskアプリケーションを配備する準備をしています。私は配備に使用するUbuntu Server 16.04、uWSGI、Nginxを備えた古いノートパソコンを持っています。Flaskアプリケーションをデプロイするときにインスタンス/ config.pyを実動サーバーにアップロードする必要がありますか?

OPTION 1

私の現在のアプリケーションのセットアップは、私はバージョン管理のからを守ってきたinstance/config.pyファイルを持っています。このファイルには以下が含まれています。

SECRET_KEY = ... 
SQLALCHEMY_DATABASE_URI = ... 

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

app/__init__.pyに次のようにinstance/config.pyファイルがロードされます。

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

、私は環境変数を使用してすべきですか?

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

プロダクションはdevとは異なるインスタンスなので、インスタンス設定が異なる必要があります。 – davidism

+0

あなたは何を意味するのか分かりません。私は 'SQLALCHEMY_DATABASE_URI'が私が開発で使っているものと違うことは知っていますが、あなたはまた' SECRET_KEY'を別に使うべきですって言っていますか?しかし、私の質問は残っています:**は、実例サーバーで 'instance/config.py'を持つのは安全ですか?**私のケースでは、私は'/config.py'ファイルを持っています。 (例えば、生産のための 'DEBUG = False') –

+1

プロダクションの設定ファイルが安全でないと思うのはなぜですか?また、なぜあなたはインスタンスの設定を持っているのか分かりませんし、別の設定のためにconfigという別のものを別に持っています。あなたは自分のために混乱させているように思えます。答えは、「設定が必要なものを設定する」ことです。しかし、それはあなたの展開のために働くことができます。 – davidism

答えて

0

質問に答えるために、はい、それはあなたのサーバー限り安全です安全です。うまくいけば、プライベートキーを使ってアクセスすることができます。パスワードを使用してログインすると、問題が発生する可能性があります。

設定をロードするために使用される実際のファイルをバージョンコントロールから除外することをお勧めします。私は実際にバージョン管理の中にconfig.pyを置いた私のサーバーの1つで間違いを犯しました。そして、私はファイルを上書きしないたびに注意する必要があります。両方にチェックされ

あなたができることの一つは、環境ごとに設定ファイルを持つことで、prod.pydev.py言って、次にバージョン管理にチェックインされていないpointer.pyを作成します。 devに

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.pyを指すようにします。 from prod import *でも可能ですが、それはisn't very good practiceです。

関連する問題