【さくらVPS】【Python】Django で Web アプリを作る(Apache、mod_wsgi、Django、Python 3.6)【Part.11】

今回は今まで作成した Web アプリケーションを元に「ToDo」アプリを作成します。

何度も繰り返しアプリを作成することで「型」が分かってきます。

 

以下、今までの作業です。

【さくらVPS】【Python】Django で Web アプリを作る【Part.1】

 

【さくらVPS】【Python】Django で Web アプリを作る(Let’s Encrypt SSL証明書設定)【Part.2】

 

【さくらVPS】【Python】Django で Web アプリを作る(Djangoインストール&設定)【Part.3】

 

【さくらVPS】【Python】Django で Web アプリを作る(Webアプリ構築編)【Part.4】

 

【さくらVPS】【Python】Django で Web アプリを作る(Webアプリ構築編)【Part.5】

 

【さくらVPS】【Python】Django で Web アプリを作る(Webアプリ設定編)【Part.6】

 

【さくらVPS】【Python】Django で Web アプリを作る(Webアプリ構築編)【Part.7】

 

【さくらVPS】【Python】Django で Web アプリを作る(メッセージ登録&表示アプリ編)【Part.8】

 

【さくらVPS】【Python】Django で Web アプリを作る(カスタマイズ編)【Part.9】

 

【さくらVPS】【Python】Django で Web アプリを作る(ToDoアプリ編)【Part.10】

 

 

Webアプリを作る場合はレンタルサーバーより「VPS」の方が自由度が高いのでお勧めです。

ちなみに、「さくらのVPS」は価格が安くてスペックがいいです。

 

 

 

さくらのVPSのスペックです。

[test@SAKURA_VPS ~]$ cat /proc/cpuinfo | grep processor
processor       : 0
[test@SAKURA_VPS ~]$ cat /proc/meminfo | grep MemTotal
MemTotal:         500208 kB

 

月額    : 685円~

ディスク: SSD 20GB

CPU     : Intel Xeon CPU E5-2650v2 @ 2.60GHz 1個

メモリ  : 512MB

【さくらVPS】【Python】Django で Web アプリを作る(カスタマイズ編)【Part.9】

 

 

前回まで作成した ToDo アプリを本番環境に展開する

前回まで作成した ToDo アプリを本番環境(インターネット上)に展開します。

そのため誰からもアクセスできるようになるので、若干危険です(笑)

とは言っても定期的に停止したり、サービスとして運用せずに Web アプリ開発のためなので一時的に本番環境への展開の仕方を解説します。

 

開発環境は「http://127.0.0.1:8000」のみアクセス可能

今までは開発環境で Web アプリを作成していましたが、ローカル内での公開のみでした。

http://127.0.0.1:8000のみアクセス可能です。

そのためサーバーにデスクトップ環境(GUI)でログインをしてブラウザを起動して確認する必要があります。

 

今回はこの Web アプリをインターネットに公開する手順について解説します。

 

どうすれば Django の Web アプリをインターネット経由でアクセスできるようにできるのか?

最初は何をどうすればいいのか全く分かりませんでした。

試行錯誤をしながら設定をしています。

 

調査をすると、以下の設定が必要です。

 

  • Django
  • Apache
  • mod_wsgi
  • mod_python ← mod_python は Django 1.5 で取り除かれました。

 

古い情報も混ざっているので、最新の Django 環境に合せるようにする必要があります。

 

環境

今回の環境です。

  • CentOS7
  • Python3.6
  • venv
  • apache
  • mod-wsgi
  • mod-wsgi-httpd

 

 

作業まとめ

Django & Apache & mod_wsgi で外部公開するための設定について様々なサイトがあるので調べてみました。

各サイトで構成が異なったり、手順が異なっているため、初めに何の作業をしなければいけないのか手順をまとめました。

(随時追加)

 

  • httpd.conf に mod_wsgi のロードをする
  • Python3.6環境になるように設定する(いつの間にか Python 2.7.5 で動いていることがあるので注意)

 

 

疑問点

インフラ系エンジニアなので Django で開発をしている本職のプログラマーレベルではないので、調べているうちに様々な疑問が湧いています。

後で振り返ると、「そもそも何に対して疑問を持っていたっけ?」と忘れてしまうのでチンプンカンプンなことも含めて書き留めておきます。

  • 仮想環境で Web アプリを作成したが、仮想環境でも大丈夫?
  • いろいろなファイルはどこに置けばいいのか?
  • Django のプロジェクトは /home/test配下にあるが、これでいいのか?それとも/var/www配下にプロジェクトを作り直した方がいいのか?
  • mod_wsgi をインストールする場合、「yum install mod_wsgi」と「pip install mod_wsgi」ではどちらがいいのか? → 様々なサイトを確認すると、仮想環境で構築している人は、仮想環境内で「pip install mod_wsgi」を実行している → これが正解なのか分からない

 

 

runserverは使わない

今までは「python manage.py runserver」コマンドで開発用 Django サーバーを利用しましたが、runserver は使わずに Apache を利用します。

 

 

 

Djangoのバージョン確認

初めに Django のバージョン確認手順を紹介します。

Django のバージョンは「1.11.7」であることが分かります。

(pyenv) [test@SAKURA_VPS helloworld]$ python
Python 3.6.3 (default, Oct 11 2017, 18:17:37)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import django
>>> django.get_version() ← Djangoのバージョンを確認します。
‘1.11.7’
>>> django.VERSION ← Djangoのバージョンを確認します。
(1, 11, 7, ‘final’, 0)
>>>

 

 

 

mod_wsgi をインストールする

yum コマンドで mod_wsgi をインストールします。

→ 後程アンインストールする羽目になりましたが。。 

[root@SAKURA_VPS log]# yum install httpd-devel mod_wsgi
読み込んだプラグイン:fastestmirror, langpacks
base                                                                             | 3.6 kB  00:00:00
elrepo                                                                           | 2.9 kB  00:00:00
epel/x86_64/metalink                                                             | 4.8 kB  00:00:00
extras                                                                           | 3.4 kB  00:00:00
groonga                                                                          | 2.9 kB  00:00:00
ius                                                                              | 2.3 kB  00:00:00
mysql-connectors-community                                                       | 2.5 kB  00:00:00
mysql-tools-community                                                            | 2.5 kB  00:00:00
mysql57-community                                                                | 2.5 kB  00:00:00
updates                                                                          | 3.4 kB  00:00:00
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * elrepo: ftp.yz.yamagata-u.ac.jp
 * epel: ftp.riken.jp
 * extras: ftp.iij.ad.jp
 * ius: hkg.mirror.rackspace.com
 * updates: ftp.iij.ad.jp
