apache に django の web アプリをデプロイしてみよう
OSC 2018 Tokyo/Spring
東京エリア Debian 勉強会/Debian JP Project
第 160 回出張勉強会
杉本 典充
dictoss@live.jp

2018 年 02 月 24 日

AgendaDebian と Debian JP について
Debian と web サーバ
Debian で Django な web アプリを動かす
実行環境
web サーバ、WSGI サーバのインストール
web アプリケーションの配置
mod wsgi の設定
apache2 の設定
動作確認

まとめ
今後のイベントと情報入手先

Debian と Debian JP についてDebian とは？
https://www.debian.org/
Debian はフリー/オープンなオペレーティングシステム(OS) を作成しようとするボランティアベースのプロジェクト。
自分たちの考えるフリーという言葉に関する定義、開発目的、パッケージングポリシーを厳格に決めている。
世界中に 1000 人以上の開発者がおり、他のディストリビューションのベースとして採用。
約 2 年毎にリリースが行われ、多くのパッケージとアーキテクチャをサポート。
年に一度、Debconf という開発者が集うイベントがある。Debconf18 は 7/21-7/27 に台湾で開催予定。
サーバ、PC、組み込みなど様々なところで利用されている Linux ディストリビューション。

Debian JP Project と Debian 勉強会
Debian JP Project
https://www.debian.or.jp/
日本で Debian を普及させることを目的とした任意団体。
Debian の日本語による情報発信、ユーザとの情報交換、Debian 開発者、パッケージメンテナの育成など。

Debian 勉強会
2005 年 1 月開始。
東京と関西で毎月開催している Debian 開発者、ユーザによる勉強会。
https://tokyodebian.alioth.debian.org/
https://wiki.debian.org/KansaiDebianMeeting
東京エリアは第 3 土曜日、関西エリアは第 4 日曜日に開催することが多い。

Debian と web サーバ

Debian の web サーバで言われること

web サーバ用途で Debian はあまり使われていないのではないか
web サーバのパッケージは多数あり、どれをインストールするとよいのかわからない
web サーバの設定ファイルのディレクトリ構造が RHELや tarball でインストールしたときと異なるためよくわからない
そんな疑問にお答えするため、今回は debian 9 の apache2
及び python の Web アプリケーションサーバ”WSGI”の設定についてお話しします。

web サーバになぜ Debian を選択するのかLinux の web サーバの稼働 OS シェア 1
1 位 Ubuntu 39.1 %2 位 Debian 30.8 %3 位 CentOS 20.6 %4 位 Red Hat 2.9 %月 100 万アクセス以上の web サイトの web サーバシェ
ア2
1 位 Apache 37.03 %2 位 nginx 30.46 %3 位 Microsoft IIS Web Server 9.57 %1https://w3techs.com/technologies/details/os-linux/all/all2
https://news.netcraft.com/archives/2018/01/19/
january-2018-web-server-survey.html

Debian の web サーバのパッケージ

apache2 (apache-2.4.25)
nginx (nginx-1.10.3、stretch-backports3 は nginx-1.13.3)
lighttpd (lighttpd-1.4.45)

3backports とは、安定版に比較的新しいソフトウェアを提供する仕組み

Debain の WSGI サーバのパッケージ
WSGI = Web Server Gateway Interface
PEP 333 にて定義 4
WSGI を実装した web アプリケーションサーバ
libapache2-mod-wsgi、libapache2-mod-wsgi-py3 パッ
ケージapache2 の拡張モジュール mod wsgi
apache2 のみ利用可能

uwsgi パッケージ
nginx、apache2 で利用可能

python-gunicorn、python3-gunicorn パッケージ
nginx、apache2 で利用可能

性能ベンチマークの例（2016 年 5 月）54

https://www.python.org/dev/peps/pep-0333/
https://blog.appdynamics.com/engineering/
a-performance-analysis-of-python-wsgi-servers-part-2/
5

Debian で Django な web アプリ
を動かす

実行環境
作成するアプリケーションの実行環境
Debian GNU/Linux 9 Stretch amd64
apache-2.4
mod wsgi-4.5
python-3.5
sqlite3
django-2.0 (deb パッケージを利用せず pip でインストール)

作成する実行環境の前提
virtualenv は使わず、システムワイドに python ライブラ
リをインストールする

情報
https://docs.djangoproject.com/ja/2.0/howto/
deployment/wsgi/modwsgi/

web アプリケーションの開発

Django のアプリケーション開発のチュートリアル
https://docs.djangoproject.com/ja/2.0/intro/

サンプルソースコード
https://github.com/dictoss/django-tutorialweb サーバ、WSGI サーバのインストール# apt update# apt install python3.5 python3-pip# apt install apache2 libapache2-mod-wsgi-py3# apt install sqlite3# pip3 install django==2.0.2

注意点
libapache2-mod-wsgi-py3 と libapache2-mod-wsgi はパッ
ケージの制約で片方しかインストールできない
つまり、mod wsgi では python2.7、python3.5 のアプリを同居できないweb アプリケーションの配置# apt install git$ git clone https://github.com/dictoss/django-tutorial.git$ cd django-tutorial/2.0$ su# mkdir -p /var/www/django-tutorial# cp -r mysite /var/www/django-tutorial/# chown -fR www-data:www-data /var/www/django-tutorialmod wsgi の設定（1）mod wsgi 全体の動作設定# vi /etc/apache2/mods-available/wsgi.conf

