Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Djangoとweb2pyをapacheに組込む

2,172 views

Published on

Published in: Technology
  • Be the first to comment

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

×