djangoとweb2pyをapacheに組込む

48
DjangoWeb2pyapacheに組込む Python東海 21勉強会 2013/2/23 坪内 由孝 1 13224日日曜日

Upload: yoshitaka-tsubouchi

Post on 23-Jan-2015

1.154 views

Category:

Technology


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Djangoとweb2pyをapacheに組込む

DjangoとWeb2pyをapacheに組込む

Python東海 第21回 勉強会2013/2/23

坪内 由孝

113年2月24日日曜日

Page 2: Djangoとweb2pyをapacheに組込む

自己紹介• 坪内 由孝

仕事はインフラエンジニア? 最近は仮想化とかよくやってます。 プログラム?おいしいの?

• 連絡先的なblog : http://www.zumwalt.info/blogTwitter : a_wilhelm

213年2月24日日曜日

Page 3: Djangoとweb2pyをapacheに組込む

アジェンダ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日日曜日

Page 4: Djangoとweb2pyをapacheに組込む

1. 注意事項

413年2月24日日曜日

Page 5: Djangoとweb2pyをapacheに組込む

1. 注意事項• DjangoとかWeb2pyがどういった物かというのは一切無いので期待しないでください。

• セキュリティがかなり甘いです。 →本番環境で使うとやばいです。

• パフォーマンスとか気にしてないです。 →やっぱ本番環境で使うとまずいです。

※自己責任で参考にしてください。

513年2月24日日曜日

Page 6: Djangoとweb2pyをapacheに組込む

2. 前提条件・環境

613年2月24日日曜日

Page 7: Djangoとweb2pyをapacheに組込む

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日日曜日

Page 8: Djangoとweb2pyをapacheに組込む

3. DjangoとWeb2py

813年2月24日日曜日

Page 9: Djangoとweb2pyをapacheに組込む

3. DjangoとWeb2py

• どっちもWebフレームワーク

• どっちが使いやすいとか聞かれても正直わからん('A`)

• どっちも日本ユーザー会があるのでそちらを頼るほうが正しい答えが得られるよ!

• 更に言えば使い方もようわからん('A`)

913年2月24日日曜日

Page 10: Djangoとweb2pyをapacheに組込む

4. Python

1013年2月24日日曜日

Page 11: Djangoとweb2pyをapacheに組込む

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日日曜日

Page 12: Djangoとweb2pyをapacheに組込む

# 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日日曜日

Page 13: Djangoとweb2pyをapacheに組込む

# 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日日曜日

Page 14: Djangoとweb2pyをapacheに組込む

# ./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日日曜日

Page 15: Djangoとweb2pyをapacheに組込む

# 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日日曜日

Page 16: Djangoとweb2pyをapacheに組込む

5. mod_wsgi

1613年2月24日日曜日

Page 17: Djangoとweb2pyをapacheに組込む

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日日曜日

Page 18: Djangoとweb2pyをapacheに組込む

# 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日日曜日

Page 19: Djangoとweb2pyをapacheに組込む

6. MySQL

1913年2月24日日曜日

Page 20: Djangoとweb2pyをapacheに組込む

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日日曜日

Page 21: Djangoとweb2pyをapacheに組込む

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日日曜日

Page 22: Djangoとweb2pyをapacheに組込む

ここまではDjango、Web2py共通の設定

2213年2月24日日曜日

Page 23: Djangoとweb2pyをapacheに組込む

7. Django

2313年2月24日日曜日

Page 24: Djangoとweb2pyをapacheに組込む

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日日曜日

Page 25: Djangoとweb2pyをapacheに組込む

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日日曜日

Page 26: Djangoとweb2pyをapacheに組込む

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日日曜日

Page 27: Djangoとweb2pyをapacheに組込む

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日日曜日

Page 28: Djangoとweb2pyをapacheに組込む

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日日曜日

Page 29: Djangoとweb2pyをapacheに組込む

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日日曜日

Page 30: Djangoとweb2pyをapacheに組込む

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日日曜日

Page 31: Djangoとweb2pyをapacheに組込む

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日日曜日

Page 32: Djangoとweb2pyをapacheに組込む

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日日曜日

Page 33: Djangoとweb2pyをapacheに組込む

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日日曜日

Page 34: Djangoとweb2pyをapacheに組込む

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日日曜日

Page 35: Djangoとweb2pyをapacheに組込む

8. Web2py

3513年2月24日日曜日

Page 36: Djangoとweb2pyをapacheに組込む

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日日曜日

Page 37: Djangoとweb2pyをapacheに組込む

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日日曜日

Page 38: Djangoとweb2pyをapacheに組込む

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日日曜日

Page 39: Djangoとweb2pyをapacheに組込む

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日日曜日

Page 40: Djangoとweb2pyをapacheに組込む

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日日曜日

Page 41: Djangoとweb2pyをapacheに組込む

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日日曜日

Page 42: Djangoとweb2pyをapacheに組込む

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日日曜日

Page 43: Djangoとweb2pyをapacheに組込む

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日日曜日

Page 44: Djangoとweb2pyをapacheに組込む

8. Web2py 諸々デフォルトページ http://[ホスト名orIP]/welcome

日本語ドキュメント http://web2py.com/books/default/chapter/31

adminページ https://[ホスト名orIP]/admin

4413年2月24日日曜日

Page 45: Djangoとweb2pyをapacheに組込む

9. まとめ

4513年2月24日日曜日

Page 46: Djangoとweb2pyをapacheに組込む

9. まとめ• 初心者はApacheとかに組込まずに開発用サーバー使いましょう。餅は餅屋。

• Python勉強会の資料…?

• Djnago、Web2py共にアップデートで手順は変わっていきます。過去の手順は参考程度に。

• nginx と uWSGI の組合せだともうちょっと簡単らいいです。ただあまり融通が効かないとも。

4613年2月24日日曜日

Page 47: Djangoとweb2pyをapacheに組込む

10. 質問とか

4713年2月24日日曜日

Page 48: Djangoとweb2pyをapacheに組込む

おまけ

4813年2月24日日曜日