Djangoとweb2pyをapacheに組込む

2,073 views

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,073
On SlideShare
0
From Embeds
0
Number of Embeds
396
Actions
Shares
0
Downloads
4
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Djangoとweb2pyをapacheに組込む

  1. 1. DjangoとWeb2pyを apacheに組込む Python東海 第21回 勉強会 2013/2/23 坪内 由孝13年2月24日日曜日 1
  2. 2. 自己紹介 • 坪内 由孝 仕事はインフラエンジニア? 最近は仮想化とかよくやってます。 プログラム?おいしいの? • 連絡先的な blog : http://www.zumwalt.info/blog Twitter : a_wilhelm13年2月24日日曜日 2
  3. 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
  4. 4. 1. 注意事項13年2月24日日曜日 4
  5. 5. 1. 注意事項 • DjangoとかWeb2pyがどういった物かというのは 一切無いので期待しないでください。 • セキュリティがかなり甘いです。 →本番環境で使うとやばいです。 • パフォーマンスとか気にしてないです。 →やっぱ本番環境で使うとまずいです。 ※自己責任で参考にしてください。13年2月24日日曜日 5
  6. 6. 2. 前提条件・環境13年2月24日日曜日 6
  7. 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
  8. 8. 3. DjangoとWeb2py13年2月24日日曜日 8
  9. 9. 3. DjangoとWeb2py • どっちもWebフレームワーク • どっちが使いやすいとか聞かれても正直わか らん(A`) • どっちも日本ユーザー会があるのでそちらを 頼るほうが正しい答えが得られるよ! • 更に言えば使い方もようわからん(A`)13年2月24日日曜日 9
  10. 10. 4. Python13年2月24日日曜日 10
  11. 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-devel13年2月24日日曜日 11
  12. 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.313年2月24日日曜日 12
  13. 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 -lcrypto13年2月24日日曜日 13
  14. 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. 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 pip13年2月24日日曜日 15
  16. 16. 5. mod_wsgi13年2月24日日曜日 16
  17. 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.gz13年2月24日日曜日 17
  18. 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
  19. 19. 6. MySQL13年2月24日日曜日 19
  20. 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. 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
  22. 22. ここまではDjango、 Web2py共通の設定13年2月24日日曜日 22
  23. 23. 7. Django13年2月24日日曜日 23
  24. 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. 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. 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/djangotest13年2月24日日曜日 26
  27. 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. 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. 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, 不要であれば無効のままでもOK13年2月24日日曜日 29
  30. 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)), 不要であれば無効のままでもOK13年2月24日日曜日 30
  31. 31. 7. Django Project設定 5 DB設定の適用 # cd /var/www/django/djangotest # python manage.py syncdb <出力省略> You just installed Djangos auth system, which means you dont 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. 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. 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. 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
  35. 35. 8. Web2py13年2月24日日曜日 35
  36. 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. 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.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 servers hostname) []:hoge.huga.jpEmail 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. 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. 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. 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. 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. 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. 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. 44. 8. Web2py 諸々 デフォルトページ http://[ホスト名orIP]/welcome adminページ https://[ホスト名orIP]/admin 日本語ドキュメント http://web2py.com/books/default/chapter/3113年2月24日日曜日 44
  45. 45. 9. まとめ13年2月24日日曜日 45
  46. 46. 9. まとめ • 初心者はApacheとかに組込まずに開発用サーバー使 いましょう。 は 屋。 • Python勉強会の資料…? • Djnago、Web2py共にアップデートで手順は変わって いきます。過去の手順は参考程度に。 • nginx と uWSGI の組合せだともうちょっと簡単らい いです。ただあまり融通が効かないとも。13年2月24日日曜日 46
  47. 47. 10. 質問とか13年2月24日日曜日 47
  48. 48. おまけ13年2月24日日曜日 48

×