依存性の解決をしています
–> トランザクションの確認を実行しています。
—> パッケージ httpd-devel.x86_64 0:2.4.6-67.el7.centos.6 を インストール
–> 依存性の処理をしています: apr-util-devel のパッケージ: httpd-devel-2.4.6-67.el7.centos.6.x86_64
–> 依存性の処理をしています: apr-devel のパッケージ: httpd-devel-2.4.6-67.el7.centos.6.x86_64
—> パッケージ mod_wsgi.x86_64 0:3.4-12.el7_0 を インストール
–> トランザクションの確認を実行しています。
—> パッケージ apr-devel.x86_64 0:1.4.8-3.el7 を インストール
—> パッケージ apr-util-devel.x86_64 0:1.5.2-6.el7 を インストール
–> 依存性の処理をしています: openldap-devel(x86-64) のパッケージ: apr-util-devel-1.5.2-6.el7.x86_64
–> 依存性の処理をしています: libdb-devel(x86-64) のパッケージ: apr-util-devel-1.5.2-6.el7.x86_64
–> トランザクションの確認を実行しています。
—> パッケージ libdb-devel.x86_64 0:5.3.21-20.el7 を インストール
—> パッケージ openldap-devel.x86_64 0:2.4.44-5.el7 を インストール
–> 依存性の処理をしています: cyrus-sasl-devel(x86-64) のパッケージ: openldap-devel-2.4.44-5.el7.x86_64
–> トランザクションの確認を実行しています。
—> パッケージ cyrus-sasl-devel.x86_64 0:2.1.26-21.el7 を インストール
–> 依存性解決を終了しました。

依存性を解決しました

========================================================================================================
 Package                    アーキテクチャー バージョン                         リポジトリー       容量
========================================================================================================
インストール中:
 httpd-devel                x86_64           2.4.6-67.el7.centos.6              updates           194 k
 mod_wsgi                   x86_64           3.4-12.el7_0                       base               76 k
依存性関連でのインストールをします:
 apr-devel                  x86_64           1.4.8-3.el7                        base              188 k
 apr-util-devel             x86_64           1.5.2-6.el7                        base               76 k
 cyrus-sasl-devel           x86_64           2.1.26-21.el7                      base              310 k
 libdb-devel                x86_64           5.3.21-20.el7                      base               38 k
 openldap-devel             x86_64           2.4.44-5.el7                       base              801 k

トランザクションの要約
========================================================================================================
インストール  2 パッケージ (+5 個の依存関係のパッケージ)

総ダウンロード容量: 1.6 M
インストール容量: 6.7 M
Is this ok [y/d/N]: y
Downloading packages:
(1/7): cyrus-sasl-devel-2.1.26-21.el7.x86_64.rpm                                 | 310 kB  00:00:00
(2/7): libdb-devel-5.3.21-20.el7.x86_64.rpm                                      |  38 kB  00:00:00
(3/7): apr-devel-1.4.8-3.el7.x86_64.rpm                                          | 188 kB  00:00:00
(4/7): httpd-devel-2.4.6-67.el7.centos.6.x86_64.rpm                              | 194 kB  00:00:00
(5/7): mod_wsgi-3.4-12.el7_0.x86_64.rpm                                          |  76 kB  00:00:00
(6/7): apr-util-devel-1.5.2-6.el7.x86_64.rpm                                     |  76 kB  00:00:00
(7/7): openldap-devel-2.4.44-5.el7.x86_64.rpm                                    | 801 kB  00:00:00
——————————————————————————————————–
合計                                                                    2.2 MB/s | 1.6 MB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : apr-devel-1.4.8-3.el7.x86_64                                            1/7
  インストール中          : libdb-devel-5.3.21-20.el7.x86_64                                        2/7
  インストール中          : cyrus-sasl-devel-2.1.26-21.el7.x86_64                                   3/7
  インストール中          : openldap-devel-2.4.44-5.el7.x86_64                                      4/7
  インストール中          : apr-util-devel-1.5.2-6.el7.x86_64                                       5/7
  インストール中          : httpd-devel-2.4.6-67.el7.centos.6.x86_64                                6/7
  インストール中          : mod_wsgi-3.4-12.el7_0.x86_64                                            7/7
  検証中                  : mod_wsgi-3.4-12.el7_0.x86_64                                            1/7
  検証中                  : apr-util-devel-1.5.2-6.el7.x86_64                                       2/7
  検証中                  : apr-devel-1.4.8-3.el7.x86_64                                            3/7
  検証中                  : cyrus-sasl-devel-2.1.26-21.el7.x86_64                                   4/7
  検証中                  : libdb-devel-5.3.21-20.el7.x86_64                                        5/7
  検証中                  : httpd-devel-2.4.6-67.el7.centos.6.x86_64                                6/7
  検証中                  : openldap-devel-2.4.44-5.el7.x86_64                                      7/7

インストール:
  httpd-devel.x86_64 0:2.4.6-67.el7.centos.6               mod_wsgi.x86_64 0:3.4-12.el7_0

依存性関連をインストールしました:
  apr-devel.x86_64 0:1.4.8-3.el7                       apr-util-devel.x86_64 0:1.5.2-6.el7
  cyrus-sasl-devel.x86_64 0:2.1.26-21.el7              libdb-devel.x86_64 0:5.3.21-20.el7
  openldap-devel.x86_64 0:2.4.44-5.el7

完了しました!
[root@SAKURA_VPS log]#

 

その後、仮想環境で「pip install mod-wsgi」を実施している人がいたので、マネをして以下のコマンドでインストールをします。

(正直言って何が正しいのか分からないため)

 

pip install mod-wsgiで致命的なエラー

仮想環境の状態で、pipコマンドで「mod-wsgi」のインストールを試しました。

(pyenv) [test@SAKURA_VPS todo_app]$ pip -V
pip 9.0.1 from /home/test/pyenv/lib64/python3.6/site-packages (python 3.6)
(pyenv) [test@SAKURA_VPS todo_app]$ pip install mod-wsgi
Collecting mod-wsgi
  Downloading mod_wsgi-4.5.20.tar.gz (2.5MB)
    100% |????????????????????????????????| 2.5MB 401kB/s
Installing collected packages: mod-wsgi
  Running setup.py install for mod-wsgi … error

 

~ 省略 ~

    gcc -pthread -Wno-unused-result -Wsign-compare -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong –param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include/httpd -I/home/test/pyenv/include -I/usr/include/python3.6m -c src/server/mod_wsgi.c -o build/temp.linux-x86_64-3.6/src/server/mod_wsgi.o -I/usr/include/httpd -I. -I/usr/include/apr-1 -DLINUX -D_REENTRANT -D_GNU_SOURCE -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong –param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -pthread -I/usr/include/apr-1 -I/usr/include/apr-1
    In file included from src/server/mod_wsgi.c:22:0:
    src/server/wsgi_python.h:24:20: 致命的エラー: Python.h: そのようなファイルやディ レクトリはありません
     #include 
                        ^
    コンパイルを停止しました。
    error: command ‘gcc’ failed with exit status 1

    —————————————-
Command “/home/test/pyenv/bin/python3.6 -u -c “import setuptools, tokenize;__file__=’/tmp/pip-build-v5i8lpux/mod-wsgi/setup.py’;f=getattr(tokenize, ‘open’, open)(__file__);code=f.read().replace(‘\r\n’, ‘\n’);f.close();exec(compile(code, __file__, ‘exec’))” install –record /tmp/pip-0pi3hd25-record/install-record.txt –single-version-externally-managed –compile –install-headers /home/test/pyenv/include/site/python3.6/mod-wsgi” failed with error code 1 in /tmp/pip-build-v5i8lpux/mod-wsgi/
(pyenv) [test@SAKURA_VPS todo_app]$

 

「そのようなファイルやディレクトリはありません」とエラーメッセージが表示されているので何かファイルが足りないようです。

