ServersMan@VPS Ubuntu に WSGI をいれてpython を動かす

スポンサーリンク

ServersMan で Python を活用したい

特にこれといった目的があるわけじゃないのですが。

久しぶりに Python を使ってみようかと思い立ったので。

ServersMan でレンタルしている VPS サービスで Python を使うときのお話です。

PHP に慣れていると、特に何もしなくても CGI として動いてくれるサーバーはいくらでもあります。

まあ、最近は Python も対応してくれているサーバーも多いですが。

とはいえ、VPS で何かと使いやすいようにカスタマイズしたかったりもするので。

ちょっと、面倒くさい話しではあるんですが。Python を PHP の用に使うとなると、ちょっと設定が必要になるので、その備忘録です。

ServerMan@VPS を使う理由って?

どんなサービスにも「良い面、悪い面」あるわけですが。

個人的に現在 VPS サービスはこの「ServerMan@VPS」を利用している理由としては

価格

です。



安いので個人的には「実験用」として使っています。

そのほか、もろもろ、勉強用とかですね。

なので、web サービスを立ち上げて公開するというような事は考えていません。

実際そうなると安定性やらサービスと言う点からもう少し、上のサービスを考えるかも知れません。

しかし、とりあえず VPS サービスを使ってみたい!

という場合には、ServersMan のような格安サービスはお勧めです。

月額 467円と言うのは、取っつきやすい価格だと思います。



概要

とりあえず、Python を CGI として動かすには、mod_wsgi というツールを使って、Apache と連携することが必要です。

なので、今回の主な目的は「mod_wsgi のインストール&設定」になります。

まずは、Apache&Python を確認

今回は、ServerMans@VPS の契約から、セッティングまでは割愛。

一通り完了した状態からスタート。

mod_wsgi をインストールするための事前確認として、Apache と Python の環境を確認。

とりあえず、Apache を確認。

入ってないということは無いと思いますが念の為。

ちなみに今回は、cent OS ではなく、Ubuntu を選択しています。現状日本では Cent OS の方が使われているようですが・・・。

【conoha ブログ】

