2017-07-26 12 views
0

私はそれが成功した定期的なhttp://my.domain/SSLを使用してHTTPSポート443にAWS EC2 Flaskアプリケーションをデプロイするにはどうすればよいですか?

に展開しないが、私が正常に取得することができたし、テストSSL証明書と彼らはhttps://my.domain:8888/

でJupyterノートブックインスタンス上で動作検証し、私のフラスコアプリケーションが https://my.domain/上で実行するために取得することができません

私はhttps://my.domain/で私のルートのホームディレクトリへのアクセスを得るためにある/etc/httpd/conf/httpd.confを変更することができました - 私はまた、成功したHTTP要求をリダイレクトすることができています/> /ホーム/ユーザー名/コード

をhttpsにリンクしていますが、ランディングページは単なるLinuxエクスプローラであり、Flaskではなくアプリケーション。

でもhttpd.confに、ssl.confに、ポート443でフラスコのアプリケーションを起動するwsgi.confの広範な編集した後、それはそうではないんですが、また、ポートに80

ままAWS CodeStarを使用してコードを変更するたびに、EC2インスタンスの/etc/httpd/conf.d/wsgi.confファイルが上書きされていることに気付きました。

私のアプリケーションが正しいポートにデプロイするように設定する必要があるAmazon側の設定がありますか?または、EC2インスタンスサーバー上の設定ファイルを編集する必要がありますか?それとも何か間違っている?フラスコは、2つのポート上で実行され、あなたが最初にここにヒントをフォローしたいとなるようにフラスコのために働くためにHTTPS/SSLを得るために

答えて

0

Https with Http in Flask Python

しかし、これはのみ実行するようにフラスココードを設定しますSSLで展開時に実際にFlaskプロセスを起動することはありません。そのためには、/etc/httpd/conf.d/wsgi.confスクリプトを編集して、wsgiデーモンの2番目のインスタンスを起動する必要があります。

wsgi.confのデフォルトスクリプトには、ポート80のセクションが含まれている必要があります。このセクションをコピーしてSSLパラメータを追加し、wsgiコマンドを編集して別の変数名にしたい場合は、打ち上げここで説明したように、あなたも、WSGIを削除し、代わりに443へのリダイレクトを持つように、この時点でのポート80のセクションを編集することができますことを

<VirtualHost *:443> 
    ServerName <MY SERVER NAME> 
    ServerAlias <MY SERVER NAME> 
    SSLEngine on 
    SSLCertificateFile <Server PEM file> 
    SSLCertificateKeyFile <Private Key PEM file> 
    SSLProtocol all -SSLv2 -SSLv3 
    SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA; 
    SSLHonorCipherOrder on 
    Alias /static/ /opt/python/current/app/static/ 
    <Directory /opt/python/current/app/static/> 
    Order allow,deny 
    Allow from all 
    </Directory> 
    WSGIScriptAlias//opt/python/current/app/application.py 
    <Directory /opt/python/current/app/> 
    Require all granted 
    </Directory> 
    WSGIDaemonProcess wsgi2 processes=1 threads=15 display-name=%{GROUP} \ 
    python-path=/opt/python/current/app:/opt/python/run/venv/lib64/python3.4/site-packages:/opt/python/run/venv/lib/python3.4/site-packages user=wsgi group=wsgi \ 
    home=/opt/python/current/app 
    WSGIProcessGroup wsgi2 
    </VirtualHost> 

注: Redirect to Https using Elastic Beanstalk ELBRedirect HTTP to HTTPS Apache2

テスト私は、次の追加を持っていますその後、

sudo service httpd restart 

を使用してApacheサーバをリセットすることにより、この構成では、開発サーバーを起動

あなたはその後、フラスコを2つのポート上で実行して表示されるはずです

または

sudo /home/ec2-user/anaconda3/bin/python application.py 

EC2インスタンスでこれを実行している場合は、コードがすでに展開され実行されている可能性があるので、ポートが使用中である可能性があります。「OSError:[Errno 98] Address is already use "

あなたはまだ完了していません...ああ、もう1つの落ち着きがあります...

私はあなたの/etc/httpd/conf.d/を上書きん https://forums.aws.amazon.com/thread.jspa?threadID=163369からTHIS以下の事実(StackOverflowの質問 what is difference between commands and container commands in elasticbean talkConfigure apache on elastic beanstalkwsgi user permissions on elastic beanstalkも参照)... CodeStarとElastic Beanstalkで経由

明らかEC2展開を発見しましたwsgi.confファイル。これを防ぐ/修正するには、独自のwsgi.confファイルを使用するように.ebextensions設定スクリプトを編集する必要があります。これには、Amazonがデフォルトスクリプトに行っている更新を追跡しないという欠点があることに注意してください。

最初に、保持したいwsgi.confファイルを.ebextensionsディレクトリにコピーしました。後、

files: 
    "/etc/httpd/conf.d/wsgi.conf" : 
    mode: "000777" 
    owner: root 
    group: root 
    content: | 
     <IfModule !wsgi_module> 
     LoadModule wsgi_module modules/mod_wsgi.so 
     </IfModule> 
     . . . 
     <VirtualHost *:443> 
     . . . 
     </VirtualHost> 
     LogFormat "%h (%{X-Forwarded-For}i) %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 

その後:

次に、私は次のように追加することが私の.ebextensions/sshd.configファイル(私はそのディレクトリに持っている唯一のもの)を編集し、「ファイル:」セクション、私が追加しますコンフィギュレーションの最後に、次の:上記CONTAINER_COMMANDS、ないコマンドを使用すること

container_commands: 
    02_update_wsgi: 
    command: > 
     cp .ebextensions/wsgi.conf ../wsgi.conf 

注意。

この技術の素晴らしいところは、あなたが展開した後、手動で何かをコピーするか、次の「sudoのサービスのhttpdの再起動」

再実行する必要はありませんので、Elastic Beanstalkでは自動的に、Apacheサーバの再起動のコマンドを実行していることです上記の手順でSSL証明書を使用してHTTPS上でFlaskを実行し、正しくデプロイします。

関連する問題