はじめに
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アプリを動作させ、ブラウザ上から確認することができた。