python-develがインストールされていない可能性を考えて調べてみました。

 

 

 

すでに python-devel はインストール済みと思ったらバージョンが異なっていた

すでに「python-devel」はインストール済み。。と思ったら「バージョン」「2.7.5」でした。。

今回は python 3.6 を使用しています。

[root@SAKURA_VPS ~]# rpm -qa | grep python-devel
python-devel-2.7.5-58.el7.x86_64 ← python 3.6 ではなく「2.7.5」でした。
[root@SAKURA_VPS ~]#

 

 

python3.6のdevelをインストールする

以下のコマンドで各バージョンの Python の devel(development)を検索することができます。

[root@SAKURA_VPS yum.repos.d]# yum search python3 | grep devel
python34-greenlet-devel.x86_64 : C development headers for python34-greenlet
python34-devel.x86_64 : Libraries and header files needed for Python 3
                      : development
python34u-devel.x86_64 : Libraries and header files needed for Python 3
                       : development
python35u-devel.x86_64 : Libraries and header files needed for Python 3
                       : development
python36u-devel.x86_64 : Libraries and header files needed for Python
                       : development
[root@SAKURA_VPS yum.repos.d]#

 

検索した python の devel をインストールします。

[root@SAKURA_VPS yum.repos.d]# yum install python36u-devel.x86_64
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * elrepo: ftp.ne.jp
 * epel: ftp.riken.jp
 * extras: ftp.iij.ad.jp
 * ius: hkg.mirror.rackspace.com
 * updates: ftp.iij.ad.jp
依存性の解決をしています
–> トランザクションの確認を実行しています。
—> パッケージ python36u-devel.x86_64 0:3.6.3-1.ius.centos7 を インストール
–> 依存性解決を終了しました。

依存性を解決しました

========================================================================================================
 Package                     アーキテクチャー   バージョン                        リポジトリー     容量
========================================================================================================
インストール中:
 python36u-devel             x86_64             3.6.3-1.ius.centos7               ius             839 k

トランザクションの要約
========================================================================================================
インストール  1 パッケージ

総ダウンロード容量: 839 k
インストール容量: 2.6 M
Is this ok [y/d/N]: y
Downloading packages:
python36u-devel-3.6.3-1.ius.centos7.x86_64.rpm                                   | 839 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : python36u-devel-3.6.3-1.ius.centos7.x86_64                              1/1
  検証中                  : python36u-devel-3.6.3-1.ius.centos7.x86_64                              1/1

インストール:
  python36u-devel.x86_64 0:3.6.3-1.ius.centos7

完了しました!
[root@SAKURA_VPS yum.repos.d]#

 

 

再度 pip install mod-wsgi でインストール

python 3.6 用の devel をインストールしたので、再度仮想環境で「pip install mod-wsgi」コマンドを試します。

(pyenv) [test@SAKURA_VPS pyenv]$ pip install mod-wsgi
Collecting mod-wsgi
  Using cached mod_wsgi-4.5.20.tar.gz
Installing collected packages: mod-wsgi
  Running setup.py install for mod-wsgi … done
Successfully installed mod-wsgi-4.5.20
(pyenv) [test@SAKURA_VPS pyenv]$

 

 

mod-wsgi-httpd のインストール

必要かどうか分かりませんが(後ほど勉強する必要あり)、「pip install mod-wsgi-httpd」コマンドも実行します。

※インストールにかなり時間が掛かります。環境にもよりますが、5分~10分くら掛かります。じっくり待ちましょう。

(pyenv) [test@SAKURA_VPS pyenv]$ pip install mod-wsgi-httpd
Collecting mod-wsgi-httpd
  Downloading mod_wsgi-httpd-2.4.27.1.tar.gz (12.3MB)
    100% |????????????????????????????????| 12.3MB 102kB/s
Installing collected packages: mod-wsgi-httpd
  Running setup.py install for mod-wsgi-httpd … done
Successfully installed mod-wsgi-httpd-2.4.27.1
(pyenv) [test@SAKURA_VPS pyenv]$

 

 

site-packagesのパスを調べます。

(pyenv) [test@SAKURA_VPS pyenv]$ python -c “import sys; print(sys.path)”
[”, ‘/usr/lib64/python36.zip’, ‘/usr/lib64/python3.6’, ‘/usr/lib64/python3.6/lib-dynload’, ‘/home/test/pyenv/lib64/python3.6/site-packages’, ‘/home/test/pyenv/lib/python3.6/site-packages’]
(pyenv) [test@SAKURA_VPS pyenv]$

 

以下の6つのパスが表示されました。

  • カレントディレクトリ
  • /usr/lib64/python36.zip
  • /usr/lib64/python3.6
  • /usr/lib64/python3.6/lib-dynload
  • /home/test/pyenv/lib64/python3.6/site-packages ← lib64は「/home/test/pyenv/lib/python3.6/site-packages」へのリンクになっています。
  • /home/test/pyenv/lib/python3.6/site-packages

 

site-packagesのパスに移動します。

site-packagesのパスは2つありますが、どちらが正しいのか分からないので「lib」の方へ移動します。

(pyenv) [test@SAKURA_VPS server]$ cd /home/test/pyenv/lib/python3.6/site-packages
(pyenv) [test@SAKURA_VPS site-packages]$ ls
Django-1.11.7.dist-info  mod_wsgi-4.5.20-py3.6.egg-info          pkg_resources
__pycache__              mod_wsgi_httpd-2.4.27.1-py3.6.egg-info  pytz
django                   mod_wsgi_packages                       pytz-2017.3.dist-info
easy_install.py          pip                                     setuptools
mod_wsgi                 pip-9.0.1.dist-info                     setuptools-28.8.0.dist-info
(pyenv) [test@SAKURA_VPS site-packages]$ cd mod_wsgi
(pyenv) [test@SAKURA_VPS mod_wsgi]$ ls
__init__.py  __pycache__  docs  images  server
(pyenv) [test@SAKURA_VPS mod_wsgi]$ cd server/
(pyenv) [test@SAKURA_VPS server]$ ls
__init__.py  apxs_config.py  management
__pycache__  environ.py      mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
(pyenv) [test@SAKURA_VPS server]$ pwd
/home/test/pyenv/lib/python3.6/site-packages/mod_wsgi/server
(pyenv) [test@SAKURA_VPS server]$

 

 

wsgi.py のパスを見つける

httpd.conf に 設定するため wsgi.py のパスを見つけます。

今回は ToDo アプリを Apache で公開したいため「/home/test/pyenv/todo/todo/wsgi.pyが対象になります。

[root@SAKURA_VPS yum.repos.d]# find /home/test -name wsgi.py
/home/test/django/pro01/site02/site02/wsgi.py
/home/test/django/pro01/site01/site01/wsgi.py
/home/test/pyenv/lib/python3.6/site-packages/django/core/wsgi.py
/home/test/pyenv/lib/python3.6/site-packages/django/core/handlers/wsgi.py
/home/test/pyenv/site01/site01/wsgi.py
/home/test/pyenv/message_site/message_site/wsgi.py
/home/test/pyenv/todo/todo/wsgi.py
[root@SAKURA_VPS yum.repos.d]#

 

 

 

Apache の httpd.conf を編集する

Apache の httpd.conf ファイルを編集します。

