開発サーバでなく、製品版ではどうするかというと2通りの方法があるみたい。
2.の方がパフォーマンスが優れているという話も見かけたけど、今回は1.を試してみる。 wsgiは"ウィスギィ"と読むのか。
検証環境として、Virtualbox上に立てたCentOS 7を使う。
cat /etc/centos-release CentOS Linux release 7.2.1511 (Core)
webブラウザから確認するため、VagrantfileにIPアドレスを固定するよう設定する。
Vagrantfile
... config.vm.network "private_network", ip: "192.168.33.10" ...
Python 3.5.1のインストール
デフォルトでインストールされているPythonのバージョンが2.7.5
なので、3.5.1
をインストールする。
# mkdir tmp # cd tmp # wget https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz # tar -xzf Python-3.5.1.tgz # cd Python-3.5.1 # ./configure --enable-shared # make # make altinstall
インストールの確認をしたが、関連するライブラリのパスが通っていない...。 パスを通す。
# /usr/bin/python3.5 -V/usr/bin/python3.5: error while loading shared libraries: libpython3.5m.so.1.0: cannot open shared object file: No such file or directory # echo "/usr/local/lib/python3.5" > /etc/ld.so.conf.d/python33.conf # echo "/usr/local/lib" >> /etc/ld.so.conf.d/python33.conf # ldconfig
Apache Httpサーバ およびmod_wsgiのインストール
tmpディレクトリのままでApache Httpサーバとmod_wsgiをインストールする。
# yum install httpd # wget https://github.com/GrahamDumpleton/mod_wsgi/archive/4.5.2.tar.gz # tar -xzf 4.5.2.tar.gz # cd mod_wsgi-4.5.2/ # ./configure --with-python=/usr/local/bin/python3.5 # make # make install
Djangoのインストール
pipのバージョンが古いかったので、アップグレードも実施。
# pip3.5 freeze You are using pip version 7.1.2, however version 8.1.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command. # /usr/local/bin/pip3.5 install --upgrade pip # /usr/local/bin/pip3.5 install django
確認用プロジェクトで確認する
helloプロジェクトを作成。
# su - vagrant $ cd ~ $ mkdir -p dev/python/django $ cd dev/python/django/ $ django-admin startproject hello
$ /usr/local/bin/python3.5 manage.py migrate Operations to perform: Apply all migrations: admin, auth, sessions, contenttypes Running migrations: Rendering model states... DONE Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying sessions.0001_initial... OK
管理者アカウントを作っておいて、管理画面の表示も確認しよう。
$ /usr/local/bin/python3.5 manage.py createsuperuser Username (leave blank to use 'vagrant'): admin Email address: admin@email.com Password: Password (again): Superuser created successfully.
前回はstatic
フォルダにJavascriptやらCSSを入れて参照していたけど、管理画面のものはどこにあるのかなと思ったらそれをstatic
フォルダに集めれとのこと。これをしないとあとで管理画面のスタイルが崩れて表示される。
collectstatic
コマンド を実行するとSTATIC_ROOT
で指定したディレクトリに格納される。
- hello/settings.py
... STATIC_ROOT = os.path.join(BASE_DIR, "static/") ...
それでもって
$ /usr/local/bin/python3.5 manage.py collectstatic
mod_wsgiの設定
oadModule wsgi_module modules/mod_wsgi.so WSGIDaemonProcess hello python-path=/home/vagrant/dev/python/django/hello WSGIProcessGroup hello WSGIScriptAlias / /home/vagrant/dev/python/django/hello/hello/wsgi.py process-group=hello <Directory /home/vagrant/dev/python/django/hello/hello> <Files wsgi.py> Require all granted </Files> </Directory> Alias /static /home/vagrant/dev/python/django/hello/static <Directory /home/vagrant/dev/python/django/hello/static> Require all granted </Directory>
apacheユーザがhelloプロジェクトにアクセスできるようにする。
$ sudo usermod -a -G vagrant apache $ sudo chmod 775 -R ~/dev/python/django/hello/
Apache Httpサーバの起動
あとはApache Httpサーバを起動して、http://192.168.33.10/
、http://192.168.33.10/admin
で開発用サーバと同じ画面が見れるはず。
# systemctl start httpd # systemctl enable httpd
ただ1点気になったのが、Apache Httpサーバのエラーログに/
はないと言われるのはなんでだろう。。
[wsgi:error] [pid 4116] Not Found: /