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

動画から大量の画像を抽出して、ブラウザでいじくり回したかったので、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モードで動かすことができるかを検討してみれば、ハッピーになれるかもしれませんね。

ABOUTこの記事をかいた人

フリーランスとして働く、フルスタックエンジニア 初崎 匠のサイト。仕事のことから趣味のアニメーション制作、英語学習など、様々なことを通じて、少しでも多くの人が幸せになれるような価値を提供できるよう挑戦し続けます。