HOT Tasking Manager2構築メモ


* 対象のリポジトリ: [HOT Tasking Manager2](https://github.com/hotosm/osm-tasking-manager2)
* 環境: Ubuntu14.04 LTS, python2.7

バニラ環境から構築する場合のメモ。
基本的に公式ドキュメントの通りだけど、ところどころ忘れそうなので。

### インストール環境のインストール

まずはgitと、easy_installのインストール。

``` bash
sudo apt-get install git
sudo apt-get install python-setuptools
```

### リポジトリのクローン
適当なディレクトリでリポジトリのclone。
pythonの仮想環境を作成。

``` bash
git clone --recursive git://github.com/hotosm/osm-tasking-manager2.git
cd osm-tasking-manager2
sudo easy_install virtualenv
virtualenv --no-site-packages env
./env/bin/pip install -r requirements.txt
```

### PostGISのインストール
バックエンドとなるPostGISのインストール。
Ubuntu14.04はデフォルトがPostGIS2.0系なので、素直にインストールすればOK。

``` bash
sudo apt-get install postgis
sudo apt-get install postgresql-server-dev-9.3
sudo apt-get install postgresql-9.3-postgis-2.1 
```

データベースのユーザを作成。この場合、`www-data`という名前のユーザを作成する。

```
sudo -u postgres createuser -SDRP www-data
```

Tasking Manager用に`osmtm`というデータベースを作成して、PostGIS拡張(エクステンション)を導入。

``` bash
sudo -u postgres createdb -O www-data osmtm
sudo -u postgres psql -d osmtm -c "CREATE EXTENSION postgis;"
```

### local.iniファイルの設定
`local.ini`というファイルを作成する。
場所はどこでもよい。
ファイルの中身に、ローカル設定を記述する。例えば以下のようなかんじ。

```
[app:main]
sqlalchemy.url = postgresql://www-data:www-data@localhost/osmtm
```

`local.ini`ファイルを、`LOCAL_SETTINGS_PATH`環境変数に設定する。例えば以下のようなかんじ。

``` bash
LOCAL_SETTINGS_PATH=/home/nyampire/git/osm-tasking-manager2/local.ini
export $LOCAL_SETTINGS_PATH

```

### データベースの初期化
データベースの初期化を行う。
以下のコマンドを叩けばOK。

``` bash
./env/bin/initialize_osmtm_db
```

そのとき、僕の環境では`SAWarning`というエラーメッセージが表示されたけれども、初期化自体は特に問題なく完了しているので[無視して大丈夫そう](https://github.com/hotosm/osm-tasking-manager2/issues/447)。

### 仮起動
pserveで仮起動をしてみる。

```
./env/bin/pserve --reload development.ini
```

port 6543で起動するので、ブラウザを開いて、`http://[domain]:6543`を入力して起動を確認する。
止めるときには普通に `ctrl+C`。

### mod_wsgi経由での起動
pserveではなく、Apacheのmod_wsgiの背後で動くように設定を行う。

なにはともあれ、apacheとmod_wsgiをインストール。

``` bash
sudo apt-get install apache2
sudo apt-get install libapache2-mod-wsgi
```

/etc/apache2/site-availableに設定ファイルを作って、apache側設定。

``` bash
cd /etc/apache2/site-available
sudo touch ./001-osmtm.conf
sudo vi ./001-osmtm.conf
```

ファイルの中身はこんなかんじ。

```
WSGIDaemonProcess OSMTM_process user=ubuntu group=ubuntu processes=1 \
        threads=4 \
        python-path=/home/ubuntu/osm-tasking-manager2:/home/ubuntu/osm-tasking-manager2/env/lib/python2.7/site-packages
WSGIRestrictStdin Off

<VirtualHost *:80>
        ServerName example.org
        # Use only 1 Python sub-interpreter.  Multiple sub-interpreters
        # play badly with C extensions.
        WSGIPassAuthorization On
        WSGIScriptAlias /osmtm /home/ubuntu/osm-tasking-manager2/env/OSMTM.wsgi

        <Location />
            WSGIProcessGroup OSMTM_process
            WSGIApplicationGroup %{GLOBAL}
        </Location>

        <Directory /home/ubuntu/osm-tasking-manager2/env>
            <Files OSMTM.wsgi>
                Require all granted
            </Files>
            Order allow,deny
            Allow from all
        </Directory>

        LogLevel warn

        CustomLog /var/log/apache2/osmtm-access.log combined
        ErrorLog /var/log/apache2/osmtm-error.log
</VirtualHost>
```

上記ファイルのうち、`python-path`と`ServerName`を自分の環境に合わせて変更。

```
python-path=/home/nyampire/git/osm-tasking-manager2:/home/nyampire/git/osm-tasking-manager2/env/lib/python2.7/site-packages
```

`WSGIScriptAlias`は、この設定の場合、`http://[domain]/osmtm`でアクセスがあった場合にTasking Managerを起動するようになっている。

* `/osmtm`の部分を適度に修正すること。
* `OSMTM.wsgi`の部分を修正して、自分の環境に配置されている`production.wsgi`ファイルに変更すること。

例えばこんなかんじ。

```
        WSGIScriptAlias / /home/nyampire/git/osm-tasking-manager2/production.wsgi
```

それにあわせて、ディレクティブの指定対象も変える。

```
        <Directory /home/ubuntu/osm-tasking-manager2/env>
            <Files OSMTM.wsgi>
```

たとえばこんなかんじ。

```
        <Directory /home/nyampire/git/osm-tasking-manager2>
            <Files production.wsgi>
```

上記の修正が完了したら、`a2enmod`でもなんでもいいので、設定ファイルを`site-enabled`に格納してサイトを有効化して、Apacheを再起動。

``` bash
sudo ln -s /etc/apache2/site-available/001-osmtm.conf /etc/apache2/site-enabled/
sudo /etc/init.d/apache2 restart
```

### 多言語翻訳の有効化
言語ファイルの初期化を行う。
仮想環境のpythonを使うようにする。

``` bash
cd /home/nyampire/git/osm-tasking-manager2
./env/bin/python setup.py extract_messages
./env/bin/python setup.py init_catalog -l en
./env/bin/python setup.py update_catalog
./env/bin/python setup.py compile_catalog
```

### Transifexからの言語ファイル取得
Transifexから、言語ファイルをダウンロードして設定する。

``` bash
sudo apt-get install transifex-client
cd ~/git/osm-tasking-manager2
tx init
```

Transifexへの接続設定ファイルは `~/.transifexrc`ファイルに格納されている。
Transifexのusernameとpasswordを、`.transifexrc`に設定する。

設定ファイルのサンプルは、`.tx/config`に格納されているので参考にすると幸せ。というか、そのまま使う。
サンプルコンフィグでは、transifexのmaster側を使うように設定されているので、開発版のcurrent側を使いたい場合は、configの記述を変更。

ソース言語の設定を行い、Transifexから言語ファイル(.po)を取得。
取得が行われたら、.poから .moをコンパイルしてサイト上で利用できるようにする。
コンパイルが完了したら、apacheを再起動。

``` bash
cd /home/nyampire/git/osm-tasking-manager2
tx set --source -r osm-tasking-manager2.master -l en osmtm/locale/en/LC_MESSAGES/osmtm.po
tx pull
./env/bin/python setup.py compile_catalog
sudo /etc/init.d/apache2 restart
```

とりあえずこんなかんじで、うまくゆく、はず。