« Time Machineの保存先をAS-202TEにしたときの保存容量を制限する方法 | トップページ | AS-202TEにTracをインストールする »

2017.09.19

AS-202TEにmod_wsgiをインストールする

AS-202TEでpythonで作成したWebアプリケーションを実行するためには、apache 2にmod_wsgiモジュールを組み込むことが便利です。

 

ただし、ADMには標準でmod_wsgiが組み込まれておらず、また、このモジュールを手動で組み込むためには、工夫が必要です。
ここでは、その手順を記載しておきます。

 

前提は、
NAS製品は、AS-202TE
OSは、ADM 3.0.0.R8N2
また、App Central経由で、Entware-ngをインストールしています。必要であれば、AS-202TEをADM3にアップデートしてEntware-ngを使ってみるを参考にして下さい。

 

また、この記事の前提として、プリインストールされたapache 2を新たに上書いたりしないことにします。標準サービスに組み込まれており、メンテナンスに影響を与えたくないためです。

ADM3に組み込まれているApacheはすべてのファイルが揃っていないようで、Apacheのモジュールをmakeするためには、apache 2一式をmakeする必要があります。この時点で、結構面倒な予感がしますが、とにかくやってみます。

 

ADM 3.0.0.R8N2では、Apacheが2.2.31から2.4.25にアップデートされました。

 

まず、apache 2一式をmakeします。
ホームディレクトリに、apache 2のソースをダウンロードします。Apacheを2.4.25に合わせてないところが気になりますが、結果的に動いたので、まあ、いいとします。


# wget http://ftp.riken.jp/net/apache/httpd/httpd-2.4.27.tar.gz
# tar xvzf httpd-2.4.27.tar.gz
# wget https://httpd.apache.org/dev/dist/httpd-2.4.27-deps.tar.gz
# tar xvzf httpd-2.4.27-deps.tar.gz
# cd httpd-2.4.27
# ./configure --prefix=[ホームディレクトリ内のワークディレクトリ]/apache2

すると、pcreが不足しているというエラーが出ました。


# wget https://ftp.pcre.org/pub/pcre/pcre-8.41.tar.gz
# tar xvzf pcre-8.41.tar.gz
# cd pcre-8.41
# ./configure
# make
# make install

再度、apache 2のmakeを実施します。


# cd [ホームディレクトリ内のワークディレクトリ]/httpd-2.4.27
# ./configure --prefix=/root/work/201706/apache2
# make
# make install

 

ようやく、mod_wsgiをmakeできる環境が整いました。ワークディレクトリ内にmod_wsgiのソース(https://github.com/GrahamDumpleton/mod_wsgi/archive/4.5.18.tar.gz)をダウンロードしました。wgetで直接持ってこれなかったので、ブラウザでダウンロードしてワークディレクトリにコピーしました。


# tar xvzf mod_wsgi-4.5.18.tar.gz
# cd mod_wsgi-4.5.18
# ./configure --with-apxs=[ホームディレクトリ内のワークディレクトリ]/apache2/bin/apxs --with-python=/usr/local/bin/python
# make

[ホームディレクトリ内のワークディレクトリ]/mod_wsgi-4.5.18/src/server/.libsにmod_wsgi.soが作成されます。
しかし、本来は、


# ldd src/server/.libs/mod_wsgi.so
linux-gate.so.1 (0xffffe000)
libpython2.7.so.1.0 => /usr/local/AppCentral/python/lib/libpython2.7.so.1.0 (0xb750b000)
libdl.so.2 => /opt/lib/libdl.so.2 (0xb7506000)
libpthread.so.0 => /opt/lib/libpthread.so.0 (0xb74ea000)
libutil.so.1 => /opt/lib/libutil.so.1 (0xb74e6000)
libm.so.6 => /opt/lib/libm.so.6 (0xb749a000)
libgcc_s.so.1 => /opt/lib/libgcc_s.so.1 (0xb747e000)
libc.so.6 => /opt/lib/libc.so.6 (0xb7319000)
libssl.so.1.0.0 => /usr/lib/libssl.so.1.0.0 (0xb72b2000)
libcrypto.so.1.0.0 => /usr/lib/libcrypto.so.1.0.0 (0xb70e1000)
/opt/lib/ld-linux.so.2 (0xb7745000)

となるところですが、この時点では、いくつかがnot foundになります。ちゃんと、必要なライブラリの位置を教えてあげる必要があるんですね。


# LD_LIBRARY_PATH=/usr/local/AppCentral/python/lib:/usr/lib make

のようにmakeしてlddすると、無事に上述したとおりのmod_wsgi.soが作成されました。このmod_wsgi.soを/root/lib/apache2配下に置きます(場所は任意ですが、再起動時に初期化されない場所に置く必要があります)。

 

次に、mod_wsgiのためのconfigファイルを作成します。


LoadModule wsgi_module /root/lib/apache2/mod_wsgi.so
WSGIScriptAlias /hello /volume1/Web/wsgi/hello.wsgi
<Directory /volume1/Web/wsgi/>
Require all granted
</Directory>

をwsgi.confとして作成します。
次に、/usr/builtin/etc/apache2/mods_availableにこのファイルへのシンボリックリンクを作成し、さらに/usr/builtin/etc/apache2/mods_enabledにmods_available内のwsgi.confへのシンボリックリンクを作成します。これで、apache2再起動時にmod_wsgiモジュールがロードされます。

 

mod_wsgi公式サイトに記載されているサンプルプログラム


def application(environ, start_response):
status = '200 OK'
output = b'Hello World!'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]

を/volume1/Web/wsgi/hello.wsgiとして作成します。実行属性を忘れずに付けましょう。

 

最後に、wsgiサンプルを実行してみましょう。
wsgi.confの


WSGIScriptAlias /hello /volume1/Web/wsgi/hello.wsgi

の記述により、DocumentRootのwsgi/hello.wsgiをAS-202TEのドメイン名に/helloを付加したURLで実行することができるようになります。
そして、http://as-202te-xxxx.local/helloをブラウザで参照して、Hello World!と表示されたら成功です。

|

« Time Machineの保存先をAS-202TEにしたときの保存容量を制限する方法 | トップページ | AS-202TEにTracをインストールする »

NAS」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: AS-202TEにmod_wsgiをインストールする:

« Time Machineの保存先をAS-202TEにしたときの保存容量を制限する方法 | トップページ | AS-202TEにTracをインストールする »