Kandan（Webチャット）インストール

---
Ruby on Rails製のオープンソース・ソフトウェア（GNU Affero General Public License）
HipChatのクローン。

チームで活動をする際に、リアルタイムで文字のコミュニケーションをとりたいけど、以下のような困ったことがある場合に使えそう。

* メールだとリアルタイム性がないのでスピード感が出ない
* Skypeなどのインターネットに出るものは禁止されている
* IPMessengerだと1対1が基本なので情報共有が難しい

Railsのため、Redmineなどと一緒に入れやすく、チーム活動に役立てやすい。また必要なら自分でもカスタマイズできるという利点がある。

http://kandanapp.com/
https://github.com/kandanapp/kandan


## 更新情報
* 2015/10/11 いろいろアップデートしたので対応
* 2014/08/31 ruby2.0系にも対応したようです。

---

# 環境

| 項目 | 内容（バージョン/パス等） |
|:--|:---|
| Cent OS | 6.5 |
| Kandan | 1.2 |
| ruby | 2.0.0p481 (2014-05-08 revision 45883)|
| gem | 2.4.8 |
| rails | 3.2.21 |
| environment | production |
| database adapter | mysql2 |
| アプリディレクトリ | /usr/local/apl/kandan |
| URL | http://[hostname]:3000 |
| webサーバ | thin |

---

# インストール手順

## 0. ネットワーク関連
iptables、ip6tables、selinuxなどは必要に応じて設定。

## 1. yumパッケージ

### 1.1. パッケージインストール

```
インストール
# yum install gcc gcc-c++
# yum install git
# yum install libxslt-devel libxml2-devel postgresql-devel
# yum install mysql-server mysql-devel
```

### 1.2. epelパッケージインストール

```
epelリポジトリ追加
# yum install epel-release
```

```
# yum install libyaml libyaml-devel --enablerepo=epel
# yum install nodejs npm --enablerepo=epel
```


## 3. ruby

### 3.1. rubyインストール
実際はrbenvやruby-build使うかもしれませんが割愛。

```
以下からrubyソースパッケージをダウンロード
https://www.ruby-lang.org/ja/downloads/

ビルド＆インストール
# tar zxvf ruby-2.0.0-p481.tar.gz 
# cd ruby-2.0.0-p481
# ./configure --disable-install-doc
# make
# make install

確認
# ruby -v
ruby 2.0.0p481 (2014-05-08 revision 45883) [x86_64-linux]
```

### 3.2. gemパッケージインストール
```
gemを最新版に更新
# gem update --system --no-rdoc --no-ri
# gem -v
2.4.8

bundlerインストール
# gem install bundler --no-rdoc --no-ri

確認
# gem list
bigdecimal (1.2.5)
bundler (1.7.6)
io-console (0.4.2)
json (1.8.1)
minitest (5.4.3)
rake (10.3.2)
rdoc (4.1.2)
rubygems-update (2.4.8)
```


## 4. mysql

### 4.1. my.cnfにutf8の設定を追加
```/etc/my.cnf 
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

character-set-server=utf8

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysql]
default-character-set=utf8
```

### 4.2. mysqlサービス設定
```
起動
# service mysqld start

自動起動設定
# chkconfig mysqld on

セキュリティ設定（rootパスワード他）
# mysql_secure_installation

DB、ユーザー作成
# mysql -u root -p
mysql> create database db_kandan default character set utf8;
mysql> grant all on db_kandan.* to user_kandan@localhost identified by '********';
mysql> flush privileges;
mysql> exit
```

## 5. Kandan

### 5.1. Kandanダウンロードとインストール

```
# cd /usr/local/apl
# git clone https://github.com/kandanapp/kandan.git 
# cd /usr/local/apl/kandan
```

### 5.2. データベース接続設定

1. データベースはmysqlを使用する。（たまたまRedmineで使っていたため。PosgreSQLが推奨？）

  ```yaml:config/database.yml
  production:
    adapter: mysql2
    host: localhost
    database: db_kandan
    pool: 5
    timeout: 5000
    username: user_kandan
    password: "********"
    encoding: utf8
  ```

2. GemfileでDBのコメントをはずす。このあとrakeのdb:createでエラーが出るのでバージョン指定もする。

  ```:Gemfile
  gem "mysql2", '~> 0.3.10'
  ```

