More Related Content Similar to Djangoとweb2pyをapacheに組込む Similar to Djangoとweb2pyをapacheに組込む (20) Djangoとweb2pyをapacheに組込む1. DjangoとWeb2pyを
apacheに組込む
Python東海 第21回 勉強会
2013/2/23
坪内 由孝
13年2月24日日曜日 1
2. 自己紹介
• 坪内 由孝
仕事はインフラエンジニア?
最近は仮想化とかよくやってます。
プログラム?おいしいの?
• 連絡先的な
blog : http://www.zumwalt.info/blog
Twitter : a_wilhelm
13年2月24日日曜日 2
3. アジェンダ
7. Django
1. 注意事項 - インストール
- DB作成
2. 前提条件・環境
- Project 作成・設定
- apache 設定
3. DjangoとWeb2py
8. Web2py
4. Pythonインストール - インストール
- apache・SSL 設定
5. mod_wsgiインストール
- DB設定
6. MySQLインストール
9. まとめ
13年2月24日日曜日 3
5. 1. 注意事項
• DjangoとかWeb2pyがどういった物かというのは
一切無いので期待しないでください。
• セキュリティがかなり甘いです。
→本番環境で使うとやばいです。
• パフォーマンスとか気にしてないです。
→やっぱ本番環境で使うとまずいです。
※自己責任で参考にしてください。
13年2月24日日曜日 5
7. 2. 前提条件・環境
• OS : CentOS 6.3
selinux : 無効
iptables : 無効
作業は全て root にて実施
• Python 2.7.3 3系は西暦3000年くらいになったら考えます。
• apache と mod_wsgi とMySQLを利用
• Django と Web2py は別サーバーで構築
Pythonインストール∼Apacheインストールまでは同じ手順
• Web2pyは mod_ssl も利用(adminページ用)
13年2月24日日曜日 7
9. 3. DjangoとWeb2py
• どっちもWebフレームワーク
• どっちが使いやすいとか聞かれても正直わか
らん('A`)
• どっちも日本ユーザー会があるのでそちらを
頼るほうが正しい答えが得られるよ!
• 更に言えば使い方もようわからん('A`)
13年2月24日日曜日 9
11. 4. Pythonインストール 1
前回の復讐復習です。
# yum install gcc make libjpeg-devel ¥
> zlib-develpenssl-devel zlib tk-devel ¥
> tcl-devel sqlite-devel ncurses-devel ¥
> gdbm-devel readline-devel bzip2-devel
> db4-devel
13年2月24日日曜日 11
12. 4. Pythonインストール 2
# mkdir /usr/local/src/python
# cd /usr/local/src/python
# wget http://www.python.org/ftp/python/2.7.3/
Python-2.7.3.tar.bz2
# tar xvjf Python-2.7.3.tar.bz2
# cd Python-2.7.3
13年2月24日日曜日 12
13. 4. Pythonインストール 3
※前回なかった手順 urllib2利用の為に必要
# diff -u /usr/local/src/python/Python-2.7.3/Modules/Setup.dist{.orig,}
--- /usr/local/src/python/Python-2.7.3/Modules/Setup.dist.orig
+++ /usr/local/src/python/Python-2.7.3/Modules/Setup.dist
@@ -207,14 +207,14 @@
-#_socket socketmodule.c
+_socket socketmodule.c
-#_ssl _ssl.c
-#
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl
-#
-L$(SSL)/lib -lssl -lcrypto
+_ssl _ssl.c
+
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl
+
-L$(SSL)/lib -lssl -lcrypto
13年2月24日日曜日 13
14. 4. Pythonインストール 4
# ./configure CFLAGS=-fPIC --enable-shared --enable-unicode=ucs4
# make
# make install
# cat /etc/ld.so.conf.d/python2.7.conf
/usr/local/lib
# ldconfig
# python -V
Python 2.7.3
configure オプションの説明
• CFLAGS=-fPIC : gccのオプション。
共有ライブラリはPICにしたほうが動作が早いらしい。
• --enable-shared : 付けないとmod_wsgi入れる時にトラブルよ!
(mod_wsgi インストールする環境のPythonには必須)
• --enable-unicode=ucs4 : WindowsAPIとかJAVAとか.Netの文字列とやりと
りするなら ucs2。
Linx系単独ならucs4 (FedoraとかUbuntuはucs4)
13年2月24日日曜日 14
15. 4. Pythonインストール 5
easy_install インストール
# mkdir /usr/local/src/python/easy_install
# cd /usr/local/src/python/easy_install
# wget http://peak.telecommunity.com/dist/
ez_setup.py
# python ez_setup.py
pip インストール
# easy_install pip
13年2月24日日曜日 15
17. 5. mod_wsgi インストール 1
# yum install httpd-devel
# mkdir /usr/local/src/modwsgi
# cd /usr/local/src/modwsgi
# wget http://modwsgi.googlecode.com/files/
mod_wsgi-3.4.tar.gz
# tar zxvf mod_wsgi-3.3.tar.gz
13年2月24日日曜日 17
18. 5. mod_wsgi インストール 2
# cd mod_wsgi-3.4
# which python
/usr/local/bin/python
# ./configure CFLAGS=-fPIC --with-python=/usr/local/bin/python
# make
# make install
「which python」 の結果とconfigureオプションの
「--with-python=」のパラメーターを合わせます。
13年2月24日日曜日 18
20. 6. MySQLインストール 1
# yum install mysql-devel mysql-server
# diff -u /etc/my.cnf{.orig,}
--- /etc/my.cnf.orig
+++ /etc/my.cnf
@@ -1,10 +1,17 @@
[mysqld]
+character-set-server=utf8
+default-storage-engine = InnoDB
+innodb_buffer_pool_size = 1024M
+innodb_data_file_path = ibdata1:256M:autoextend
+innodb_file_per_table
+innodb_data_home_dir = /var/lib/mysql/datahome
MySQLはinnodb使ったほうが幸せになれます。
13年2月24日日曜日 20
21. 6. MySQLインストール 2
# mkdir /var/lib/mysql/datahome
# /etc/init.d/mysqld start
# chkconfig mysqld on
# mysql_secure_installation
MySQLのrootパスワード設定して後は全部YesでOK
my.ncf 編集後にMySQLを起動した方が幸せになれます。
MySQL のセキュリティ設定は mysql_secure_installation を
使うと幸せになれます。
13年2月24日日曜日 21
24. 7. Django インストール
# pip install MySQL_Python
# mkdir /usr/local/src/django
# cd /usr/local/src/django
# wget https://www.djangoproject.com/download/1.4.3/tarball/
# tar zxvf Django-1.4.3.tar.gz
# cd Django-1.4.3
# python setup.py install
確認
# python
>>> import django
>>> django.VERSION
(1, 4, 3, 'final', 0)
MySQL_PythonはDjangoでMySQLを使う場合必須です。
13年2月24日日曜日 24
25. 7. Django DB設定
DB作成
# mysql -u root -p
Enter password: mysqlのrootパスワード
mysql> create database djangotest;
mysql> grant all on djangotest.* TO djangotestadmin@localhost
identified BY 'djangopass';
mysql> quit
mysqlのrootパスワードは「6.MySQL」で設定したのです。
ユーザー名・パスワードは適宜変更してください。
DBはDjangoのProject毎に必要です。
13年2月24日日曜日 25
26. 7. Django Project作成
# mkdir /var/www/django
# chown apache:apache -R /var/www/django
# cd /var/www/django
# django-admin.py startproject djangotest
・新規Projectの作り方
django-admin.py startproject [プロジェクト名]
昔のVerとはProjectの設定ファイル保存場所が変更されてる
ので注意。
今回の設定ファイル保存場所
/var/www/django/djangotest/djangotest
13年2月24日日曜日 26
27. 7. Django Project設定 1
DBの指定
# diff -u /var/www/django/djangotest/djangotest/settings.py{.orig,}
--- /var/www/django/djangotest/djangotest/settings.py.orig
+++ /var/www/django/djangotest/djangotest/settings.py
@@ -11,10 +11,10 @@
- 'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
- 'NAME': '', # Or path to database file if using sqlite3.
- 'USER': '', # Not used with sqlite3.
- 'PASSWORD': '', # Not used with sqlite3.
+ 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or
'oracle'.
+ 'NAME': 'djangotest', # Or path to database file if using sqlite3.
+ 'USER': 'djangotestadmin', # Not used with sqlite3.
+ 'PASSWORD': 'djangopass', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
ENGINE の指定の仕方に注意。
13年2月24日日曜日 27
28. 7. Django Project設定 2
言語とタイムゾーン設定
# diff -u /var/www/django/djangotest/djangotest/settings.py{.orig,}
--- /var/www/django/djangotest/djangotest/settings.py.orig
+++ /var/www/django/djangotest/djangotest/settings.py
@@ -24,11 +24,11 @@
-TIME_ZONE = 'America/Chicago'
+TIME_ZONE = 'Asia/Tokyo'
-LANGUAGE_CODE = 'en-us'
+LANGUAGE_CODE = 'ja'
設定変更を忘れると痛い目を見るので忘れずに修正する。
13年2月24日日曜日 28
29. 7. Django Project設定 3
adminページ設定 1
# diff -u /var/www/django/djangotest/djangotest/settings.py{.orig,}
--- /var/www/django/djangotest/djangotest/settings.py.orig
+++ /var/www/django/djangotest/djangotest/settings.py
@@ -116,9 +116,9 @@
- # 'django.contrib.admin',
+ 'django.contrib.admin',
- # 'django.contrib.admindocs',
+ 'django.contrib.admindocs',
不要であれば無効のままでもOK
13年2月24日日曜日 29
30. 7. Django Project設定 4
adminページ設定 2
# diff -u /var/www/django/djangotest/djangotest/urls.py{.orig,}
--- /var/www/django/djangotest/djangotest/urls.py.orig
+++ /var/www/django/djangotest/djangotest/urls.py
@@ -1,8 +1,8 @@
-# from django.contrib import admin
-# admin.autodiscover()
+from django.contrib import admin
+admin.autodiscover()
@@ -10,8 +10,8 @@
- # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
+ url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
- # url(r'^admin/', include(admin.site.urls)),
+ url(r'^admin/', include(admin.site.urls)),
不要であれば無効のままでもOK
13年2月24日日曜日 30
31. 7. Django Project設定 5
DB設定の適用
# cd /var/www/django/djangotest
# python manage.py syncdb
<出力省略>
You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'root'):
E-mail address: 適当なメールアドレス
Password: Djangoのrootパスワード
Password (again): 同上
Superuser created successfully.
<出力省略>
メールアドレスは必須項目のため省略不可です。
13年2月24日日曜日 31
32. 7. Django Project設定 6
wsgi ファイル作成
# cd /var/www/django/djangotest/djangotest
# cat djangotest.wsgi
import os, sys
sys.path.append('/var/www/django/djangotest')
os.environ['DJANGO_SETTINGS_MODULE'] = 'djangotest.settings'
os.environ['PYTHON_EGG_CACHE'] = '/var/www/.python-eggs'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
project毎に作成してください。
sys.path.appendのパスもProject毎に変更が必要です。
13年2月24日日曜日 32
33. 7. Django apache設定
# cat /etc/httpd/conf.d/django.conf
<VirtualHost *:80>
LoadModule wsgi_module modules/mod_wsgi.so
ServerName preble.zumwalt.info
Alias /static/admin /usr/local/lib/python2.7/site-packages/django/contrib/admin/static/admin
WSGIScriptAlias /djangotest /var/www/django/djangotest/djangotest/djangotest.wsgi
</VirtualHost>
# /etc/init.d/httpd start
# chkconfig httpd on
project毎に WSGIScriptAlias を追記してください。
Servername は適宜変更してください。
13年2月24日日曜日 33
34. 8. Django 諸々
アプリケーション作成
# cd /var/www/django/djangotest
# python manage.py startapp testapp01
・新規アプリケーションの作り方
アプリケーションを作成するProjectのフォルダ内で
python manage.py startapp [アプリケーション名]
adominページへのアクセス
http://[ホスト名orIP]/[Project名]/admin/
ドキュメント(英語)
https://docs.djangoproject.com/en/1.4/
13年2月24日日曜日 34
36. 8. Web2py インストール
# mkdir /usr/local/src/web2py
# cd /usr/local/src/web2py/
# wget http://www.web2py.com/examples/static/web2py_src.zip
# unzip web2py_src.zip
# cp -Rp web2py /var/www/.
# chown -R apache:apache /var/www/web2py
FedoraとかUbuntu用の設定スクリプトがありますが、
利用しようと思うとかなりの手直しが必要です。
インストールマニュアル変わりに程度にしたほうが…
13年2月24日日曜日 36
37. 8. Web2py SSL設定
# yum install mod_ssl
# mkdir /etc/httpd/ssl
# openssl genrsa 2048 > /etc/httpd/ssl/oreore.key
# openssl req -new -x509 -nodes -sha1 -days 3650 -key /etc/httpd/ssl/oreore.key > /etc/httpd/ssl/
oreore.cert
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Gifu
Locality Name (eg, city) [Default City]:hoge
Organization Name (eg, company) [Default Company Ltd]:hoge
Organizational Unit Name (eg, section) []:huga
Common Name (eg, your name or your server's hostname) []:hoge.huga.jp
Email Address []:
# openssl x509 -noout -fingerprint -text < /etc/httpd/ssl/oreore.cert > /etc/httpd/ssl/oreore.cer
# chmod 400 /etc/httpd/ssl/oreore.*
長は2048bitが最近の主流です。
有効期限とか検証なので10年、その他入力項目は適当に。
どうせオレオレ証明書ですし。
13年2月24日日曜日 37
38. 8. Web2py apache設定 1
# cat web2py.conf
NameVirtualHost *:80
NameVirtualHost *:443
LoadModule wsgi_module modules/mod_wsgi.so
LoadModule ssl_module modules/mod_ssl.so
Listen 443
SSLPassPhraseDialog builtin
SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout 300
SSLMutex default
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
WSGISocketPrefix run/wsgi
<続く>
ssl.conf を標準で使うと面倒なのでweb2py側に移植。
13年2月24日日曜日 38
39. <続き>
8. Web2py apache設定 2
<VirtualHost *:80>
WSGIDaemonProcess web2py user=apache group=apache display-name=%{GROUP}
WSGIProcessGroup web2py
WSGIScriptAlias / /var/www/web2py/wsgihandler.py
<Directory /var/www/web2py/>
AllowOverride None
Order Allow,Deny
Deny from all
<Files wsgihandler.py>
Allow from all
</Files>
</Directory>
AliasMatch ^/([^/]+)/static/(.*) /var/www/web2py/applications/$1/static/$2
<Directory /var/www/web2py/applications/*/static/>
Options -Indexes
Order Allow,Deny
Allow from all
</Directory>
<Location /admin>
Deny from all
</Location>
<LocationMatch ^/([^/]+)/appadmin>
Deny from all
</LocationMatch>
CustomLog /var/log/httpd/w2p_access_log common
ErrorLog /var/log/httpd/w2p_error_log
</VirtualHost>
<続く>
13年2月24日日曜日 39
40. 8. Web2py apache設定 3
<続き>
<VirtualHost *:443>
ServerName pinckney.zumwalt.info
DocumentRoot "/var/www/web2py"
SSLEngine on
SSLCertificateFile /etc/httpd/ssl/oreore.cert
SSLCertificateKeyFile /etc/httpd/ssl/oreore.key
WSGIProcessGroup web2py
WSGIScriptAlias / /var/www/web2py/wsgihandler.py
<Directory /var/www/web2py>
AllowOverride None
Order Allow,Deny
Deny from all
<Files wsgihandler.py>
Allow from all
</Files>
</Directory>
AliasMatch ^/([^/]+)/static/(.*) /var/www/web2py/applications/$1/static/$2
<Directory /var/www/web2py/applications/*/static/>
Order Allow,Deny
Allow from all
</Directory>
CustomLog /var/log/httpd/sw2p_access_log common
ErrorLog /var/log/httpd/sw2p_error_log
</VirtualHost>
adminページへのアクセスはhttpsにしないと動かない。
13年2月24日日曜日 40
41. 8. Web2py apache設定 4
デフォルト設定の無効化
# cd /etc/httpd/conf.d/
# mv welcome.conf welcome.conf.disable
# mv ssl.conf ssl.conf.disable
admin パスワード設定
# cd /var/www/web2py
# sudo -u apache python -c "from gluon.main import save_password; save_password(raw_input('admin password: '),443)"
admin password: [adminページのパスワード]
apache起動
# /etc/init.d/httpd start
# chkconfig httpd on
起動に失敗したらログと睨めっこしましょう♪
この資料書くのに3時間くらいは睨めっこしました
13年2月24日日曜日 41
42. 8. Web2py DB設定 1
DB作成
# mysql -u root -p
Enter password: mysqlのrootパスワード
mysql> create database web2py;
mysql> grant all on web2py.* TO web2pyadmin@localhost
identified BY 'web2pypass';
mysql> quit
mysqlのrootパスワードは「6.MySQL」で設定したのです。
ユーザー名・パスワードは適宜変更してください。
DBはWeb2pyのアプリケーション毎に必要です。
13年2月24日日曜日 42
43. 8. Web2py DB設定 2
DB設定
# diff -u /var/www/web2py/applications/welcome/models/db.py{.orig,}
--- /var/www/web2py/applications/welcome/models/db.py.orig
+++ /var/www/web2py/applications/welcome/models/db.py
@@ -11,7 +11,8 @@
- db = DAL('sqlite://storage.sqlite',pool_size=1,check_reserved=['all'])
+ ## db = DAL('sqlite://storage.sqlite',pool_size=1,check_reserved=['all'])
+ db = DAL('mysql://web2pyadmin:web2pypass@localhost/web2py')
DALの記載
mysql://ユーザ名:パスワード@localhost/データベース名
13年2月24日日曜日 43
44. 8. Web2py 諸々
デフォルトページ
http://[ホスト名orIP]/welcome
adminページ
https://[ホスト名orIP]/admin
日本語ドキュメント
http://web2py.com/books/default/chapter/31
13年2月24日日曜日 44
46. 9. まとめ
• 初心者はApacheとかに組込まずに開発用サーバー使
いましょう。 は 屋。
• Python勉強会の資料…?
• Djnago、Web2py共にアップデートで手順は変わって
いきます。過去の手順は参考程度に。
• nginx と uWSGI の組合せだともうちょっと簡単らい
いです。ただあまり融通が効かないとも。
13年2月24日日曜日 46