こんにちは、ひろのぶです :) 皆さんは普段、どんなOS/アプリケーションを使っていますか?ご存じの通り、ConoHaにはさまざまなOS/アプリケーションのイメージが用意されており、すぐにサーバー(デスクトップでももちろ …

海外では、思った以上に Ubuntu 多いんですね。

それは良いとして、Ubuntu での Apache の確認は、

apache2 -v

となります。ちなみに Cent OS だと

httpd -v

となるみたいです。

そうすると、

Server version: Apache/2.4.7 (Ubuntu)
Server built:   Jul 22 2014 14:36:38

と、バージョン情報などが帰ってきます。

現在の VPS には、2.4.7 が入っているということですね。

Python のバージョンを確認

python --version

と、すると

Python 2.7.6

と表示されます。

python3 --version

と、すると

Python 3.4.0

と、出てきます。

2種類存在しています。

3.5 へ変更してもいいのですが、一旦ここでは python を CGI で動かすことが目的なので、とりあえず 3.4 のまま進行。

mod_wsgi も Python 3.4 で使えるようにします。

Developer ツールをインストールする

Apache も Python も入っているのですが、このまま進んでも mod_wsgi のインストールでエラーが発生します。

理由は Developer ツールがないため。

よって、事前にそれぞれ、Developer ツールをインストールします。

まずは、Apache。

sudo apt-get install apache2-dev

次は Python です。

sudo apt-get install python3-dev

以上で完了です。

Python3 を使う前提なので、「python3-dev」です。

Python のパッケージ管理システム「pip」をインストール

python を CGI で実行するために、mod_wsgi をインストールしたいのですが、どうやら python のパッケージ管理システムである「pip」を使うと簡単にインストールできるらしいです。

以前、よく Python を使っていた時は、「easy_install」というのがあったんですが、今はこの「pip」に置き換えが進んでいるそうな。

ということで、pip を導入。

pip は、導入済み?

公式ページを見に行ったところ。

The PyPA recommended tool for installing Python packages.

pip is already installed if you’re using Python 2 >=2.7.9 or Python 3 >=3.4 downloaded from python.org, but you’ll need to upgrade pip.

ん?すでにデフォルトで入ってる?

と、思ったんですが、「pthon.org」からダウンロードしてインストールしたものについては。という限定的なもののようです(インストール時に指定して一緒にインストールする?)。

なので、VPS で用意されているような OS の Python には入っていない?。

少なくとも、ServersMan@VPS には入ってませんでした。

なので、やっぱりインストールしないとダメ。

インストールするには、「get-pip.py」をダウンロードして実行します。

こちら、公式ページにリンクが公開されています。

curl でファイルを取ってきて、それを python で実行します。

sudo ではエラー

curl と python の実行を行ったところ、sudo コマンドではパーミッションエラーが発生。

PermissionError: [Errno 13] Permission denied: '/usr/local/lib/python3.4/dist-packages/pip-8.1.1.dist-info'

権限が無いと怒られてしまうので、一旦 su で「スーパーユーザー」になってから実行すると、インストールされます。

su
curl https://bootstrap.pypa.io/get-pip.py | python3

と行った感じです。

最後の python は 2 系の場合は、’3′ は不要です。

使いたいバージョンによって選ぶと良いと思います。

上記コマンドを実行すると、pip の他に setuptools と wheel もインストールされます。

これらも pip 同様 python パッケージを管理してくれるもののようです・・・。

setuptools が以前の easy_install ? wheel(以前の Egg の代わり?) もパッケージ管理ツールのようですが・・・。

easy_install 一択だったユーザーとしては現状その役割が「?」ではありますが、依存などありそうなのでここはひとまず、これでよしと。

本題の mod_wsgi をインストール

今回の本題である mod_wsgi をインストールします。

pip 経由でインストールします。

sudo pip install mod_wsgi

で、インストール開始です。

locale error

インストールしようとすると、次の問題が。

locale.Error: unsupported locale setting

言語環境がどうもサポートされていないようです。

新しい locale を設定してあげると解決しそうです。

ということで、

unset LC_ALL
export LC_ALL=C

一旦、アンセットしてもう一回設定(しなくても良さそうですが)。

こうすると、locale を正確に認識してくれます。

再度、mod_wsgi をインストールすると完了です。

locale の対処がこの方法で正しいのか自信はありませんが、以上の手順で一通りインストールが完了しました。

mod_wsgi-express を活用する

さて、ここから Apache と mod_wsgi を連動させないといけないわけですが。

いまの mod_wsgi には便利なツール mod_wsgi-express なるものが存在します。

インストールが終わったら、試しに

mod_wsgi-express start-server

と、実行してみます。(環境によっては sudo が頭に必要かも?)

と、すると。

Server URL         : http://localhost:8000/
Server Root        : /tmp/mod_wsgi-localhost:8000:1000
Server Conf        : /tmp/mod_wsgi-localhost:8000:1000/httpd.conf
Error Log File     : /tmp/mod_wsgi-localhost:8000:1000/error_log (warn)
Request Capacity   : 5 (1 process * 5 threads)
Request Timeout    : 60 (seconds)
Queue Backlog      : 100 (connections)
Queue Timeout      : 45 (seconds)
Server Capacity    : 20 (event/worker), 20 (prefork)
Server Backlog     : 500 (connections)
Locale Setting     : C.UTF-8

と言った感じで、mod_wsgi が動きます。

ServersMan@vps で指定された アドレスにポート 8000 でアクセスしてみます。


でアクセスすると

mod_wsgi-python

といった感じで、動いていることが確認できます。

この他、詳しいことは公式サイト(英語)などが詳しいです。

【mod_wsgi】

【python.org】

Installer for Apache/mod_wsgi.

ココまでできたら、あとはいろいろ設定したり、実際のアプリケーションを作って行けそうです。

ちなみに実行を止める場合は、ショートカットキーで「CTRL + c」で終了できます。

root で mod_wsgi-express を実行

ServersMan@vps の Apache は「80」が、デフォルトのポートです。

アドレスの後に、「:8000」とか付けて運用したくない!

ということもあると思います。

その場合は、一旦、Apache 自体をストップして、mod_wsgi-express から起動し直す必要があります。

sudo /etc/init.d/apache2 stop
sudo mod_wisgi-express start-server --port80 --user [user_name] --group [group_name]

となります。

オプションで付ける user_name と group ですが、こちら Apache で設定されたものを記入します。

ServersMan@vps では「ログインユーザー」と同じものが使われています。

なので、SSH でログインしたら

whoami //ユーザーネーム

groups //ユーザーのグループ

と、それぞれのコマンドを叩けば判ります。

まあ、ユーザーネームはログイン時にも使っているので判ると思いますが。

group がピンと来ないという場合もあると思います。

mod_wsgi-express の止め方が不明?

コマンド上で実行した mod_wsgi-express ですが、すぐに止めるならショートカットキー「CTRL + c」で止める事が出来ます。

しかし、一旦動かしたまま SSH の接続を解除すると止める方法が全く不明のままです。

ドキュメントも見ているのですが、いまいち謎。

仕方がないので一旦、kill しました。

pidof apache2 //pid を検索
sudo kill [pid]

pid を調べて、それを kill します。

こういう方法以外でも止め方あると思うんですが・・・。

ここはもうちょっと調べてみたいと思います。

スポンサーリンク

シェアする

フォローする

スポンサーリンク