-
Notifications
You must be signed in to change notification settings - Fork 0
Django serverを用いてkawazを公開する
ここではDjango serverの構築で構築したDjango用に構築されたUbuntu Server 11.04を用いて実際にKawazを構築する方法を記載する。
Warning
この記事はクリーンな環境に新しくKawazをインストールすることを目的として書かれています。すでにインストール済みのKawazを修正 する場合は公開されたKawazを修正するを参照してください
Kawazでは django-compress というJavaScriptとCSSを圧縮して公開するためのプラグインを 使用している。このプラグインはCSSの圧縮のために CSSTidy を利用しているためこのパッケージをインストールする:
$ sudo apt-get install csstidy
KawazはGithub上にソースコードを公開しており、クローンするためにGitが必要なためインストールする:
$ sudo apt-get install git
Ubuntu Server 11.04では Python Imaging Library (PIL) のコンパイルに必要な
いくつかのライブラリが通常の場所とは違うところにインストールされるためPILを pip
コマンドなどでインストールするとJEPG
ファイルのサポートなどが利用できない問題が発生する。
この問題を解決する最も簡単な方法としてインストールされた各種ライブラリファイルを適切な位置にリンクしてやる必要がある。この作業は 手動でも問題ない量だが幾分面倒なのでワンライナースクリプトを利用して行う。詳細は http://ubuntuforums.org/showthread.php?t=1751455 に書いてあるため参照すること:
$ wget -q -O - https://raw.github.com/gist/1225180/patch.sh | sudo bash
上記コマンドによって自動的に必要なライブラリパッケージ(下記)のインストールと適切なリンクが行われる。
- build-essential
- python-dev
- libjpeg62-dev
- zlib1g-dev
- libfreetype6-dev
- liblcms1-dev
KawazはGithub上に公開されているためこれを閲覧専用レポジトリとしてクローンする。クローン場所は /var/www
下と仮定する。
なおいきなり公開用としてインストールするのではなくデバッグ用としてインストールするためクローン先を Kawaz.dev
としている:
$ cd /var/www $ sudo git clone git://github.com/kawazrepos/Kawaz.git Kawaz.dev
次にクローンしたKawaz専用のPython仮想環境の構築を行う。なお作業を楽にすすめるために一時的に Kawaz.dev
ディレクトリの全てのファイルの所有権
を現在操作中のユーザーに変更している:
$ sudo chown -R `whoami` Kawaz.dev $ cd Kawaz.dev $ virtualenv --distribute --no-site-packages env $ source env/bin/activate
最後のコマンドを実行することで仮想Python環境に入ることができる。仮想環境に入ると括弧書きで現在居る仮想環境が以下のように 示されるためパッケージのインストールなどを行うときは常に確認すること:
(env)alisue@virtual:/var/www/Kawaz.dev$
なおこれ以後 $ の前に (env) と書かれている場合は仮想Python環境下で作業が行われていることを示す。
virtualenv
コマンドでインストールされた仮想Pythonは env/lib
下に各種ライブラリがインストールされるが
バージョン情報がフォルダ名に付いているため汎用的なアクセスができない。したがって現在使用している最新バージョンの
Pythonに対してのリンクを作成する(下記コマンドはPython 2.7がインストールされていることを仮定している):
$ cd env/lib $ python2.7 python $ cd python/site-packages $ Django-1.3.1-py2.7.egg/django django $ cd ../../../../
Kawazに必要なパッケージはすべて setup.py
の install_requires
に記載されている。
したがってKawazをインストールすればこれらのパッケージは自動的にインストールされる。
ここで注意が必要なのが python setup.py install
にてKawazをインストールしてしまうと
Kawazのソースコードに変更があった場合などに再度Kawazのインストールを実行する必要がある
ことである。したがって install
コマンドではなく develop
コマンドを使用して開発版
としてインストールしてやることでリンクを生成するようにしてやる:
(env)$ python setup.py develop
なおインストールしたいものがKawazではなく他のDjangoアプリの場合はそれぞれのアプリに必要なパッケージのインストールを行うこと。
これまでにKawaz (Djangoサイト)を起動するために必要な準備が整ったので次にサンプルデータベースの構築を行う。 サンプルデーターベースを構築することでインストールしたKawazが実際に起動するかの確認を行う意図があるので行うことをおすすめする:
(env)$ yes no | python src/Kawaz/manage.py syncdb (env)$ python src/Kawaz/manage.py loaddata debug
なお最初のコマンドで yes no |
としているのは loaddata debug
コマンドによってAdminユーザーが作成されるためである。Kawaz
をインストールしている場合以外は通常通り python src/Kawaz/manage.py syncdb
としAdminユーザーを手作業で作成することをおすすめする。
Apache設定ファイルを適切な箇所へリンクしてデバッグ用および公開用サイトをインストールしてやる。なお設定ファイルはデバッグ用Kawazが
/var/www/Kawaz.dev
に、公開用Kawazが /var/www/Kawaz
にインストールされていることを前提にして書かれている:
$ sudo ln -s /var/www/Kawaz/utils/conf/www.kawaz.org /etc/apache2/sites-available/ $ sudo ln -s /var/www/Kawaz.dev/utils/conf/dev.kawaz.org /etc/apache2/sites-available/
次に使用しない default
サイトを停止する。これはApacheインストール時に自動的に開始されたサイトである:
$ sudo a2dissite default
a2dissite
コマンドを使用するとApacheを再起動するように言われるが、あとでKawazサイトをApacheで開始した後に再起動を行うためここでは無視して構わない。
先に所有権を現在編集中のユーザーに変更したがApacheを用いて公開する場合は所有者を www-data
に変更する必要がある。
また local_settings.py
などのセキュアな情報を格納しているファイルのパーミッションを適切に設定してやる必要がある。
これらは手作業で行うと非常に手間がかかるため自動的に行うスクリプトを用意したのでそれを用いて設定を行う:
$ sudo ./utils/setup/chmod_permission.sh
なおこのコマンドは Kawaz ディレクトリに対して sudo
を用いて処理を行いファイルの所有権が変わってしまった場合など
も同様に何度でも使用すること。 多くの理解不能なエラーは所有権・パーミッションが適切に設定されていないことが原因で
起こる ことを常に念頭に置くこと。
ここまででデバッグ用サイトの公開を開始する準備が整ったので以下コマンドにて公開を開始する:
$ sudo a2ensite dev.kawaz.org $ sudo service apache2 reload
コマンド実行後にブラウザでアクセスするとデバッグ用のKawazが表示されるはずである。なおDjango serverの構築にて VirtualBoxを使用し適切にポートフォワーディングを設定してあれば http://localhost:8080 にて確認できる。
デバッグ用サイトにてKawazが問題なく起動することが確認できたら実際の公開用サイトの構築に入る。 すでに構築済みのデバッグ用サイトを以下コマンドにてコピーして使用する:
$ cd /var/www $ sudo cp -aR Kawaz.dev Kawaz
公開用サイトはデータベースにMySQLを使用するためまずMySQLにてデータベースおよびデータベースアクセス用ユーザーを作成する。
ターミナルにて mysql -u root -p
(パスワードを指定していない場合は mysql -u root
)としてMySQLを起動し:
mysql> CREATE DATABASE Kawaz_db; mysql> GRANT ALL PRIVILEGES ON Kawaz_db.* TO Kawaz@localhost IDENTIFIED BY 'password'; mysql> FLUSH PRIVILEGES;
として Kawaz_db
データベースおよび Kawaz
ユーザーを作成する。 password
の部分は
各自適切なパスワードを指定すること。
このように特定のデータベースしかいじれないユーザーを作成することでクラッキング時などの被害やヒューマンエラーによる 被害を最小限に食い止めることができるため必ず特定データベースしか弄れないユーザーを作成し、そのユーザーを使用して データベースをマシーナリーに編集すること。
Kawazでは local_settings.py
という名前のファイルが存在する場合は settings.py
の設定を上書きするようになっている。
また local_settings.py
は .gitignore
に書かれているためGithubで公開されることはない。したがってパスワードや環境依存的
なコードはこの local_settings.py
に書くことになる。
この local_settings.py
だが雛形が local_settings.sample.py
として用意されているためこれを元に記述をしていく。以下コマンド
にてこのファイルをコピーして使用する:
$ cd Kawaz $ sudo cp src/Kawaz/local_settings.sample.py src/Kawaz/local_settings.py
このファイルをここでは以下のように修正した:
# ... 省略 DEBUG = False TEMPLATE_DEBUG = DEBUG # ... 省略 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'Kawaz_db', 'USER': 'Kawaz', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '', } } # ... 省略
なおパスワードなどいくつか空欄の部分があるが、これらは各自設定を行うもしくは管理者に適切な値の問い合わせをして埋める。 ちなみにこれらの部分が空欄でもKawazは(いくつかの機能を除き)動作するためテストとして構築を行っている場合は無視しても構わない。
公開用サーバーではデバッグサーバーでは使用しない以下のPythonパッケージをインストールする必要がある(2011/09/20の段階で)
- pysolr: PythonとSolrをつなぐためのパッケージ
- MySQL-python: PythonとMySQLをつなぐためのパッケージ
- python-memcached: Pythonとmemcachedをつなぐためのパッケージ
これらは ``local_settings.py`` で ``DEBUG=False`` が指定されていない限り 先に行った python setup.py develop
ではインストールされない。
したがって公開用サイトでは先のlocal_settings.pyの準備が終わった後にもう一度 python setup.py develop
を行う必要がある。また所有権が www-data
になっているため現在使用しているユーザーに一時的に設定しなおしている:
(env)$ deactivate $ cd /var/www $ sudo chown -R `whoami` Kawaz $ cd Kawaz $ source env/bin/activate (env)$ python setup.py develop
もしも先の Kawaz.dev
の仮想環境内にいた場合は deactivate
コマンドにて一度仮想環境から抜けてから再度 Kawaz
の仮想環境内に
入ること。括弧内の表記が全く同じなためどちらの環境に居るか分かりにくいため最新の注意を払うこと。
最後に公開用サイトのデータベースの構築を行う。MySQL上にてデータベースの構築を行うためルート権限が必要だが
sudo
を付けると python
はシステムにインストールされているものを使用してしまうため絶対パスを指定して
使用する python を指定している:
(env)$ sudo env/bin/python src/Kawaz/manage.py syncdb
次にデータベースへのデータの書き込みを行う。以下二通りから条件に一致するものを選択する。
デバッグサイトと同様にサンプルデータを用いて構築を行う。以下コマンドにて可能:
(env)$ sudo env/bin/python src/Kawaz/manage.py loaddata debug
既存のKawazからの移管を行っている場合は以下の二つのデータが必要になる。
- MySQL内に保存されている全てのデータ
-
statics/storage
内に保存されている全てのファイル
まず既存マシンから以下コマンドにてSQL情報をダンプしてくる:
$ mysqldump -u root -p Kawaz_db > dump.sql
ここでダンプした dump.sql
を何らかの方法を用いて新鯖に持ってくる。ここでは使用しているユーザーの
ホームディレクトリに持ってきたと仮定すると以下コマンドにてデータベースを復元できる:
$ mysql -u root -p Kawaz_db < ~/dump.sql
次にアップロードされた全てのファイルをダンプしてくる:
$ cd /var/www/Kawaz $ tar zcvf dump.tar.gz statics/storage
ここでダンプした dump.tar.gz
ファイルをなんらかの方法を用いて新鯖に持ってくる。ここでは使用しているユーザーの
ホームディレクトリに持ってきたと仮定すると以下コマンドにてファイルを復元できる:
$ tar zxvf dump.tar.gz -C /var/www/Kawaz
最後に utils/setup/chmod_permissions.sh
にて適切な所有権およびパーミッションの設定を行う
最後にデバッグ用サイトと同様にサイトの公開を以下コマンドにて行う:
$ sudo a2dissite dev.kawaz.org $ sudo a2ensite www.kawaz.org $ sudo service apache2 reload