[root@SAKURA_VPS conf]# pwd
/etc/httpd/conf
[root@SAKURA_VPS conf]# vi httpd.conf
#
# This is the main Apache HTTP server configuration file.  It contains the
# configuration directives that give the server its instructions.
# See <URL:http://httpd.apache.org/docs/2.4/> for detailed information.
# In particular, see
# <URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
# for a discussion of each configuration directive.

 

~ 省略 ~

# Django & wsgi & Apache連携
LoadModule /home/test/pyenv/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
WSGIScriptAlias / /home/test/pyenv/todo/todo/wsgi.py
WSGIPythonPath /home/test/pyenv/todo
WSGIPythonPath /home/test/pyenv/lib/python3.6/site-packages
<Directory /home/test/pyenv/todo/todo>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>

 

 

 

Apacheを起動する

Apacheを起動したところ、エラーになりました。

以下のエラーメッセージです。 

「httpd: Syntax error on line 359 of /etc/httpd/conf/httpd.conf: LoadModule takes two arguments, a module name and the name of a shared object file to load it from」

シンタックスエラーです。

エラー内容を見ると「wsgi」を2回ロードモジュールしていると読めます。

[root@SAKURA_VPS conf]# systemctl restart httpd.service
Job for httpd.service failed because the control process exited with error code. See “systemctl status httpd.service” and “journalctl -xe” for details.
[root@SAKURA_VPS conf]# systemctl status httpd.service -l
 httpd.service – The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since 日 2017-11-12 21:46:18 JST; 28s ago
     Docs: man:httpd(8)
           man:apachectl(8)
  Process: 12321 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE)
  Process: 12319 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
 Main PID: 12319 (code=exited, status=1/FAILURE)

11月 12 21:46:18 tk2-250-34861.vs.sakura.ne.jp systemd[1]: Starting The Apache HTTP Server…
11月 12 21:46:18 tk2-250-34861.vs.sakura.ne.jp httpd[12319]: httpd: Syntax error on line 359 of /etc/httpd/conf/httpd.conf: LoadModule takes two arguments, a module name and the name of a shared object file to load it from
11月 12 21:46:18 tk2-250-34861.vs.sakura.ne.jp systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
11月 12 21:46:18 tk2-250-34861.vs.sakura.ne.jp kill[12321]: kill: cannot find process “”
11月 12 21:46:18 tk2-250-34861.vs.sakura.ne.jp systemd[1]: httpd.service: control process exited, code=exited status=1
11月 12 21:46:18 tk2-250-34861.vs.sakura.ne.jp systemd[1]: Failed to start The Apache HTTP Server.
11月 12 21:46:18 tk2-250-34861.vs.sakura.ne.jp systemd[1]: Unit httpd.service entered failed state.
11月 12 21:46:18 tk2-250-34861.vs.sakura.ne.jp systemd[1]: httpd.service failed.
[root@SAKURA_VPS conf]#

 

 

一旦httpd.confからwsgiのロードモジュールをコメントアウトしました。

[root@SAKURA_VPS conf]# vi httpd.conf

 

~ 省略 ~

 

# Django & wsgi & Apache連携
#LoadModule /home/test/pyenv/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so ← コメントアウトをします。
WSGIScriptAlias / /home/test/pyenv/todo/todo/wsgi.py
WSGIPythonPath /home/test/pyenv/todo
WSGIPythonPath /home/test/pyenv/lib/python3.6/site-packages
<Directory /home/test/pyenv/todo/todo>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>

 

編集したら再度 httpd.service を起動します。

今度は起動しました。 

[root@SAKURA_VPS server]# systemctl start httpd.service
[root@SAKURA_VPS server]# systemctl status httpd.service
 httpd.service – The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2017-11-12 21:56:55 JST; 6s ago
     Docs: man:httpd(8)
           man:apachectl(8)
  Process: 12321 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE)
 Main PID: 12994 (httpd)
   Status: “Processing requests…”
   CGroup: /system.slice/httpd.service
           tq12994 /usr/sbin/httpd -DFOREGROUND
           tq12995 /usr/sbin/httpd -DFOREGROUND
           tq12996 /usr/sbin/httpd -DFOREGROUND
           tq12997 /usr/sbin/httpd -DFOREGROUND
           tq12998 /usr/sbin/httpd -DFOREGROUND
           mq12999 /usr/sbin/httpd -DFOREGROUND

11月 12 21:56:54 tk2-250-34861.vs.sakura.ne.jp systemd[1]: Starting The Apache HTTP Server…
11月 12 21:56:55 tk2-250-34861.vs.sakura.ne.jp systemd[1]: Started The Apache HTTP Server.

 

 

しかしブラウザを起動し「http://127.0.0.1/todo_app」にアクセスをすると「https://127.0.0.1/todo_app」にリダイレクトされて下図のように「Forbidden You don’t have paermission to access /todo_app on this server.」と表示されてエラーになります。

 

切り分け調査のため、「https://127.0.0.1/」にアクセスしてみます。

「https://127.0.0.1」へのアクセスは問題なさそうです。

 

 

エラーログの確認

エラーログを確認します。

