はじめに
簡単なWebサービス新しく立ち上げるにあたり、勉強を兼ねて Python を使うことにしたので、その環境構築用のメモとして残す。ほとんど、他の記事を寄せ集めただけなのだけど、mod_wsgiのインストールで少し手間取ったので念のため。
参考:PythonのWebフレームワーク4種比較
https://qiita.com/Morio/items/8db3c9b3ba7f2c71ef27
AWS (EC2) + Apache2
下記のサイトを参考にしてテスト用のEC2サーバのインスタンスを作成後、Apache2 をインストール・起動します。なお、現時点(2017/12/06)でのバージョンは、2.2.34だった。
参考:AWS EC2でWebサーバーを構築してみる
https://qiita.com/Arashi/items/629aaed33401b8f2265c
#Python3 + pip3
下記のサイトを参考にして Python3 をインストールし、pip を設定。現時点(2017/12/06)では、python3.6がリリースされているので、3.5ではなく3.6をインストール。
参考:Amazon Linux (EC2)上でPython3と...
https://qiita.com/KeijiYONEDA/items/f9cf37cfc359aa893797
※「3.5」は「3.6」に、「35」は「36」に読み替え
sudo yum install python36-devel python36-libs python36-setuptools
sudo /usr/bin/easy_install-3.6 pip
#Flask + mod-wsgi
Flask のインストールは簡単。下記のサイトの最初の5分だけを実行すれば、Hello Flask! を表示するWebサイトは完成!
参考:PythonのFlaskを初めて触ってから30分で...
https://qiita.com/yoshizaki_kkgk/items/3cd785b4a670deec0685
※ 環境構築からHello Flask!まで(5分)だけを実行
・・・でも今回は Apacheサーバを利用するので、mod_swgi のインストールが必要となる。だけど、上記サイトの次の10分以降に書いてあるようにソースから configure・make なんて 前時代的 というか 面倒くさい というか、難しいことは避けたいので、pipに頼ることにする
pip3 install mod-wsgi
このコマンドでインストールできそうなのだけど、下記のエラーが出て前に進まなくなった。apxs って何さ?
Collecting mod_wsgi
Using cached mod_wsgi-4.5.22.tar.gz
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-build-4lb9c3ll/mod-wsgi/setup.py", line 301, in <module>
INCLUDEDIR = get_apxs_config('INCLUDEDIR')
File "/tmp/pip-build-4lb9c3ll/mod-wsgi/setup.py", line 273, in get_apxs_config
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
File "/usr/lib64/python3.6/subprocess.py", line 707, in __init__
restore_signals, start_new_session)
File "/usr/lib64/python3.6/subprocess.py", line 1333, in _execute_child
raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: 'apxs'
apxs = Apache extension tool
ググってみたら、apxs は「APache eXtenSion tool」のことだそうで、apache-dev に含まれるそうな。早速、以下のコマンドで apache-dev をインストール。しかし、省略難しすぎ。
sudo yum install httpd-devel
これで大丈夫!と思ったけど、次は、gcc が入っていなくて怒られました。仕方ないので、gcc を yum 経由でインストール。
sudo yum install gcc
sudo /usr/local/bin/pip3 install mod_wsgi
#デプロイ
必要なものは揃った!ってことで、Apache の設定とサンプル用のサイトを作ってみる。
サイトの作成
Hello Flask!をそのまま流用させていただく。
# coding: utf-8
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, Flask!"
if __name__ == "__main__":
app.run()
swgi ファイル
Apache というか、mod_swgiに読み込ませるファイルを作成
# coding: utf-8
import sys
sys.path.insert(0, '/var/www/flask')
from app import app as application
Apacheの設定
Apache の conf.d に設定ファイルを追加し、app.py と adapter.wsgi が有効になるように設定。
# /etc/httpd/modules には配置されないので指定が必要
LoadModule wsgi_module /usr/local/lib64/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
<VirtualHost *:80>
ServerName ec2-xxxxxxx.amazonaws.com:80
DocumentRoot /var/www/flask
WSGIScriptAlias / /var/www/flask/adapter.wsgi
<Directory "/var/www/flask/">
options Indexes FollowSymLinks +ExecCGI
</Directory>
</VirtualHost>
まとめ
python3、pip 辺りは他にも利用するだろうから、すでにインストールされている場合が多そう。なので、実質面倒なのは Apache(mod_wsgi)の設定周りかな。パッケージ化が進んでいると思っていたし、yum / pip といった便利なものがあるにも関わらず、gccが必要になるとは思わなかった。
次は、flask + DataBase + Template Engine ってとこかな。