Big Sur上のApacheで,Dashを動かす

  • Pythonの実行環境を用意

    • pyenvでのインストール
    • mod_wsgiのインストール
    • dashのインストール
  • Apache2のインストール・設定

    • Homebrewからインストール
    • 設定ファイルの修正・作成
  • WSGIファイルおよびDashを使ったスクリプト

pythonの実行環境

既存のpyenvで作った環境を使おうとしたら,--enable-sharedオプション付きでインストールしていないとmod_wsgiをインストールできなかったので 作り直す(3.9.0の例)

$ env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.9.0

pyenv global 3.9.0またはpyenv local 3.9.0でこの環境をアクティブにしてからmod_wsgiとdashをインストール

$ pip install mod_wsgi
$ pip install dash

Apache2

Homebrewから入れる.

$ brew install apache2

Homebrewで入れたapache2の設定ファイルはデフォルトと異なり,/usr/local/etc/httpd/httpd.confになる.

記載内容を得るため,mod_wsgiの設定を確認する

$ mod_wsgi-express module-config
LoadFile "/usr/local/var/pyenv/versions/3.9.0/lib/libpython3.9.dylib"
LoadModule wsgi_module "/usr/local/var/pyenv/versions/3.9.0/lib/python3.9/site-packages/mod_wsgi/server/mod_wsgi-py39.cpython-39-darwin.so"
WSGIPythonHome "/usr/local/var/pyenv/versions/3.9.0"

これを参考にpython.confに記入.

LoadModule wsgi_module "/usr/local/var/pyenv/versions/3.9.0/lib/python3.9/site-packages/mod_wsgi/server/mod_wsgi-py39.cpython-39-darwin.so"
WSGIPythonHome "/usr/local/var/pyenv/versions/3.9.0"

WSGIScriptAlias / /Users/hogehoge/Sites/python/test.wsgi
<Directory /Users/hogehoge/Sites/python>
        options  ExecCGI Indexes FollowSymLinks
</Directory>
        

WSGIScriptAlias/でないと"Loading..."と表示されるだけで,所望の結果が得られない.

WSGI,Dashによるスクリプト

Dashを使ったアプリ本体(test.py

# -*- coding: utf-8 -*- 

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input,Output,State
import plotly.graph_objects as go

app = dash.Dash(__name__)

app.layout = html.Div(
    children=[
        dcc.Graph(figure=go.Figure()),
    ],
)

if __name__=='__main__':
    app.run_server(debug=True)

WSGIファイル(test.wsgi

import sys
sys.path.insert(0, '/Users/hogehoge/Sites/python')
from test import app
application = app.server

flaskなどと違って,applicationにはappではなくserverを対応づける.