[root@SAKURA_VPS logs]# pwd
/etc/httpd/logs
[root@SAKURA_VPS logs]# tail -n 100 error_log
[Mon Nov 13 08:13:00.966637 2017] [proxy:debug] [pid 22167] proxy_util.c(1843): AH00925: initializing worker proxy:reverse shared
[Mon Nov 13 08:13:00.967099 2017] [proxy:debug] [pid 22167] proxy_util.c(1885): AH00927: initializing worker proxy:reverse local
[Mon Nov 13 08:13:00.967161 2017] [proxy:debug] [pid 22167] proxy_util.c(1936): AH00931: initialized single connection worker in child 22167 for (*)
[Mon Nov 13 08:13:00.968095 2017] [:info] [pid 22167] mod_wsgi (pid=22167): Initializing Python.
[Mon Nov 13 08:13:01.004685 2017] [:info] [pid 22167] mod_wsgi (pid=22167): Attach interpreter ”.
[Mon Nov 13 08:13:01.004828 2017] [:info] [pid 22167] mod_wsgi (pid=22167): Adding ‘/home/test/pyenv/lib/python3.6/site-packages’ to path.
[Mon Nov 13 08:14:52.215467 2017] [core:info] [pid 22154] AH00096: removed PID file /run/httpd/httpd.pid (pid=22154)
[Mon Nov 13 08:14:52.215817 2017] [:info] [pid 22155] mod_wsgi (pid=22155): Destroying interpreters.
[Mon Nov 13 08:14:52.215909 2017] [:info] [pid 22155] mod_wsgi (pid=22155): Cleanup interpreter ”.
[Mon Nov 13 08:14:52.216313 2017] [:info] [pid 22159] mod_wsgi (pid=22159): Destroying interpreters.
[Mon Nov 13 08:14:52.216368 2017] [:info] [pid 22159] mod_wsgi (pid=22159): Cleanup interpreter ”.
[Mon Nov 13 08:14:52.216670 2017] [:info] [pid 22158] mod_wsgi (pid=22158): Destroying interpreters.
[Mon Nov 13 08:14:52.216721 2017] [:info] [pid 22158] mod_wsgi (pid=22158): Cleanup interpreter ”.
[Mon Nov 13 08:14:52.217329 2017] [:info] [pid 22156] mod_wsgi (pid=22156): Destroying interpreters.
[Mon Nov 13 08:14:52.217384 2017] [:info] [pid 22156] mod_wsgi (pid=22156): Cleanup interpreter ”.
[Mon Nov 13 08:14:52.218937 2017] [:info] [pid 22167] mod_wsgi (pid=22167): Destroying interpreters.
[Mon Nov 13 08:14:52.218989 2017] [:info] [pid 22167] mod_wsgi (pid=22167): Cleanup interpreter ”.
[Mon Nov 13 08:14:52.220350 2017] [:info] [pid 22157] mod_wsgi (pid=22157): Destroying interpreters.
[Mon Nov 13 08:14:52.220399 2017] [:info] [pid 22157] mod_wsgi (pid=22157): Cleanup interpreter ”.
[Mon Nov 13 08:14:52.215728 2017] [mpm_prefork:notice] [pid 22154] AH00170: caught SIGWINCH, shutting down gracefully
[Mon Nov 13 08:14:52.385268 2017] [:info] [pid 22158] mod_wsgi (pid=22158): Terminating Python.
[Mon Nov 13 08:14:52.387676 2017] [:info] [pid 22156] mod_wsgi (pid=22156): Terminating Python.
[Mon Nov 13 08:14:52.389848 2017] [:info] [pid 22156] mod_wsgi (pid=22156): Python has shutdown.
[Mon Nov 13 08:14:52.396102 2017] [:info] [pid 22159] mod_wsgi (pid=22159): Terminating Python.
[Mon Nov 13 08:14:52.398313 2017] [:info] [pid 22159] mod_wsgi (pid=22159): Python has shutdown.
[Mon Nov 13 08:14:52.403377 2017] [:info] [pid 22167] mod_wsgi (pid=22167): Terminating Python.
[Mon Nov 13 08:14:52.405550 2017] [:info] [pid 22167] mod_wsgi (pid=22167): Python has shutdown.
[Mon Nov 13 08:14:52.410959 2017] [:info] [pid 22157] mod_wsgi (pid=22157): Terminating Python.
[Mon Nov 13 08:14:52.414020 2017] [:info] [pid 22157] mod_wsgi (pid=22157): Python has shutdown.
[Mon Nov 13 08:14:52.418550 2017] [:info] [pid 22155] mod_wsgi (pid=22155): Terminating Python.
[Mon Nov 13 08:14:52.420728 2017] [:info] [pid 22155] mod_wsgi (pid=22155): Python has shutdown.
[Mon Nov 13 08:14:52.427524 2017] [:info] [pid 22158] mod_wsgi (pid=22158): Python has shutdown.
[Mon Nov 13 08:14:53.320075 2017] [suexec:notice] [pid 22293] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Mon Nov 13 08:14:53.320498 2017] [ssl:debug] [pid 22293] ssl_engine_pphrase.c(181): AH02199: SSL not enabled on vhost tk2-250-34861.vs.sakura.ne.jp:80, skipping SSL setup
[Mon Nov 13 08:14:53.320970 2017] [ssl:debug] [pid 22293] ssl_engine_pphrase.c(239): AH02202: Init: Read server certificate from ‘/etc/letsencrypt/live/box-cm.com/cert.pem’
[Mon Nov 13 08:14:53.321368 2017] [ssl:info] [pid 22293] AH01887: Init: Initializing (virtual) servers for SSL
[Mon Nov 13 08:14:53.322118 2017] [ssl:info] [pid 22293] AH01876: mod_ssl/2.4.6 compiled against Server: Apache/2.4.6, Library: OpenSSL/1.0.2k
[Mon Nov 13 08:14:53.355839 2017] [auth_digest:notice] [pid 22293] AH01757: generating secret for digest authentication …
[Mon Nov 13 08:14:53.355871 2017] [auth_digest:debug] [pid 22293] mod_auth_digest.c(250): AH01759: done
[Mon Nov 13 08:14:53.356497 2017] [slotmem_shm:debug] [pid 22293] mod_slotmem_shm.c(448): AH02301: attach looking for /run/httpd/slotmem-shm-mod_heartmonitor.shm
[Mon Nov 13 08:14:53.356519 2017] [lbmethod_heartbeat:notice] [pid 22293] AH02282: No slotmem from mod_heartmonitor
[Mon Nov 13 08:14:53.356602 2017] [ssl:debug] [pid 22293] ssl_engine_pphrase.c(181): AH02199: SSL not enabled on vhost tk2-250-34861.vs.sakura.ne.jp:80, skipping SSL setup
[Mon Nov 13 08:14:53.356729 2017] [ssl:debug] [pid 22293] ssl_engine_pphrase.c(239): AH02202: Init: Read server certificate from ‘/etc/letsencrypt/live/box-cm.com/cert.pem’
[Mon Nov 13 08:14:53.356894 2017] [socache_shmcb:debug] [pid 22293] mod_socache_shmcb.c(391): AH00821: shmcb_init allocated 512000 bytes of shared memory
[Mon Nov 13 08:14:53.356904 2017] [socache_shmcb:debug] [pid 22293] mod_socache_shmcb.c(407): AH00822: for 511912 bytes (512000 including header), recommending 32 subcaches, 88 indexes each
[Mon Nov 13 08:14:53.356906 2017] [socache_shmcb:debug] [pid 22293] mod_socache_shmcb.c(440): AH00824: shmcb_init_memory choices follow
[Mon Nov 13 08:14:53.356908 2017] [socache_shmcb:debug] [pid 22293] mod_socache_shmcb.c(442): AH00825: subcache_num = 32
[Mon Nov 13 08:14:53.356910 2017] [socache_shmcb:debug] [pid 22293] mod_socache_shmcb.c(444): AH00826: subcache_size = 15992
[Mon Nov 13 08:14:53.356911 2017] [socache_shmcb:debug] [pid 22293] mod_socache_shmcb.c(446): AH00827: subcache_data_offset = 2128
[Mon Nov 13 08:14:53.356913 2017] [socache_shmcb:debug] [pid 22293] mod_socache_shmcb.c(448): AH00828: subcache_data_size = 13864
[Mon Nov 13 08:14:53.356915 2017] [socache_shmcb:debug] [pid 22293] mod_socache_shmcb.c(450): AH00829: index_num = 88
[Mon Nov 13 08:14:53.356988 2017] [socache_shmcb:info] [pid 22293] AH00830: Shared memory socache initialised
[Mon Nov 13 08:14:53.356992 2017] [ssl:info] [pid 22293] AH01887: Init: Initializing (virtual) servers for SSL
[Mon Nov 13 08:14:53.357403 2017] [ssl:info] [pid 22293] AH01876: mod_ssl/2.4.6 compiled against Server: Apache/2.4.6, Library: OpenSSL/1.0.2k
[Mon Nov 13 08:14:53.383329 2017] [mpm_prefork:notice] [pid 22293] AH00163: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.4.16 mod_wsgi/3.4 Python/2.7.5 configured — resuming normal operations ← Python 3.6 ではなく Python 2.7.5 を使っている?
[Mon Nov 13 08:14:53.383367 2017] [mpm_prefork:info] [pid 22293] AH00164: Server built: Oct 19 2017 20:39:16
[Mon Nov 13 08:14:53.383387 2017] [core:notice] [pid 22293] AH00094: Command line: ‘/usr/sbin/httpd -D FOREGROUND’
[Mon Nov 13 08:14:53.383403 2017] [mpm_prefork:debug] [pid 22293] prefork.c(1005): AH00165: Accept mutex: sysvsem (default: sysvsem)
[Mon Nov 13 08:14:53.395954 2017] [proxy:debug] [pid 22298] proxy_util.c(1843): AH00925: initializing worker proxy:reverse shared
[Mon Nov 13 08:14:53.395989 2017] [proxy:debug] [pid 22298] proxy_util.c(1885): AH00927: initializing worker proxy:reverse local
[Mon Nov 13 08:14:53.396017 2017] [proxy:debug] [pid 22298] proxy_util.c(1936): AH00931: initialized single connection worker in child 22298 for (*)
[Mon Nov 13 08:14:53.396052 2017] [:info] [pid 22298] mod_wsgi (pid=22298): Initializing Python.
[Mon Nov 13 08:14:53.399181 2017] [proxy:debug] [pid 22294] proxy_util.c(1843): AH00925: initializing worker proxy:reverse shared
[Mon Nov 13 08:14:53.399211 2017] [proxy:debug] [pid 22294] proxy_util.c(1885): AH00927: initializing worker proxy:reverse local
[Mon Nov 13 08:14:53.399237 2017] [proxy:debug] [pid 22294] proxy_util.c(1936): AH00931: initialized single connection worker in child 22294 for (*)
[Mon Nov 13 08:14:53.399271 2017] [:info] [pid 22294] mod_wsgi (pid=22294): Initializing Python.
[Mon Nov 13 08:14:53.402086 2017] [proxy:debug] [pid 22295] proxy_util.c(1843): AH00925: initializing worker proxy:reverse shared
[Mon Nov 13 08:14:53.402139 2017] [proxy:debug] [pid 22295] proxy_util.c(1885): AH00927: initializing worker proxy:reverse local
[Mon Nov 13 08:14:53.402176 2017] [proxy:debug] [pid 22295] proxy_util.c(1936): AH00931: initialized single connection worker in child 22295 for (*)
[Mon Nov 13 08:14:53.402211 2017] [:info] [pid 22295] mod_wsgi (pid=22295): Initializing Python.
[Mon Nov 13 08:14:53.405272 2017] [proxy:debug] [pid 22296] proxy_util.c(1843): AH00925: initializing worker proxy:reverse shared
[Mon Nov 13 08:14:53.405298 2017] [proxy:debug] [pid 22296] proxy_util.c(1885): AH00927: initializing worker proxy:reverse local
[Mon Nov 13 08:14:53.405322 2017] [proxy:debug] [pid 22296] proxy_util.c(1936): AH00931: initialized single connection worker in child 22296 for (*)
[Mon Nov 13 08:14:53.405352 2017] [:info] [pid 22296] mod_wsgi (pid=22296): Initializing Python.
[Mon Nov 13 08:14:53.407978 2017] [proxy:debug] [pid 22297] proxy_util.c(1843): AH00925: initializing worker proxy:reverse shared
[Mon Nov 13 08:14:53.408003 2017] [proxy:debug] [pid 22297] proxy_util.c(1885): AH00927: initializing worker proxy:reverse local
[Mon Nov 13 08:14:53.408028 2017] [proxy:debug] [pid 22297] proxy_util.c(1936): AH00931: initialized single connection worker in child 22297 for (*)
[Mon Nov 13 08:14:53.408061 2017] [:info] [pid 22297] mod_wsgi (pid=22297): Initializing Python.
[Mon Nov 13 08:14:53.463200 2017] [:info] [pid 22294] mod_wsgi (pid=22294): Attach interpreter ”.
[Mon Nov 13 08:14:53.463287 2017] [:info] [pid 22294] mod_wsgi (pid=22294): Adding ‘/home/test/pyenv/lib/python3.6/site-packages’ to path.
[Mon Nov 13 08:14:53.464620 2017] [:info] [pid 22297] mod_wsgi (pid=22297): Attach interpreter ”.
[Mon Nov 13 08:14:53.464687 2017] [:info] [pid 22297] mod_wsgi (pid=22297): Adding ‘/home/test/pyenv/lib/python3.6/site-packages’ to path.
[Mon Nov 13 08:14:53.466585 2017] [:info] [pid 22295] mod_wsgi (pid=22295): Attach interpreter ”.
[Mon Nov 13 08:14:53.466685 2017] [:info] [pid 22295] mod_wsgi (pid=22295): Adding ‘/home/test/pyenv/lib/python3.6/site-packages’ to path.
[Mon Nov 13 08:14:53.467813 2017] [:info] [pid 22298] mod_wsgi (pid=22298): Attach interpreter ”.
[Mon Nov 13 08:14:53.467879 2017] [:info] [pid 22298] mod_wsgi (pid=22298): Adding ‘/home/test/pyenv/lib/python3.6/site-packages’ to path.
[Mon Nov 13 08:14:53.468446 2017] [:info] [pid 22296] mod_wsgi (pid=22296): Attach interpreter ”.
[Mon Nov 13 08:14:53.468511 2017] [:info] [pid 22296] mod_wsgi (pid=22296): Adding ‘/home/test/pyenv/lib/python3.6/site-packages’ to path.
[Mon Nov 13 08:14:56.476719 2017] [proxy:debug] [pid 22307] proxy_util.c(1843): AH00925: initializing worker proxy:reverse shared
[Mon Nov 13 08:14:56.476914 2017] [proxy:debug] [pid 22307] proxy_util.c(1885): AH00927: initializing worker proxy:reverse local
[Mon Nov 13 08:14:56.476963 2017] [proxy:debug] [pid 22307] proxy_util.c(1936): AH00931: initialized single connection worker in child 22307 for (*)
[Mon Nov 13 08:14:56.477009 2017] [:info] [pid 22307] mod_wsgi (pid=22307): Initializing Python.
[Mon Nov 13 08:14:56.501528 2017] [:info] [pid 22307] mod_wsgi (pid=22307): Attach interpreter ”.
[Mon Nov 13 08:14:56.501629 2017] [:info] [pid 22307] mod_wsgi (pid=22307): Adding ‘/home/test/pyenv/lib/python3.6/site-packages’ to path.
[Mon Nov 13 12:47:01.859876 2017] [proxy:debug] [pid 6094] proxy_util.c(1843): AH00925: initializing worker proxy:reverse shared
[Mon Nov 13 12:47:01.860273 2017] [proxy:debug] [pid 6094] proxy_util.c(1885): AH00927: initializing worker proxy:reverse local
[Mon Nov 13 12:47:01.860325 2017] [proxy:debug] [pid 6094] proxy_util.c(1936): AH00931: initialized single connection worker in child 6094 for (*)
[Mon Nov 13 12:47:01.860414 2017] [:info] [pid 6094] mod_wsgi (pid=6094): Initializing Python.
[Mon Nov 13 12:47:01.893263 2017] [:info] [pid 6094] mod_wsgi (pid=6094): Attach interpreter ”.
[Mon Nov 13 12:47:01.893371 2017] [:info] [pid 6094] mod_wsgi (pid=6094): Adding ‘/home/test/pyenv/lib/python3.6/site-packages’ to path.
[root@SAKURA_VPS logs]#

 

 

