メモ_XserverVPSでPython-WebアプリをFlask+waitressで実行するまでの手順

XserverVPSでPythonで書いたWebアプリをFlask+waitressで実行するまでの手順のメモです。

手順は以下の通りです。OSセットアップ直後の環境でスタートします。OSは Ubuntu 22にしています。

 

手順

  1. sshでログイン。apt-get update を実行
  2. apt install python3.10-venv を実行
  3. venvで仮想環境を構築して、仮想環境をアクティブにする。
  4. 仮想環境で必要なライブラリなどをセットアップ。Flask 、waitressをインストール
  5. Flaskアプリ用のフォルダを作成してコード群をup
  6. 稼働テスト
手順1:

まずはSSHでインストールしてapt-get update します。インストール直後だと古いライブラリがあり、venvインストールでエラーになったりします。

 

手順2:

OSセットアップ直後だとvenvが入ってないので、まずはvenvをインストールします。

apt install python3.10-venv
手順3:

インストールできたら、以下のコマンドで仮想環境を作ります。yourvenvのところは実際の仮想環境名になります。

source ./yourvenv/bin/activate

Xserverの場合、sshでログインするとデフォルトが「/root」フォルダになり、そのまま作業していくとrootフォルダ以下にいろいろと展開されていくので、気になる人は適当なディレクトリ(例:/home/username/***)を作って、そちらに展開しましょう。

手順4:

無事に仮想環境がアクティブになると、コンソールの表示が以下のようになります。

(仮想環境名) root@IPアドレス # 

この状態だとPythonのライブラリなどが何も入っていません。確かめたい人は「pip freeze」とかで確認しましょう。

必要最低限のライブラリをpipでインストールしていきます。とりあえず、今回は Flask と waitress の二つだけあればOKです。


pip install flask
pip install waitress
手順5:

flaskアプリを設置するフォルダを作成して、そこにテスト用のコードをアップします。scpコマンドないしsftpとかでfileをサーバにアップロードします。WindowsだとRloginというターミナルソフトがsftpも使えるので楽です。

テスト用に用意したコードとディレクトリ構造は以下の通りです。全部、app.pyに書いても良いのですが、少し込み入った検証を行うため、あらかじめroutesをわけて、templatesフォルダも設置しています。__init__.py も忘れずに設置します。


/app/app.py
/app/__init__.py

/app/routes/index_routes.py
/app/routes/__init__.py

/app/templates/index.html

各コードは以下の通り。


# /app/app.py
from flask import Flask
from flask import render_template, Blueprint
from waitress import serve

from routes.index_routes import index_bp

app = Flask(__name__)


# Blueprintを登録します。
app.register_blueprint(index_bp)


if __name__ == '__main__':
#    app.run('0.0.0.0', port=5000)
    serve(app, host='0.0.0.0', port=5000)

# /app/routes/index_routes.py
from flask import render_template, Blueprint

index_bp = Blueprint('index', __name__)

@index_bp.route('/')
def index():
    return render_template('index.html')

/app/templates/index.html は、「test waitress」とだけ表示したhtmlにしています。

手順6:

python3 app.py を実行して、 http://ip:5000/ でアクセスして、無事に「test waitress」が表示されていれば成功です。

ちなみに、OSセットアップ直後だと、apacheもnginxもインストールされておらず、httpd が走っていないため、waitress をそのままwebサーバにして、80番ポートで公開も出来ます。app.pyの最後をport=80 とするだけです。

apacheないしnginxを挟むのが本番運用としては適切かとは思いますが、手軽にWebアプリを公開したいだけであれば、Python+Flask+waitressだけでも稼働します。

FlaskアプリをWaitressで起動する際、ターミナルを閉じるとアプリも終了してしまいますので、ターミナルを閉じても稼働させつづけるには、nohupコマンドを使用するか、systemd にきちんと登録して自動起動するようにしておきます。

nohup python server.py &
参考:

Waitress — Flask Documentation (2.2.x) (msiz07-flask-docs-ja.readthedocs.io)