シュンカの日記

基本的に書きたいことを書いていくスタイル。

Apache上でFlaskを動かすまで(Apache2+wsgi+Flask)

【スポンサーリンク】

PythonのフレームワークであるFlaskでWebアプリを作成中。
Web上で公開したいため、Apacheと連携させるまでの手順を書く。

ここでは、開発環境(ローカル)でFlaskの動作検証を実施するとともに、その後本番環境(本番Apache)上で動かすまでの手順を書いていく。

環境

※下記は全てインストール済の前提で進めていく

  • OS:Raspbian(Raspberry Pi 3)
  • Pythonバージョン: 3.6.3
  • ウェブサーバー:Apache2

なおPythonアプリの場所は、/var/www/html/flask
でやっていくが、適宜、各々の環境に置き換えてほしい。

参考

qiita.com

開発環境での動作検証

Flaskインストール

pip install flask

テストアプリ作成

[/var/www/html/flask/Hello.py]

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello'

if __name__ == '__main__':
    app.debug = True
    app.run(host='0.0.0.0', port=80)

本番環境(公開サーバー)で動かす

apache2のインストール

apache2は既にインストール済の前提だが、なければ下記

 sudo apt-get -y install apache2

mod_wsgiのインストール

mod_wsgi(ウィズギー)は、PythonフレームワークとApache2を連携させるためのインターフェースモジュール。らしい。
wsgi無しでは、PythonをWebサーバーと連携できないので、インストールが必要。※一応cgiを使うという手もある

sudo apt-get -y install libapache2-mod-wsgi

wsgiファイルを作成

/var/www/html/flask にwsgiファイルを作成する。
[/var/www/html/flask/test.wsgi]

import sys, site

#pythonのpathを指定
site.addsitedir('/path/python3.6/site-packages') 

#wsgi, Flaskファイルのディレクトリを指定
sys.path.insert(0, '/var/www/html/flask')
from Hello import app as application

apache2の設定ファイルでVirtualHostを追加

バーチャルホストを使えば、一つのドメインで複数のサイトを作ることができる。
デフォルト(80番)でよければいいが、自分は既に別サイトで使用していたので、ポート8080番でVirtualHostを追加する。

念の為、デフォルトの設定ファイルはいじらず、新しく作る。

sudo cp 000-default.conf 001-default.conf

下記コードを追加する。
[/etc/apache2/sites-available/001-default.conf]

<VirtualHost *:8080>

 WSGIDaemonProcess test user=pi group=pi threads=5
 WSGIScriptAlias / /var/www/html/flask/test.wsgi

<Directory /var/www/html/flask>
 WSGIProcessGroup test
 WSGIApplicationGroup %{GLOBAL}
 WSGIScriptReloading On

 Require all granted
</Directory>
</VirtualHost>

apache2の設定ファイルでポートを追加

上記でポートを追加した場合、設定ファイルの編集が必要。
(従って、ここは本筋ではない)
ports.confを編集して、とりあえず8080番を追加

[/etc/apache2/ports.conf]

   # If you just change the port or add more ports here, you will likely also
   # have to change the VirtualHost statement in
   # /etc/apache2/sites-enabled/000-default.conf
  
   Listen 80
   
 #以下を追加
   Listen 8080
   
   <IfModule ssl_module>
       Listen 443
   </IfModule>
 
  <IfModule mod_gnutls.c>
      Listen 443
  </IfModule>

ルーターの設定でポートを追加する

(上記同様、本筋では無いが)ルーターの設定で、今回新しく追加したポートを公開する必要がある。
今回で言えば8080番を公開する必要がある。
やり方は、ルーターの種類によって異なってくるかと思うので割愛。



以上。ポート8080番で、Flaskアプリケーションが実行できればOK。
f:id:nukano0522:20180430144544p:plain