LoginSignup
12
11

More than 3 years have passed since last update.

Flask + mod_wsgi + Apache でWEBアプリを作る(HelloWorld編)

Last updated at Posted at 2021-03-14

はじめに

マイクロWEBアプリケーションフレームワークのFlaskを使用すると、WEBサーバ上で動かすことのできるWEBアプリが作成できます。
Python部分の作りこみ部分はおいおいとして、FlaskとApcheでHelloWorldまで表示させるところまでやってみます。

本記事のゴール

Apache+mod_wsgi+Flaskで、Flaskで書いたHelloWordを表示させる。

動作環境

  • Windows Server 2019 Standard(1809)
  • Python 3.8.5
  • Flask 1.1.2

目次

  1. Flask単体でHelloWorld
  2. Apacheのインストールと設定
  3. ApacheとFlaskをつなぐ設定

1.Flask単体でHelloWorld

まずはFlaskのライブラリをインストールします。

pip install flask

Flaskを動作させるPythonファイルapp.pyを作成して、Flask Hello Worldを表示させるコードを書きます。

from flask import Flask

# Flaskをappという変数で動かす宣言
app = Flask(__name__)

@app.route('/')
def hello():
   name = "Flask Hello World"
   return name

# appの実行
if __name__ == "__main__":
   app.run()

コマンドプロンプトからapp.pyを実行します。

python app.py

実行結果が↓のように出るので、http://127.0.0.1:5000/ にアクセスしてFlask Hello Worldが出ていればFlask単体での実行はOK。

USER$ python3 app.py
 * Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

WEBアプリケーションフレームワークのFlaskにはデバック用に簡易的なWEBサーバ機能があります。
出力結果にもWARNING: This is a development server. Do not use it in a production deployment.
とありますが、正式に運用するには性能に限界があるため、後続のWEBサーバ(ApacheやNginxなど)で動作させる必要があります。

2.Apacheのインストールと設定

正式なWEBサーバとしてApacheを導入します。
Apacheを下記サイトからダウンロードして解凍します。
https://www.apachelounge.com/download/

解凍した「Apache24」フォルダをCドライブ直下に移動します。
そのままではWEBサーバとして使用できないので、下記2点の設定を行います。

  • ① 設定ファイルの変更、
  • ② インストールとサービスの起動

① 設定ファイルの変更

下記、コンフィグファイルを修正します。
C:\Apache24\conf\httpd.conf

コンフィグファイル修正点:どのポートを受け付けポートにするか

#Listen 80 #変更前
Listen 80 #変更後

② インストールとサービスの起動

コマンドプロンプトを起動してC:\Apache24\binまで移動して、
Apacheのインストールとサービス起動します。(※管理者権限で実行が必要なので注意)

cd C:\Apache24\bin
httpd -k install
httpd -k start

http://localhost/ にアクセスして、It works!と表示されていればApacheの設定は完了です。

3.ApacheとFlaskをつなぐ設定

WEBサーバ上でFlaskを動かすためにはWSGI(Web Server Gateway Interface)を使用してApacheとつなぐ必要があります。
そのため、PythonのFlaskで作ったコードをApacheで動作させるための設定を行います。

設定は下記3点を設定します。

  • ① mod_wsgiのインストール
  • ② WSGIファイルの用意
  • ③ Apache設定ファイルの編集

(※今回はPyPiからではなく、Unofficial Windows Binaries for Python Extension Packagesを使用します。)

① mod_wsgiのインストール

下記URLからwhlファイルをダウンロードしてきて、mod_wsgiをインストールします。
https://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi

pipでインストールします。

pip install mod_wsgi-4.7.1-cp38-cp38-win_amd64.whl

② WSGIファイルの用意

ブラウザからアクセスが来た際にFlaskへ繋ぐためのWSGIファイルを作成します。
app.pyと同じ場所にapplication.wsgiを作成します。中身は下記を記載します。

import sys
sys.path.insert(0, 'C:/WEBapp(任意のフォルダ名)')
from app import app as application

2行目のPathはapp.pyがあるフォルダパスを設定します。
今回は例としてWEBapp(任意のフォルダ名)の下にapp.pyがある想定です。

③ Apache設定ファイルの編集

ApacheにWSGIへ連携させるための設定をします。
コマンドプロンプトを立ち上げて、下記コマンドを実行し、出力結果をC:\Apache24\conf\httpd.confの最後に追記します。

mod_wsgi-express module-config

続いてVirtualHostの設定をします。
C:\Apache24\conf\httpd.confに下記を追加します。

<VirtualHost *:80>
   WSGIScriptAlias / "C:/WEBapp(任意のフォルダ名)/application.wsgi"
   <Directory "C:/WEBapp(任意のフォルダ名)">
     Require all granted
   </Directory>
</VirtualHost>

最後にApache再起動します。

httpd -k start

http://localhost/ にアクセスして、Flask Hello Worldと表示されていればApache上でFlaskを動かせていることになります。

以上、お疲れ様でした。

12
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
11