### 5.3. プリコンパイルの設定

動作が重くなるためスタティックにする

```config/environments/production.rb
config.serve_static_assets = true  # 静的ファイルを使う
config.assets.compile = false  # ライブコンパイルを無効にする
```

### 5.4. ビルド

アプリケーションディレクトリは一般ユーザ（例：hoge）で操作。
※rootでもできなくはない。

1. 権限設定とhogeへの変更

  ```
  # chown -R hoge:hoge /usr/local/apl/kandan
  # su - hoge
  $
  ```

2. ビルド

  ```
  bundleインストール
  $ cd /usr/local/apl/kandan/
  $ bundle install --without development test --path vendor/bundle

  DB作成
  $ RAILS_ENV=production bundle exec rake db:create db:migrate kandan:bootstrap
  
  プリコンパイル
  $ RAILS_ENV=production bundle exec rake assets:precompile
  ```


### 5.5. kandanの起動</a>

```
# cd /usr/local/apl/kandan

起動    
# bundle exec thin start -e production

ポート指定起動（例：80）
# bundle exec thin start -p 80 -e production

デーモン起動
# bundle exec thin start -e production -d
```

## 6. 起動設定

### 6.1. Kandanの起動、停止、再起動のスクリプトを作成
ここで、ポート指定やサービス登録（etc/services）する場合は考慮。
その他、適当・・・

```:/etc/rc.d/init.d/kandan
#!/bin/bash
#
# chkconfig: - 99 01
#
# description: Kandan@thin server daemon
#

prog=kandan

PATH=$PATH:/usr/local/bin
case "$1" in
  start)
    echo -n $"Starting $prog ..."
    cd /usr/local/apl/kandan && bundle exec thin start -e production -d
    echo "Done."
    ;;
  stop)
    echo -n $"Stopping $prog ..."
    cd /usr/local/apl/kandan && bundle exec thin stop -e production
    echo "Done."
    ;;
  restart)
    echo -n $"Restarting $prog ..."
    cd /usr/local/apl/kandan && bundle exec thin restart -e production -d
    echo "Done."
    ;;
esac
exit 0      
```

### 6.2. 起動ファイル設置と自動起動設定

1. ファイルに実行権限をつける

  ```
  # chmod 755 /etc/rc.d/init.d/kandan
  ```

2. chkconfigに追加し、自動起動設定をする。

  ```
  # chkconfig --add kandan
  # chkconfig kandan on
  ```


### 6.3. 起動操作

1. 起動する。

  ```
  # /etc/init.d/kandan start
  ```

2. 再起動する。

  ```
  # /etc/init.d/kandan restart
  ```

3. 停止する。

  ```
  # /etc/init.d/kandan stop
  ```

## 7. アクセス

以下にアクセスし、管理者でログインする。

* URL
  * http://{ホスト名}:3000/
* 管理者の初期ID・パスワード
  * ID: Admin
  * Pass: kandanappadmin

## 8. カスタマイズ（非推奨）

全体の思想を理解して対応したわけでなく、場当たり的な対処のため推奨しない。

### 8.1 投稿したテキスト（activity）を、投稿内容どおりに改行する。

* 標準の仕様は以下のとおり
  1. 1回の改行（2行）では改行せず1行で表示する。またこの場合はURLリンクは効かない。
  2. 2回以上の改行（3行）の場合は、"read more"という全内容のリンクを含めた4行を表示する。
  3. 設定は、{アプリ配置先}/app/assets/javascripts/backbone/plugins/pastie.js.coffee

```:pastie.js.coffee
@options:
    maxPreviewLength: 300
    maxPreviewLines:  4
    regex: /\n.*\n/i

    template: _.template '''
      <pre class="pastie"><%= preview %><a target="_blank" class="pastie-link" href="<%= messageLink %>">read more</a>
      </pre>
    '''
```

* 以下のとおりに変更する。
  * "maxPreviewLines"（最大表示行）を1000に変更する。
  * 仕様1、2を実現する条件であるregexを1回以上の改行に変更する。
  * "read more"のリンクを削除する。
* なお、この変更によりURLリンクの投稿も有効になる。

```:pastie.js.coffee
@options:
    maxPreviewLength: 300
    maxPreviewLines:  1000
    regex: /.*\n/i

    template: _.template '''
      <pre class="pastie"><%= preview %>
      </pre>
    '''
```