Python - flask - apache への組込 - uwsgi


 クラウディア


1. 概要
2. インストール
3. uwsgi 設定
4. apache 設定
5. コンテンツ作成
6. 確認
7. 参考サイト

1. 概要

 「uwsgi」というのは、「php」で「mod_php」の代わりに「php-fpm」を使うようなもんですな。  「Gunicorn」とかいう、リバースプロキシちゅうのもあるようですが・・・。  「uwsgi」を使ってみます。

2. インストール

 「FreeBSD 15.0 RELEASE」へ組み込みます。  「root」ユーザ権限で。

cd /usr/ports/www/uwsgi

make config
 デフォルトのオプションです。

 何かの役に立つかもしれないので、「JSON」のチェックをいれておきます。


make NO_DIALOG=yes

make install
 「make」は、速いですが、わけわからないメッセージがわらわらと表示されました。  インストール時のメッセージを残しておきます。

===>  Installing for uwsgi-py311-2.0.31
===>  Checking if uwsgi-py311 is already installed
===>   Registering installation for uwsgi-py311-2.0.31
Installing uwsgi-py311-2.0.31...
===> Creating groups
Creating group 'uwsgi' with gid '165'
===> Creating users
Creating user 'uwsgi' with uid '165'

3. uwsgi 設定

 プロジェクトルートを。

/usr/local/www/flask
 として、「uwsgi」のコンフィグレーションファイルを作成します。

mkdir -pv /usr/local/www/flask
vi /usr/local/www/flask/uwsgi.ini
 下記を記述します。

[uwsgi]
chdir = /usr/local/www/flask

mount = /=app:app
manage-script-name = true

socket = /tmp/uwsgi.sock
chmod-socket = 666

master = true
processes = 5
vacuum = true
die-on-term = true

logto = /var/log/www/uwsgi.log
 2行目は、「flask」のアプリケーションの場所を定義しています。  4、5行目は、実行ファイル名と、「flask」のインスタンス名を定義しています。  7、8行目は、「apache」との通信に使用するソケットの定義です。  10、11行目は、プロセス管理を定義しています。  12、13行目は、終了時にソケットファイルをクリアする定義を行っています。  15行目は、ログファイルの定義を行っています。  「uwsgi」のプロセス定義を行います。

sysrc uwsgi_enable="YES"
sysrc uwsgi_profiles="flaskapp"
sysrc uwsgi_flaskapp_enable="YES"
sysrc uwsgi_flaskapp_configfile="/usr/local/www/flask/uwsgi.ini"
sysrc uwsgi_flaskapp_logfile="/var/log/www/uwsgi.log"
 起動します。

service uwsgi start

Processing uwsgi profile: flaskapp
Starting uwsgi.
[uWSGI] getting INI configuration from /usr/local/www/flask/uwsgi.ini

4. apache 設定

 「root」ユーザ権限で。

vi /usr/local/etc/apache24/httpd.conf

LoadModule proxy_module libexec/apache24/mod_proxy.so
#LoadModule proxy_connect_module libexec/apache24/mod_proxy_connect.so
#LoadModule proxy_ftp_module libexec/apache24/mod_proxy_ftp.so
#LoadModule proxy_http_module libexec/apache24/mod_proxy_http.so
LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so
#LoadModule proxy_scgi_module libexec/apache24/mod_proxy_scgi.so
#LoadModule proxy_uwsgi_module libexec/apache24/mod_proxy_uwsgi.so
 129、135行目(proxy_module、proxy_uwsgi_module)が有効であることを確認します。  上記の場合は、135行目がコメント化されていますので、先頭の「#」を削除して、有効化します。  末尾の方にある。

Include etc/apache24/extra/httpd-ssl.conf
 をコメントアウトします。

vi /usr/local/etc/apache24/Includes/flask.conf
 下記を記述します。  (ファイル名はなんでもいいですが、証明書ファイルやログファイルの記述は、適宜書き換えてください。)

Listen 443

<VirtualHost _default_:443>
    SSLEngine on

    SSLCertificateFile    "/etc/ssl/demoCA/cert.pem"
    SSLCertificateKeyFile "/etc/ssl/demoCA/nokey.pem"
    SSLCACertificateFile  "/etc/ssl/demoCA/cacert.pem"

    ProxyPass /flask/ unix:/tmp/uwsgi.sock|uwsgi://localhost/
    ProxyPassReverse /flask/ unix:/tmp/uwsgi.sock|uwsgi://localhost/

    Redirect permanent /flask /flask/

    ErrorLog  "/var/log/www/error.log"
    CustomLog "/var/log/www/access.log" combined
</VirtualHost>

5. コンテンツ作成

 コンテンツを作成します。  プロジェクト所有者権限で。

vi /usr/local/www/flask/app.py
 下記を記述します。

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
  return "Hello, World with uwsgi!"

if __name__ == "__main__":
  app.run()

6. 確認

 「root」ユーザ権限で。  設定を確認して。

service apache24 configtest
 「apache」を再起動。

service apache24 restart
 ブラウザで。

https://server_name/flask/
 にアクセスして、下記のように表示されれば成功です。

7. 参考サイト

 本ページは、「Gemini」伍長を参考にさせていただきました。

audiobook.jp
AbemaTV 無料体験
サウンドハウス
Amazonギフトカード