DjangoとWeb2pyを
               apacheに組込む
                 Python東海 第21回 勉強会
                      2013/2/23

                      坪内 由孝




13年2月24日日曜日                          1
自己紹介
              •   坪内 由孝
                  仕事はインフラエンジニア?
                  最近は仮想化とかよくやってます。
                  プログラム?おいしいの?

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



13年2月24日日曜日                                             2
アジェンダ
                             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
1. 注意事項



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

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

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

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


13年2月24日日曜日                                     5
2. 前提条件・環境



13年2月24日日曜日                6
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
3. DjangoとWeb2py



13年2月24日日曜日                      8
3. DjangoとWeb2py
              •   どっちもWebフレームワーク

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

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

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


13年2月24日日曜日                              9
4. Python



13年2月24日日曜日               10
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
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
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
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
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
5. mod_wsgi



13年2月24日日曜日                 16
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
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
6. MySQL



13年2月24日日曜日              19
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
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
ここまではDjango、
              Web2py共通の設定


13年2月24日日曜日                  22
7. Django



13年2月24日日曜日               23
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
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
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
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
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
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
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
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
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
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
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
8. Web2py



13年2月24日日曜日               35
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
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
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
<続き>
         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
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
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
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
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
8. Web2py 諸々
 デフォルトページ
      http://[ホスト名orIP]/welcome


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


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

13年2月24日日曜日                                    44
9. まとめ



13年2月24日日曜日            45
9. まとめ
              •   初心者はApacheとかに組込まずに開発用サーバー使
                  いましょう。   は   屋。


              •   Python勉強会の資料…?


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


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


13年2月24日日曜日                                        46
10. 質問とか



13年2月24日日曜日              47
おまけ



13年2月24日日曜日         48

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
  • 4.
  • 5.
    1. 注意事項 • DjangoとかWeb2pyがどういった物かというのは 一切無いので期待しないでください。 • セキュリティがかなり甘いです。 →本番環境で使うとやばいです。 • パフォーマンスとか気にしてないです。 →やっぱ本番環境で使うとまずいです。 ※自己責任で参考にしてください。 13年2月24日日曜日 5
  • 6.
  • 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.
  • 9.
    3. DjangoとWeb2py • どっちもWebフレームワーク • どっちが使いやすいとか聞かれても正直わか らん('A`) • どっちも日本ユーザー会があるのでそちらを 頼るほうが正しい答えが得られるよ! • 更に言えば使い方もようわからん('A`) 13年2月24日日曜日 9
  • 10.
  • 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
  • 16.
  • 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
  • 19.
  • 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
  • 22.
    ここまではDjango、 Web2py共通の設定 13年2月24日日曜日 22
  • 23.
  • 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
  • 35.
  • 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
  • 45.
  • 46.
    9. まとめ • 初心者はApacheとかに組込まずに開発用サーバー使 いましょう。 は 屋。 • Python勉強会の資料…? • Djnago、Web2py共にアップデートで手順は変わって いきます。過去の手順は参考程度に。 • nginx と uWSGI の組合せだともうちょっと簡単らい いです。ただあまり融通が効かないとも。 13年2月24日日曜日 46
  • 47.
  • 48.