軽量OSのUbuntuをWebサーバにしてみている最中、pythonでHTMLソースを吐き出し表示させるのはPHPと同じようできないのかな?
と疑問が生じ、ただpyファイルをWebサーバにアップしてみたら書き込んだ内容がそのまま表示されてしまった。
PHPファイルとは同じようにいかないんだと思い、調べてみると色々とさらにインストールが必要っぽくてやってみた。
URLはhttp://localhost/appで表示することを想定します。
まずはWebサーバとしてApacheをインストール。
sudo apt -y install apache2
次にpipというものをインストールして、Flaskというものをインストールする必要があるらしい。その為以下のコマンドを入力する必要があるそう。
sudo apt -y install python3-pip libapache2-mod-wsgi-py3
これでpipがインストールでき、pipコマンド使ってFlaskをインストールするようです。
sudo pip3 install flask
そうすると、なんかインストールできなかったっぽい画面が表示しました。
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.
If you wish to install a non-Debian-packaged Python package,
create a virtual environment using python3 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
sure you have python3-full installed.
If you wish to install a non-Debian packaged Python application,
it may be easiest to use pipx install xyz, which will manage a
virtual environment for you. Make sure you have pipx installed.
See /usr/share/doc/python3.12/README.venv for more information.
note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.
全く分からないw
本当はこういうのが読み取れてエラー修正していかなければならないんでしょうけど・・・
色々と調べるとpipのほかにpipxというものがあるんだそう。その方法を試してみました。まずはインストールから。
sudo apt install pipx
無事インストール完了し、以下のコマンドを実行。
pipx install flask
インストールできましたー!めっちゃ嬉しいw
今度はapacheのドキュメントルートにappディレクトリを作成し、その中に二つのファイルを準備します。
/var/www/html/app/app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello my project!'
if __name__ == '__main__':
app.run()
/var/www/html/app/wsgi.py
import sys
import os
sys.path.append('/var/www/html/app')
from app import app as application
あとはディレクトリとパーミッションの設定が必要だと思うけど、テストだし面倒なのでひとまず全部755に設定しました。
sudo chmod -R 755 /var/www/html/app
これが終わって今度はapache側で設定ファイルを編集します。
設定ファイルを開き、WSGIScriptAliasなどを入力する必要があるそう。
DocumentRoot /var/www/html と書いてある下あたりに追加しました。
sudo nano /etc/apache2/sites-available/000-default.conf
DocumentRoot /var/www/html
#追加
WSGIDaemonProcess app threads=5
WSGIScriptAlias /app /var/www/html/app/wsgi.py
WSGIApplicationGroup %{GLOBAL}
<Directory /var/www/html/app>
WSGIProcessGroup app
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
この後一度apacheを再起動します。
sudo systemctl restart apache2
これで最後にhttp://localhost/app/を入力します。
ブラウザに「Hello my project!」と表示されたら成功です。
もしローカルAIとかを構築しブラウザで使用することになればこういう構築が必要なんかな?
pythonでチャットし出力されたテキストデータをpyファイルでブラウザに出力するとかそんな感じなんかな?
ひとまず、phpファイルやhtmlファイルじゃなくpythonのpyファイルでブラウザに文字表示するまでの流れでした。