Cloud9とApache Httpdでflaskアプリを動かす

はじめに

Coud9で使用しているEC2上でflaskアプリを動かして、動作検証したいケースがある。
その際に参照するための手順を残しておく。

所要時間

本手順は60分あれば完了する想定である。

Apache Httpdの設定

Apache HttpdはCloud9上にデフォルトでインストールされている。
そのため、自動起動の設定だけ入れておく。

起動設定の現状確認

$ sudo chkconfig --list httpd

自動起動設定

$ sudo chkconfig httpd on

設定確認

$ sudo chkconfig --list httpd

必要なパッケージのインストール

apache-devとgccのインストール

$ sudo yum -y install httpd24-devel

※ gccはもともとインストール済みだが、Cloud9以外でインストールするなら以下。

$ sudo yum -y install gcc

mod-wsgiのインストール

pipのバージョンアップ

Cloud9にもともと入っているpipのバージョンが古いためアップグレードしておく。

$ sudo pip install --upgrade pip  

ハッシュの更新

下記の記事を参照しました。Cloud9に初期から内蔵されていたpipをアップグレードすると
ハッシュ更新しないとコマンドが見つからないというエラーが発生するため下記を実行。
参照先:https://qiita.com/kantoku_305/items/6e22e86bba266a650415

$ hash -r

mod-wsgiのインストール

$ pip install mod-wsgi

importの参照先を確認する

ここからはmod-wsgiの格納先を見つけるために下記を実施する。

$ python -c "import sys; print(sys.path)"

['', '/usr/lib64/python3.6', '/usr/lib64/python3.6/lib-dynload', '/home/ec2-user/.local/lib/python3.6/site-packages', '/usr/local/lib64/python3.6/site-packages', '/usr/local/lib/python3.6/site-packages', '/usr/lib64/python3.6/dist-packages', '/usr/lib/python3.6/dist-packages']

findコマンドで検索していく

$ find /usr/lib64/python3.6 -name mod_wsgi
$ find /home/ec2-user/.local/lib/python3.6/site-packages -name mod_wsgi                                                                                   
/home/ec2-user/.local/lib/python3.6/site-packages/mod_wsgi

これにより「/home/ec2-user/.local/lib/python3.6/site-packages/mod_wsgi」に
格納されていることが分かった。
この後、mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.soの格納先を絶対パスで使用するので、
下記をメモしておく。
「/home/ec2-user/.local/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so」

flaskモジュールの作成

flaskのインストール

$ pip install flask

flaskモジュールの作成

$ vi ~/environment/flask/main.py

↓ 以下がファイルの中身
from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello, Flask!"

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

wsgi用設定ファイルの作成

$ vi ~/environment/flask/adapter.wsgi

↓ 以下がファイルの中身
# coding: utf-8
import sys
sys.path.insert(0, '/var/www/cgi-bin/flask')

from main import app as application

Cloud9でアクセスしやすい場所にflask用のディレクトリを作成

$ mkdir ~/environment/flask

Apacheのドキュメントルートを作成

$ sudo mkdir /var/www/cgi-bin/flask

flaskモジュールをApacheドキュメントルートに配置 今後デプロイする際にバッチ実行で簡単に配置できるようにする。

$ mkdir ~/environment/flask/tools
$ vi ~/environment/flask/tools/deploy.sh

↓ 以下がファイルの中身
sudo cp -ra /home/ec2-user/environment/flask/* /var/www/cgi-bin/flask
sudo service httpd restart

shellが作成出来たら、実行してモジュールを配置する。

$ sh ~/environment/flask/tools/deploy.sh

Apacheにmod-wsgiを使用するよう設定

Apacheの設定ファイルを作成する

$ sudo vi /etc/httpd/conf.d/flask.conf

↓ファイルの中身

LoadModule wsgi_module /home/ec2-user/.local/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so


  ServerName flask
  DocumentRoot /var/www/cgi-bin/flask
  WSGIScriptAlias / /var/www/cgi-bin/flask/adapter.wsgi
  
    options -Indexes +FollowSymLinks +ExecCGI
  

Apacheの再起動

$ sudo service httpd restart

Cloud9のセキュリティグループに80ポートへのアクセス許可を追加

EC2ダッシュボード > Cloud9のEC2を選択 > セキュリティグループ > インバウンド

アクセスして確認してみる

EC2ダッシュボード > Cloud9のEC2を選択 > パブリックIPを確認し、
ブラウザから「http://[パブリックIP]/」にアクセスする。

「Hello, Flask!」が表示されていればよい。

何かしらエラーが発生している場合はApacheログ(var/log/httpd配下)を確認してエラーを確認する。

おわりに

ここまでで、Cloud9上でflaskアプリを動作させ、ブラウザ上から確認することができた。

Spread the love