特に変更しなくても動きます。詳しい設定はこちら。66

http://modwsgi.readthedocs.io/mod wsgi の設定（2）mod wsgi におけるアプリケーションの動作モードは 2 種類 7
Daemon Mode（デフォルト）
Embedded Mode（WSGIRestrictEmbedded On を指定）
Table: mod wsgi の動作モードの比較―
メモリ使用量CPU 使用量性能

Embedded Mode
大大高アプリ再読み込み

restart apache2

apache MPM
7prefork

Daemon Mode中中中reload apache2
or touch wsgi.py
prefork
workerevent

http://modwsgi.readthedocs.io/en/latest/user-guides/
reloading-source-code.html

mod wsgi の設定（3）アプリケーション固有の設定（Daemon Mode 利用時の設定）# vi /etc/apache2/conf-available/wsgi_mysite.conf
Alias /static/polls ‘‘/var/www/django-tutorial/mysite/polls/static/polls’’<Directory ‘‘/var/www/django-tutorial/mysite/polls/static/polls’’>
Require all granted</Directory>
Alias /static/admin \‘‘/usr/local/lib/python3.5/dist-packages/django/contrib/admin/static/admin’’<Directory \‘‘/usr/local/lib/python3.5/dist-packages/django/contrib/admin/static/admin’’>Require all granted</Directory>
WSGIScriptAlias /mysite /var/www/django-tutorial/mysite/mysite/wsgi.py
WSGIDaemonProcess mysite user=www-data group=www-data \processes=2 threads=64 maximum-requests=256 \python-path=/var/www/django-tutorial/mysite \display-name=%{GROUP}WSGIProcessGroup

mysitemod wsgi の設定（4）もし virtualenv を使う場合は、WSGIDaemonProcessに”python-home”を指定する
WSGIDaemonProcess mysite user=www-data group=www-data \processes=2 threads=64 maximum-requests=256 \python-path=/var/www/django-tutorial/mysite \python-home=/path/to/dir \display-name=%{GROUP}WSGIDaemonProcess の詳細パラメータはドキュメント
参照 8

8

http://modwsgi.readthedocs.io/en/latest/
configuration-directives/WSGIDaemonProcess.html

apache2 の設定（1）
Debian の”/etc/apache2”ディレクトリの構成$ tree /etc/apache2/etc/apache2├── apache2.conf├── conf-available│├── （設定ファイルを保存）├── conf-enabled│├── （設定ファイルの有効/無効設定を保存）├── envvars├── magic├── mods-available│├── （拡張モジュールの設定ファイルを保存）├── mods-enabled│├── （拡張モジュールの有効/無効設定を保存）├── ports.conf├── sites-available│├── （VirtualHost の設定ファイルを保存）└── sites-enabled├── （VirtualHost の有効/無効設定を保存）

apache2 の設定（2）Debian の”/etc/apache2”ディレクトリの解説
apache2.conf, envvars, magic, ports.conf
設定や環境変数を定義するファイル*-available ディレクトリ
conf、mods、site の 3 種類
設定ファイルの保存場所*-enabled ディレクトリ
conf、mods、site の 3 種類
有効/無効の設定の保存場所
a2enconf と a2disconf で conf の有効/無効を切り替え
a2enmod と a2dismod で mods の有効/無効を切り替え
a2ensite と a2dissite で sites の有効/無効を切り替えapache2 の設定（3）

作成した WSGI アプリケーションの設定を有効化# cd /etc/apache2# a2enconf wsgi_mysite
Enabling conf wsgi_mysite.
To activate the new configuration, you need to run:systemctl reload apache2

conf-enabled ディレクトリの状態を確認# cd /etc/apache2/conf-enabled# ls -l wsgi_mysite.conf
lrwxrwxrwx 1 root root 34 2 月 18 12:28 wsgi_mysite.conf ->../conf-available/wsgi_mysite.conf動作確認

設定を反映するため、apache2 を再起動
# systemctl restart apache2

プロセス確認# ps -ef | grep www | grep -v grep
www-data 6507 6506 0 3 月 18 ?
www-data 6508 6506 0 3 月 18 ?
www-data 6509 6506 0 3 月 18 ?
www-data 6510 6506 0 3 月 18 ?

00:00:00 (wsgi:mysite)-k start
00:00:00 (wsgi:mysite)-k start
00:00:00 /usr/sbin/apache2 -k start
00:00:00 /usr/sbin/apache2 -k start

アクセス確認http://localhost/mysite/polls/

まとめ

Debian 系 OS は web サーバとして多く利用されている
web サーバと WSGI サーバの deb パッケージの紹介apache2 ＋ mod wsgi のインストール方法
mod wsgi で動作するアプリケーションの設定ファイルの作成方法
debian の apache2 のディレクトリ構成の解説

今後のイベントと情報入手先
第 132 関西 Debian 勉強会
2018/02/25（日） 13:30 - 17:00
大阪 福島区民センター
https://wiki.debian.org/KansaiDebianMeeting/20180225

第 161 回東京エリア Debian 勉強会
2018/03/24（土） 14:00 - 18:00
http://tokyodebian.alioth.debian.org/2018-03.html

Debian ProjectWeb サイト https://www.debian.org/
Debian Wiki https://wiki.debian.org/ja

Debian JP ProjectWeb サイト https://www.debian.or.jp/
Twitter @debianjp, @debian jp
雑誌 Software Design 「Debian Hot Topics」