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モードで動かすことができるかを検討してみれば、ハッピーになれるかもしれませんね。