Python 3.6 ではなく Python 2.7.5 の方をロードモジュールしている?

/etc/httpd/conf/httpd.conf に以下を追加すると、

# Django & wsgi & Apache連携
LoadModule /home/test/pyenv/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so

 

 

以下のエラーメッセージが出力されますが、Google翻訳で意味を調べて初めて気が付きました。

[root@SAKURA_VPS ~]# systemctl status httpd -l
● httpd.service – The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since 月 2017-11-13 21:41:38 JST; 23s ago
     Docs: man:httpd(8)
           man:apachectl(8)
  Process: 6422 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE)
  Process: 2979 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
  Process: 6420 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
 Main PID: 6420 (code=exited, status=1/FAILURE)

11月 13 21:41:38 tk2-250-34861.vs.sakura.ne.jp systemd[1]: Starting The Apache HTTP Server…
11月 13 21:41:38 tk2-250-34861.vs.sakura.ne.jp httpd[6420]: httpd: Syntax error on line 359 of /etc/httpd/conf/httpd.conf: LoadModule takes two arguments, a module name and the name of a shared object file to load it from
11月 13 21:41:38 tk2-250-34861.vs.sakura.ne.jp systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
11月 13 21:41:38 tk2-250-34861.vs.sakura.ne.jp kill[6422]: kill: cannot find process “”
11月 13 21:41:38 tk2-250-34861.vs.sakura.ne.jp systemd[1]: httpd.service: control process exited, code=exited status=1
11月 13 21:41:38 tk2-250-34861.vs.sakura.ne.jp systemd[1]: Failed to start The Apache HTTP Server.
11月 13 21:41:38 tk2-250-34861.vs.sakura.ne.jp systemd[1]: Unit httpd.service entered failed state.
11月 13 21:41:38 tk2-250-34861.vs.sakura.ne.jp systemd[1]: httpd.service failed.
[root@SAKURA_VPS ~]#

 

