テックチームのトムです。
前回予告していた、ソースで入れるPython環境の構築について書きます。
その前に
Pythonのすすめ
最近Pythonは人気です。
http://news.mynavi.jp/news/2015/10/03/068/
http://news.mynavi.jp/news/2015/10/06/077/
3年前と比べるとPythonへの関心がかなり増えています。
Pythonは汎用言語なので、WebシステムやLinuxコマンド以外にも、TornadoでWebsocket、numpyで機械学習、Kivyを使ってスマホアプリとデスクトップアプリなど、Pythonが使われるところはこれからも増えていきそうです。
関西でもPythonユーザーを増やさなければいけません!
インストールするもの
Python3
LinuxやMacにはデフォルトでPython2.6か2.7がインストールされていますが、これからはPython3で開発していくのが主流になるため、Python3系をインストールします。
Nginx
NginxはApacheの変わりのWebサーバーです。
nginScriptというものもでてきました。
uWSGI
uWSGIはコンテナサーバーです。
WSGIが「WebサーバーとWebアプリ(フレームワーク)間の共通インターフェイスを定義したもの」と書かれています。
WebサーバーとWebアプリの間に挟まる「何か」ですね。
とりあえずPythonコードを書き換えた場合、変更を適用するにはこのuWSGIを毎回再起動しなければなりません。
静的ファイルだけを書き換えた(変更にPython変数などを新たに追加しない)場合は、再起動する必要はありません。
コンテナサーバーというと、Pythonオブジェクトを入れとくコンテナ?コードキャッシュのコンテナ?
などと思っていましたが、アプリケーションを常駐させるもののようです。詳しくはわかりませ~ん。
Django
Djangoはフレームワークです。10年の歴史があり機能が豊富です。O/Rマッパーのメソッドは、select_relatedやbulk insertにも対応しています。レンダリング速度も速いです。
インストール
※ディストリビューションはCentOS6系を対象にしています。(現在のAWSLinux含む)
※うまく入らない場合は、エラーで検索して他の依存関係等を解決してください。
先に必要なものをインストール
yum install -y wget make gcc gcc-c++ patch perl perl-devel perl-ExtUtils-Embed perl-Data-Dumper ncurses-devel openssl-devel man man-pages-ja bind-utils openssh-clients mailx
Pythonインストール
https://www.python.org/downloads/source/でtarファイルのURLをコピー。
※バージョン3.4.3を対象とします。
cd /usr/local/src wget https://www.python.org/ftp/python/3.4.3/Python-3.4.3.tar.xz tar Jxvf Python-3.4.3.tar.xz cd Python-3.4.3 ./configure make make install
- configureのオプションは調べて必要であればつけてください。何もつけなくてもスタンダードな利用には使えます。
- Python3.4からはpip3が自動でインストールされています。
Nginxインストール
groupadd -f -g 10080 nginx useradd -u 10080 -g nginx -s /sbin/nologin -M nginx
- グループとユーザーを作っておきます。
- 10080は使われてないIDであれば何でもいいです。
yum install -y pcre pcre-devel libxslt libxslt-devel gd gd-devel httpd-tools GeoIP GeoIP-devel
- Nginxをインストールするのに必要なものをyumでインストールしておきます。
http://nginx.org/en/download.htmlでMainline versionのtarファイルのURLをコピー。
※バージョン1.7.11を対象とします。
cd /usr/local/src wget http://nginx.org/download/nginx-1.7.11.tar.gz' tar zxvf nginx-1.7.11.tar.gz cd nginx-1.7.11 ./configure --prefix=/usr/local/nginx1.7 --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module --with-http_perl_module --with-http_geoip_module --with-ld-opt="-Wl,-E" --with-file-aio --with-ipv6 --with-pcre make make install
- 各オプションを付ける付けない自由です。必要であれば追加してください。
uWSGIインストール
※バージョン2.0.10を対象とします。
http://uwsgi-docs.readthedocs.org/en/latest/Download.htmlでtarファイルのURLをコピー。
cd /usr/local/src wget http://projects.unbit.it/downloads/uwsgi-2.0.10.tar.gz tar zxvf uwsgi-2.0.10.tar.gz cd uwsgi-2.0.10 UWSGI_BIN_NAME=uwsgi python3 uwsgiconfig.py --build
- UWSGI_BIN_NAMEでuwsgiの実行ファイル名を決めています。
- python3でuwsgiconfig.pyを実行することで、上記でインストールした/usr/local/bin/python3を使って、Python3用のuwsgi実行ファイルを作成します。
- 作成する実行ファイル名を変えPythonバージョンを変更すれば、各バージョンのuwsgiファイルを作成することができます。
Djangoインストール
※バージョン1.8.2を対象とします。
https://www.djangoproject.com/download/でtarファイルのURLをコピー。
cd /usr/local/src wget --trust-server-names https://www.djangoproject.com/download/1.8.2/tarball/ tar zxvf Django-1.8.2.tar.gz cd Django-1.8.2 python3 setup.py install
- Django1.8系2015年4月頃にリリースされ、3年間サポートされます。
- –trust-server-namesは、URLがtar.gzなどになっていないリダイレクト先が設定されている場合につけます。
- python3で実行することで/usr/local/bin/python3を使い、/usr/local/lib/python3.4/site-packagesにDjangoをインストールします。
インストールは以上で完了です。mysqlやcronologのインストールはここではやりません。
PHP+Apacheをソースでインストールするのと違い、ソースでインストールしてもとてもシンプルでした。
まとめ
ライブラリのインストールはyumやpipを使っていますが、普段メインで使うミドルウェアはソースで入れるのがいいですね。
なぜいいのかというと、最新バージョンを利用できたり、ソースで入れないと入らない場合のために慣れておく必要があるためです。他にもバージョンの共存が可能、必要なものだけ最小でインストールできるといったメリットがあります。
デメリットは、コンパイルに時間が掛かかったり、すんなり入らない時はかなり調べたり色々試したりとコストが掛かります。コストは掛かりますが一つ一つ乗り越えることで、一人で解決できる力がつくと思います。
初級向けの記事になってしまいましたが、次回は今回インストールしたミドルウェアやフレームワークの設定をします。
see you next month.