Skip to content
This repository has been archived by the owner on Jun 29, 2020. It is now read-only.

Django serverを用いてkawazを公開する

lambdalisue edited this page Sep 20, 2011 · 1 revision

Django serverを用いてKawazを公開する

ここではDjango serverの構築で構築したDjango用に構築されたUbuntu Server 11.04を用いて実際にKawazを構築する方法を記載する。

Warning

この記事はクリーンな環境に新しくKawazをインストールすることを目的として書かれています。すでにインストール済みのKawazを修正 する場合は公開されたKawazを修正するを参照してください

Kawaz固有で必要なパッケージのインストール

CSSTidy

Kawazでは django-compress というJavaScriptとCSSを圧縮して公開するためのプラグインを 使用している。このプラグインはCSSの圧縮のために CSSTidy を利用しているためこのパッケージをインストールする:

$ sudo apt-get install csstidy

Git

KawazはGithub上にソースコードを公開しており、クローンするためにGitが必要なためインストールする:

$ sudo apt-get install git

Ubuntu Server 11.04におけるPILコンパイルの問題を解決

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のクローン及びKawaz専用の仮想Python環境の構築

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に必要なPythonパッケージのインストールおよびKawazのインストール

Kawazに必要なパッケージはすべて setup.pyinstall_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へのインストール

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 の部分は 各自適切なパスワードを指定すること。

このように特定のデータベースしかいじれないユーザーを作成することでクラッキング時などの被害やヒューマンエラーによる 被害を最小限に食い止めることができるため必ず特定データベースしか弄れないユーザーを作成し、そのユーザーを使用して データベースをマシーナリーに編集すること。

local_settings.py の準備

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パッケージのインストール

公開用サーバーではデバッグサーバーでは使用しない以下の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

次にデータベースへのデータの書き込みを行う。以下二通りから条件に一致するものを選択する。

1. テスト用にKawazを構築している場合

デバッグサイトと同様にサンプルデータを用いて構築を行う。以下コマンドにて可能:

(env)$ sudo env/bin/python src/Kawaz/manage.py loaddata debug

2. 既存のKawazから別マシンへの移管を行っている場合

既存のKawazからの移管を行っている場合は以下の二つのデータが必要になる。

  1. MySQL内に保存されている全てのデータ
  2. 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 にて適切な所有権およびパーミッションの設定を行う

公開用サイトのApacheによる公開

最後にデバッグ用サイトと同様にサイトの公開を以下コマンドにて行う:

$ sudo a2dissite dev.kawaz.org
$ sudo a2ensite www.kawaz.org
$ sudo service apache2 reload