■Google翻訳の結果

httpd:/etc/httpd/conf/httpd.confの359行目の構文エラー:LoadModuleはモジュール名とそれをロードする共有オブジェクトファイルの名前の2つの引数をとります

「LoadModuleはモジュール名とそれをロードする共有オブジェクトファイルの名前の2つの引数をとります」です。

つまり私の記述が間違っていました。。

# Django & wsgi & Apache連携
LoadModule /home/test/pyenv/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so ← そもそも引数が1つしかないため間違いです。

 

以下のように修正しました。

# Django & wsgi & Apache連携
LoadModule wsgi_module /home/test/pyenv/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so ← 引数を2つにして正しく設定

 

 

そして httpd.service を起動します。

今度は起動しましたが・・・

[root@SAKURA_VPS ~]# systemctl start httpd
[root@SAKURA_VPS ~]# systemctl status httpd -l
● httpd.service – The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since 月 2017-11-13 21:58:36 JST; 3s ago
     Docs: man:httpd(8)
           man:apachectl(8)
  Process: 6422 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE)
  Process: 2979 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
 Main PID: 7427 (httpd)
   Status: “Processing requests…”
   CGroup: /system.slice/httpd.service
           tq7427 /usr/sbin/httpd -DFOREGROUND
           tq7431 /usr/sbin/httpd -DFOREGROUND
           tq7432 /usr/sbin/httpd -DFOREGROUND
           tq7433 /usr/sbin/httpd -DFOREGROUND
           tq7434 /usr/sbin/httpd -DFOREGROUND
           mq7437 /usr/sbin/httpd -DFOREGROUND

11月 13 21:58:36 tk2-250-34861.vs.sakura.ne.jp systemd[1]: Starting The Apache HTTP Server…
11月 13 21:58:36 tk2-250-34861.vs.sakura.ne.jp httpd[7427]: [Mon Nov 13 21:58:36.238324 2017] [so:warn] [pid 7427] AH01574: module wsgi_module is already loaded, skipping
11月 13 21:58:36 tk2-250-34861.vs.sakura.ne.jp systemd[1]: Started The Apache HTTP Server.
[root@SAKURA_VPS ~]#

 

 

しかし、ログを見ると Python 2.7.5 のままです。

[Mon Nov 13 21:58:36.393320 2017] [proxy:debug] [pid 7434] proxy_util.c(1936): AH00931: initialized single connection worker in child 7434 for (*)
[Mon Nov 13 21:58:36.393357 2017] [:info] [pid 7434] mod_wsgi (pid=7434): Initializing Python.
[Mon Nov 13 21:58:36.398318 2017] [proxy:debug] [pid 7432] proxy_util.c(1843): AH00925: initializing worker proxy:reverse shared
[Mon Nov 13 21:58:36.398357 2017] [proxy:debug] [pid 7432] proxy_util.c(1885): AH00927: initializing worker proxy:reverse local
[Mon Nov 13 21:58:36.398406 2017] [proxy:debug] [pid 7432] proxy_util.c(1936): AH00931: initialized single connection worker in child 7432 for (*)
[Mon Nov 13 21:58:36.398449 2017] [:info] [pid 7432] mod_wsgi (pid=7432): Initializing Python.
[Mon Nov 13 21:58:36.403517 2017] [mpm_prefork:notice] [pid 7427] AH00163: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.4.16 mod_wsgi/3.4 Python/2.7.5 configured — resuming normal operations
[Mon Nov 13 21:58:36.403559 2017] [mpm_prefork:info] [pid 7427] AH00164: Server built: Oct 19 2017 20:39:16
[Mon Nov 13 21:58:36.403579 2017] [core:notice] [pid 7427] AH00094: Command line: ‘/usr/sbin/httpd -D FOREGROUND’
[Mon Nov 13 21:58:36.403603 2017] [mpm_prefork:debug] [pid 7427] prefork.c(1005): AH00165: Accept mutex: sysvsem (default: sysvsem)

 

 

一旦、仮想環境ではなく、OSの環境から mod_wsgi を削除します。

[root@SAKURA_VPS ~]# rpm -qa | grep wsgi
mod_wsgi-3.4-12.el7_0.x86_64

[root@SAKURA_VPS conf]# yum remove mod_wsgi-3.4-12.el7_0.x86_64
読み込んだプラグイン:fastestmirror, langpacks
依存性の解決をしています
–> トランザクションの確認を実行しています。
—> パッケージ mod_wsgi.x86_64 0:3.4-12.el7_0 を 削除
–> 依存性解決を終了しました。
base/7/x86_64                                                                    | 3.6 kB  00:00:00
elrepo                                                                           | 2.9 kB  00:00:00
epel/x86_64/metalink                                                             | 6.8 kB  00:00:00
extras/7/x86_64                                                                  | 3.4 kB  00:00:00
groonga/7/x86_64                                                                 | 2.9 kB  00:00:00
ius/x86_64                                                                       | 2.3 kB  00:00:00
ius/x86_64/primary_db                                                            | 234 kB  00:00:00
mysql-connectors-community/x86_64                                                | 2.5 kB  00:00:00
mysql-tools-community/x86_64                                                     | 2.5 kB  00:00:00
mysql57-community/x86_64                                                         | 2.5 kB  00:00:00
updates/7/x86_64                                                                 | 3.4 kB  00:00:00

