djangoとweb2pyをapacheに組込む
DESCRIPTION
TRANSCRIPT
DjangoとWeb2pyをapacheに組込む
Python東海 第21回 勉強会2013/2/23
坪内 由孝
113年2月24日日曜日
自己紹介• 坪内 由孝
仕事はインフラエンジニア? 最近は仮想化とかよくやってます。 プログラム?おいしいの?
• 連絡先的なblog : http://www.zumwalt.info/blogTwitter : a_wilhelm
213年2月24日日曜日
アジェンダ1. 注意事項
2. 前提条件・環境
3. DjangoとWeb2py
4. Pythonインストール
5. mod_wsgiインストール
6. MySQLインストール
7. Django - インストール - DB作成 - Project 作成・設定 - apache 設定
8. Web2py - インストール - apache・SSL 設定 - DB設定
9. まとめ313年2月24日日曜日
1. 注意事項
413年2月24日日曜日
1. 注意事項• DjangoとかWeb2pyがどういった物かというのは一切無いので期待しないでください。
• セキュリティがかなり甘いです。 →本番環境で使うとやばいです。
• パフォーマンスとか気にしてないです。 →やっぱ本番環境で使うとまずいです。
※自己責任で参考にしてください。
513年2月24日日曜日
2. 前提条件・環境
613年2月24日日曜日
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ページ用)
713年2月24日日曜日
3. DjangoとWeb2py
813年2月24日日曜日
3. DjangoとWeb2py
• どっちもWebフレームワーク
• どっちが使いやすいとか聞かれても正直わからん('A`)
• どっちも日本ユーザー会があるのでそちらを頼るほうが正しい答えが得られるよ!
• 更に言えば使い方もようわからん('A`)
913年2月24日日曜日
4. Python
1013年2月24日日曜日
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
前回の復讐復習です。
1113年2月24日日曜日
# 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
4. Pythonインストール 2
1213年2月24日日曜日
# 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
※前回なかった手順 urllib2利用の為に必要
4. Pythonインストール 3
1313年2月24日日曜日
# ./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 -VPython 2.7.3
• CFLAGS=-fPIC : gccのオプション。 共有ライブラリはPICにしたほうが動作が早いらしい。
• --enable-shared : 付けないとmod_wsgi入れる時にトラブルよ!(mod_wsgi インストールする環境のPythonには必須)
• --enable-unicode=ucs4 : WindowsAPIとかJAVAとか.Netの文字列とやりとりするなら ucs2。 Linx系単独ならucs4 (FedoraとかUbuntuはucs4)
configure オプションの説明
4. Pythonインストール 4
1413年2月24日日曜日
# 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
easy_install インストール
# easy_install pippip インストール
4. Pythonインストール 5
1513年2月24日日曜日
5. mod_wsgi
1613年2月24日日曜日
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
1713年2月24日日曜日
# 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=」のパラメーターを合わせます。
5. mod_wsgi インストール 2
1813年2月24日日曜日
6. MySQL
1913年2月24日日曜日
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使ったほうが幸せになれます。
2013年2月24日日曜日
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 を使うと幸せになれます。
2113年2月24日日曜日
ここまではDjango、Web2py共通の設定
2213年2月24日日曜日
7. Django
2313年2月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
MySQL_PythonはDjangoでMySQLを使う場合必須です。
# python>>> import django>>> django.VERSION(1, 4, 3, 'final', 0)
確認
2413年2月24日日曜日
7. Django DB設定# mysql -u root -pEnter 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毎に必要です。
DB作成
2513年2月24日日曜日
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
2613年2月24日日曜日
7. Django Project設定 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 @@ -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. }
DBの指定
ENGINE の指定の仕方に注意。2713年2月24日日曜日
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'
言語とタイムゾーン設定
設定変更を忘れると痛い目を見るので忘れずに修正する。2813年2月24日日曜日
7. Django Project設定 3# 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',
adminページ設定 1
不要であれば無効のままでもOK
2913年2月24日日曜日
7. Django Project設定 4# 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)),
adminページ設定 2
不要であれば無効のままでもOK3013年2月24日日曜日
7. Django Project設定 5# 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): yesUsername (leave blank to use 'root'): E-mail address: 適当なメールアドレスPassword: DjangoのrootパスワードPassword (again): 同上Superuser created successfully.<出力省略>
DB設定の適用
メールアドレスは必須項目のため省略不可です。
3113年2月24日日曜日
7. Django Project設定 6
# cd /var/www/django/djangotest/djangotest
# cat djangotest.wsgi import os, syssys.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()
wsgi ファイル作成
project毎に作成してください。sys.path.appendのパスもProject毎に変更が必要です。
3213年2月24日日曜日
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 は適宜変更してください。
3313年2月24日日曜日
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/
3413年2月24日日曜日
8. Web2py
3513年2月24日日曜日
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用の設定スクリプトがありますが、利用しようと思うとかなりの手直しが必要です。インストールマニュアル変わりに程度にしたほうが…
3613年2月24日日曜日
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.certCountry Name (2 letter code) [XX]:JPState or Province Name (full name) []:GifuLocality Name (eg, city) [Default City]:hogeOrganization Name (eg, company) [Default Company Ltd]:hogeOrganizational Unit Name (eg, section) []:hugaCommon 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年、その他入力項目は適当に。どうせオレオレ証明書ですし。
3713年2月24日日曜日
8. Web2py apache設定 1# cat web2py.confNameVirtualHost *:80NameVirtualHost *:443
LoadModule wsgi_module modules/mod_wsgi.soLoadModule ssl_module modules/mod_ssl.so
Listen 443SSLPassPhraseDialog builtinSSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)SSLSessionCacheTimeout 300SSLMutex defaultSSLRandomSeed startup file:/dev/urandom 256SSLRandomSeed connect builtinSSLCryptoDevice builtin
WSGISocketPrefix run/wsgi<続く>
ssl.conf を標準で使うと面倒なのでweb2py側に移植。3813年2月24日日曜日
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><続く> 3913年2月24日日曜日
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にしないと動かない。4013年2月24日日曜日
8. Web2py apache設定 4# cd /etc/httpd/conf.d/# mv welcome.conf welcome.conf.disable# mv ssl.conf ssl.conf.disable
デフォルト設定の無効化
# 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ページのパスワード]
admin パスワード設定
# /etc/init.d/httpd start# chkconfig httpd on
apache起動
起動に失敗したらログと睨めっこしましょう♪この資料書くのに3時間くらいは睨めっこしました
4113年2月24日日曜日
8. Web2py DB設定 1
# mysql -u root -pEnter password: mysqlのrootパスワードmysql> create database web2py; mysql> grant all on web2py.* TO web2pyadmin@localhost identified BY 'web2pypass';mysql> quit
DB作成
mysqlのrootパスワードは「6.MySQL」で設定したのです。ユーザー名・パスワードは適宜変更してください。DBはWeb2pyのアプリケーション毎に必要です。
4213年2月24日日曜日
8. Web2py DB設定 2# 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')
DB設定
DALの記載mysql://ユーザ名:パスワード@localhost/データベース名
4313年2月24日日曜日
8. Web2py 諸々デフォルトページ http://[ホスト名orIP]/welcome
日本語ドキュメント http://web2py.com/books/default/chapter/31
adminページ https://[ホスト名orIP]/admin
4413年2月24日日曜日
9. まとめ
4513年2月24日日曜日
9. まとめ• 初心者はApacheとかに組込まずに開発用サーバー使いましょう。餅は餅屋。
• Python勉強会の資料…?
• Djnago、Web2py共にアップデートで手順は変わっていきます。過去の手順は参考程度に。
• nginx と uWSGI の組合せだともうちょっと簡単らいいです。ただあまり融通が効かないとも。
4613年2月24日日曜日
10. 質問とか
4713年2月24日日曜日
おまけ
4813年2月24日日曜日