mellonを使ったapache2でFlaskを動かす
はじめに
前回の続きです。
apache2のmellonモジュールを使ってSSOを実装しました。認証先はAzureADです。
それはそれとして独自LDAPの操作をWeb画面で行いたいので、LDAP操作ができる言語でWebサービスを作っていきます。特にこだわりはありませんが今回はPythonでFlaskを使おうと思います。
LDAP操作は一度置いといて、apache2でwsgiモジュールを有効にしてFlaskで作ったページを表示することが今回の目標です。
1. 必要な機能のインストール
history
を見たら、以下をインストールしていました。
apt -y install python3-pip python3.11-venv libsasl2-dev python-dev-is-python3 libssl-dev libapache2-mod-wsgi-py3
2. Flaskの簡易ページ作成
pipでFlaskをインストールしようとしましたが、なにやらエラーが表示されました。 PEP668という定義があるようで、 このページが大変参考になりました。
以下のようなざっくり理解です。
「OSや他のアプリのPython環境に影響が出ないよう、仮想化した環境でモジュールを利用しよう」
仮想環境の作成
作業場所は/var/www/html
です。ここでFlaskを動かしたいので仮想環境を作ります。
環境変数のProxy設定を忘れていたので、まずはProxyを設定します。
export http_proxy="http://10.24.1.10:8080/" export https_proxy="http://10.24.1.10:8080/"
隔離されたPython環境(仮想環境)を作るコマンドです。
--prompt
は仮想環境の名前です。
python3 -m venv --system-site-packages --clear --prompt "your-ldap" --upgrade-deps $(pwd)/.venv
仮想環境ができたか確認します。
/var/www/html# ls .venv/bin/ activate activate.csh activate.fish Activate.ps1 pip pip3 pip3.11 python python3 python3.11 /var/www/html#
モジュールのインストール
まず仮想環境を起動します。
/var/www/html# source .venv/bin/activate (your-ldap)/var/www/html#
必要なモジュールをインストールします。
(your-ldap)/var/www/html# pip3 install flask --proxy="http://10.24.1.10:8080/" (your-ldap)/var/www/html# pip3 install mod_wsgi --proxy="http://10.24.1.10:8080/"
仮想環境を終了します。
(your-ldap)/var/www/html# deactivate /var/www/html#
テスト用のファイル作成
/var/www/html
に2つファイルを作成します。
adapter.wsgi
# coding: utf-8 import sys sys.path.insert(0, '/var/www/html') from app import app as application
app.py
# coding: utf-8 from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello, Flask!" if __name__ == "__main__": app.run()
3. apache2のモジュール設定
/etc/apache2/sites-enabled/server-ssl.conf
に設定を追加します。
<IfModule mod_ssl.c> <VirtualHost _default_:443> DocumentRoot /var/www/html ServerSignature Off ErrorLog /var/log/apache2/error.log CustomLog /var/log/apache2/access.log combined LogLevel info ssl:warn SSLEngine on SSLCertificateFile /etc/ssl/certs/server.pem SSLCertificateKeyFile /etc/ssl/private/server.key + WSGIDaemonProcess your-ldap threads=5 + WSGIScriptAlias / /var/www/html/adapter.wsgi + WSGIApplicationGroup %{GLOBAL} </VirtualHost> + <Directory /> + WSGIProcessGroup your-ldap + WSGIApplicationGroup %{GLOBAL} + Order deny,allow + Allow from all + </Directory> <Location /> Require valid-user AuthType "Mellon" MellonEnable "auth" MellonDecoder "none" MellonVariable "cookie" MellonSecureCookie On MellonUser "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name" </Location> </IfModule>
systemctl restart apache2
でapacheを再起動します。
4. 接続確認
無事、Azureの認証経由でFlaskの画面が表示できました。