Flaskフレームワーク(python3系)をコアサーバ(CORESERVER)で公開する

PythonとVue.jsを使った動画フレーム処理システムをコアサーバでホスティングする方法

動画から大量の画像を抽出して、ブラウザでいじくり回したかったので、pythonとVue.jsを使った機能を作りました。

pythonはコードをシンプルに書けるし、C++など高速な処理が得意な言語とも相性が良いです。 動画など大量のデータを捌くときなんかも、C++で書かれたライブラリを使うことで、高速に処理ができるんですよね。 ブラウザに出力した画像をいじくり回すときは、Vue.jsが良いですね。 jqueryなんかよりも圧倒的に使いやすく、シンプルなコードで実装できてしまいます。

はじめローカル環境で作っていたのですが、ある程度できてきたところで、サーバに上げました。 今回はその方法を紹介したいと思います。

サーバに上げる際に困ったこと

できた機能をサーバに上げる際に、いくつかの点で問題が見つかりました。 まず、私が組んだシステムは以下ようなシンプルな感じで動いています。

  • Flaskフレームワーク(python3系)
  • Vue.js

これをコアサーバ(CORE-MINI)で動かそうとしたのですが、FlaskはApacheなどのwebサーバとは連携しておらず、PHPのようにファイルをアップロードするだけでは、ブラウザからアクセスできませんでした。 以下は、主にFlaskをコアサーバで動かすための勘所を紹介しています。

サーバの設定確認とパッケージのインストール

まず、コアサーバにSSHでアクセスし、以下のコマンドでflaskが入っているか確認します。

python3 -m pip list

入っていなければ、インストールしますが、もしpipのアップグレードが必要だと言われた場合は、先に対応しておきます。

python3 -m pip install --upgrade pip --user
python3 -m pip install Flask --user

作ったプログラムを設置

作ったプログラムを置く任意のディレクトリに、以下の.htaccessを置きます。

AddHandler cgi-script .py

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.py/$1 [QSA,L]

.pyファイルをCGIとして動かし、全てのアクセスをindex.pyを経由するようにします。 index.pyでは、FlaskをCGIモードで動くように設定します。ここが今回の一番のポイントです。

#!/usr/local/bin/python3
# coding: utf-8

import cgitb
cgitb.enable()

from wsgiref.handlers import CGIHandler
from server import app
CGIHandler().run(app)

上記でimportされるserver.pyでは、Flaskの初期設定やルーティングを書きます。

#!/usr/local/bin/python3
# coding: utf-8

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return "Hello!"

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

これでブラウザからアクセスできるようになります。

CGIモードで動かすことがポイント

Flaskは、apacheやnginxなどのwebサーバと連携して動かしたり、 gunicornやuWSGIなどのサーバをwebサーバとの間に挟んで利用することができます。 しかし、コアサーバなどのレンタルサーバでは、このような対応ができないケースもあります。

その場合は、CGIモードで動かすことができるかを検討してみれば、ハッピーになれるかもしれませんね。