ConoHaWINGでFlaskアプリケーションを公開してみる【データベース・CGI使います】

今回はConoHaWINGでFlaskアプリケーションを公開するっていうことをやっていこうと思います。ローカルで作成したFlaskアプリケーションをConoHaWINGで動かしたい。

公開するアプリケーションはFlaskで作ったTODOアプリケーションでデータベースも使います。ではやっていきましょう。

使用するConoHaWINGスペック

今回使うのはConoHa WINGのベーシックプラン。WINGパックの一番安いやつです。

ConoHa WING

このプランで契約したサーバーがあるからそれを使ってやっていきます。

Flaskアプリケーションを作成する

まずは公開したいアプリケーションをFlaskで作る。dockerを使って環境は作るけど、Flaskとmysql5.7を使う単純なやつ。

使用しているimageはpython:alpineとmysql:5.7です。これで作ったやつをConoHaWINGで動かしたい。

作成したものはシンプルなTODOアプリケーションでTODOを入力すると、それがデータベースに保存されて画面に表示されるというもの。

ConoHaWINGで公開して同じように動かしていきましょう。

ConoHaWINGでFlaskアプリケーションを動かす方法

ConoHaWINGではCGIを使えるのでCGIを使ってアプリケーションを動かしたいと思います。

CGIとは、Webサーバが、Webブラウザなどからの要求に応じてプログラムを実行する仕組みの一つ。Web上で最も初期から用いられている動的なプログラム起動のための技術仕様で、多くのWebサーバソフトウェアが対応している。

CGI

ちょっと.htaccessをいじったりするけどCGIでやろう。ちなみに今回のアプリケーションのディレクトリ構造は以下の通りでindex.htmlで画面表示してindex.pyで処理をしています。

app
├── index.py
└── templates
─ └── index.html

データベースを作成する

今回はデータベースも使うので、ConoHaWINGの管理画面からデータベースとユーザーを作っておきます。

ここで作ったデータベース名やユーザー名、パスワードは後で使うから覚えておきましょう。

アプリケーションをConoHaWINGにアップロードする

ファイルをアップロード

FTPソフトを使って作成したアプリケーションのファイルを公開したいドメイン配下にアップロードします。これはCyberduckを使ってファイル群をアップロードした画面。

アップロードしたのは以下のフォルダとファイル。超少ない。

app
├── index.py
└── templates
─ └── index.html

.htaccessを編集する

ファイルをサイトにアクセスしたら表示してくれるように.htaccessを編集します。

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

RewriteRuleの/app/index.cgi部分は自分の作成したアプリケーション名にしておこう。今回はたまたまappっていうディレクトリ名だからそうしています。

cgiファイルを作成する

.htaccessでindex.cgiというファイルを指定したのでindex.cgiファイルを作成します。RewriteRule ^(.*)$ /app/index.cgi/$1 [QSA,L]としているのでappディレクトリ配下に作ります。

#! /opt/alt/python36/bin/python3.6

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

このimport appのappなんかも自分が作成した名称じゃないと動かないと思うから、作成した名称でやりましょう。cgiファイルのパーミッションは755にしておく。

ファイルを右クリックして属性変更から変更できる。

データベースのテーブル作成

アプリケーションが接続するデータベースのテーブルを作成しよう。作成したユーザー名とパスワードでphpmyadminにログイン。

今回は直接SQL実行してテーブルを作成します。

テーブルが作成できたらOK。今回は1つだけしか使わないから1つだけ作成。

データベースの接続情報を変更する

ConoHaWINGで作成したデータベースにアプリケーションから接続したいので、アプリケーションのコード内のDB接続情報を変更します。データベース名やユーザー名ですね。

return pymysql.connect(
host="管理画面から見れるホスト名",
db="作成したデータベース名",
user="作成したユーザー名",
password="作成したパスワード",
charset='utf8',
cursorclass=pymysql.cursors.DictCursor
)

モジュールインストール

アプリケーションを動かすには使っているモジュールをインストールする必要があるから、SSH接続してConoHaWINGサーバーに入ったらインストールする。

$ pip install flask
$ pip install pymysql

pipって普通に使えるんですね、エックスサーバーでやった時には使えなかったけどpipコマンド入っていました。

アクセスして動作確認する

色々必要なことをやったのでドメインにアクセスして実際に動くか確かめてみると動きました。

.htaccessやCGIファイルの設定などちょっとだけ面倒だけど動かせましたね。