依存性を解決しました

========================================================================================================
 Package                 アーキテクチャー      バージョン                    リポジトリー          容量
========================================================================================================
削除中:
 mod_wsgi                x86_64                3.4-12.el7_0                  @base                197 k

トランザクションの要約
========================================================================================================
削除  1 パッケージ

インストール容量: 197 k
上記の処理を行います。よろしいでしょうか? [y/N]y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  削除中                  : mod_wsgi-3.4-12.el7_0.x86_64                                            1/1
  検証中                  : mod_wsgi-3.4-12.el7_0.x86_64                                            1/1

削除しました:
  mod_wsgi.x86_64 0:3.4-12.el7_0

完了しました!
[root@SAKURA_VPS conf]#

 

mod_wsgi を削除後、httpd.service を再起動してログを確認します。

[Mon Nov 13 22:16:17.425040 2017] [socache_shmcb:debug] [pid 8547] mod_socache_shmcb.c(407): AH00822: for 511912 bytes (512000 including header), recommending 32 subcaches, 88 indexes each
[Mon Nov 13 22:16:17.425044 2017] [socache_shmcb:debug] [pid 8547] mod_socache_shmcb.c(440): AH00824: shmcb_init_memory choices follow
[Mon Nov 13 22:16:17.425046 2017] [socache_shmcb:debug] [pid 8547] mod_socache_shmcb.c(442): AH00825: subcache_num = 32
[Mon Nov 13 22:16:17.425048 2017] [socache_shmcb:debug] [pid 8547] mod_socache_shmcb.c(444): AH00826: subcache_size = 15992
[Mon Nov 13 22:16:17.425050 2017] [socache_shmcb:debug] [pid 8547] mod_socache_shmcb.c(446): AH00827: subcache_data_offset = 2128
[Mon Nov 13 22:16:17.425065 2017] [socache_shmcb:debug] [pid 8547] mod_socache_shmcb.c(448): AH00828: subcache_data_size = 13864
[Mon Nov 13 22:16:17.425068 2017] [socache_shmcb:debug] [pid 8547] mod_socache_shmcb.c(450): AH00829: index_num = 88
[Mon Nov 13 22:16:17.425138 2017] [socache_shmcb:info] [pid 8547] AH00830: Shared memory socache initialised
[Mon Nov 13 22:16:17.425141 2017] [ssl:info] [pid 8547] AH01887: Init: Initializing (virtual) servers for SSL
[Mon Nov 13 22:16:17.425543 2017] [ssl:info] [pid 8547] AH01876: mod_ssl/2.4.6 compiled against Server: Apache/2.4.6, Library: OpenSSL/1.0.2k
[Mon Nov 13 22:16:17.455082 2017] [mpm_prefork:notice] [pid 8547] AH00163: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.4.16 mod_wsgi/4.5.20 Python/3.6 configured — resuming normal operations
[Mon Nov 13 22:16:17.455119 2017] [mpm_prefork:info] [pid 8547] AH00164: Server built: Oct 19 2017 20:39:16
[Mon Nov 13 22:16:17.455132 2017] [core:notice] [pid 8547] AH00094: Command line: ‘/usr/sbin/httpd -D FOREGROUND’
[Mon Nov 13 22:16:17.455151 2017] [mpm_prefork:debug] [pid 8547] prefork.c(1005): AH00165: Accept mutex: sysvsem (default: sysvsem)

 

Python 3.6 に代わっています。

ここまではうまくいっているような気がします。

 

しかし、「403 Forbidden」が出力されます。

 

 

再度、切り分け調査

一旦リセットして簡単なところから切り分け調査をします。

かなり記事が長くなってすみません。

しかし諦めずに調べつつ完成まで持っていきます。

 

簡単な「Hello World!」スクリプトを作成する

切り分け調査をします。

まずは本当に mod_wsgi が機能しているのか?何か設定が間違っているのか?間違っているとしたら、どこが間違っているのか?を調べます。

そのために簡単な「Hello World!」を表示するスクリプトを作成しました。

更に切り分け調査のため、仮想環境からいったん離れました。

[root@SAKURA_VPS test]# pwd
/var/www/test
[root@SAKURA_VPS test]# vi hello.py
def application(environ, start_response):
    output = b’Hello World!’
    start_response(‘200 OK’, [(‘Content-type’, ‘text/plain’)])
    return [output]
[root@SAKURA_VPS test]#

 

/etc/httpd/conf/httpd.conf を修正します。

[root@SAKURA_VPS conf]# pwd
/etc/httpd/conf

[root@SAKURA_VPS conf]# vi httpd.conf

 

~ 省略 ~

 

# Django & wsgi & Apache連携
LoadModule wsgi_module /home/test/pyenv/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
WSGIScriptAlias /test /var/www/test/hello.py

 

シンプルに2行だけしか追加していません。

  • LoadModule wsgi_module /home/test/pyenv/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so
  • WSGIScriptAlias /test /var/www/test/hello.py

 

httpd を再起動します。

[root@SAKURA_VPS conf]# systemctl restart httpd

 

 

ブラウザを開き「https://127.0.0.1/test」にアクセスします。

 

表示されました!

この程度のシンプルな構成でも機能すると嬉しさがこみ上げてきます(笑)

 

更に調査を続けます。

 

 

参考文献

今回構築した Django 環境の参考文献です。

Amazonの「Kindle Unlimited」で購入しました。

淵上喜弘著 「1日で理解するDjango超基礎入門」です。

書物としてまとまった Django の本がほとんどない中で、非常に役に立ちました。

本著の内容は、詳しい解説と言うよりはどんどん Web アプリを作っていくスタイルです。

そのため、文法など細かい解説が欲しい方には物足りなく感じるかもしれませんが、作って動かしてみて理解するスタイルが合う方には有用だと思います。

1日で理解するDjango超基礎入門

 

今までの連載

【さくらVPS】【Python】Django で Web アプリを作る【Part.1】

 

【さくらVPS】【Python】Django で Web アプリを作る(Let’s Encrypt SSL証明書設定)【Part.2】

 

【さくらVPS】【Python】Django で Web アプリを作る(Djangoインストール&設定)【Part.3】

 

【さくらVPS】【Python】Django で Web アプリを作る(Webアプリ構築編)【Part.4】

 

【さくらVPS】【Python】Django で Web アプリを作る(Webアプリ構築編)【Part.5】

 

【さくらVPS】【Python】Django で Web アプリを作る(Webアプリ設定編)【Part.6】

 

【さくらVPS】【Python】Django で Web アプリを作る(Webアプリ構築編)【Part.7】

 

【さくらVPS】【Python】Django で Web アプリを作る(メッセージ登録&表示アプリ編)【Part.8】

 

【さくらVPS】【Python】Django で Web アプリを作る(カスタマイズ編)【Part.9】

 

【さくらVPS】【Python】Django で Web アプリを作る(ToDoアプリ編)【Part.10】

 

感想

基本が分かっていないと結構ハマります。

まだまだ Django の仕組みを基本から勉強する必要があると痛感しました。

しかし自分の作りたい Web アプリを作れるようになるまで Django を勉強しようと思います。

まだまだ続きます。

 

 

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

AlphaOmega Captcha Medica  –  What Do You See?
     
 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください