VagrantでMattermostを試してみる

VagrantでMattermostを試してみる

環境は以下で確認した
Windows10
VirtualBox
vagrant
CentOS 7.2
Mysql 5.7
nginx 1.10

コマンドプロンプトにて
$ vagrant plugin install vagrant-hostsupdater
$ vi Vagrantfile
----------------
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.hostname = "yourdomain.dev"
----------------
$ vagrant up

Mattermostのインストール

まずMySQL5.7のインストール

mysqlと競合するmariadb関連のライブラリが既に入っているのでアンインストール
$ sudo yum remove mariadb*

mysqlディレクトリの存在確認
$ sudo ls -la /var/lib/mysql/
もしあれば
$ sudo rm -rf /var/lib/mysql/

yumコマンドでインストール
リポジトリを追加
$ sudo yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm

インストール
$ sudo yum install mysql-community-server

バージョン確認
$ mysqld --version

ステータス確認
$ systemctl status mysqld.service

起動
$ sudo systemctl start mysqld.service

停止
$ sudo systemctl stop mysqld.service

自動起動設定
$ sudo systemctl enable mysqld.service

mysql起動後にログを確認
$ cat /var/log/mysqld.log | grep 'password is generated'
2015-10-25T08:42:09.501502Z 1 [Note] A temporary password is generated for root@localhost: <初期パスワード>

rootユーザでログイン
$ mysql -uroot -p
Enter password: <初期パスワード>

MySQLmysql 5.7のセキュリティ設定
$ mysql_secure_installation
Enter password for user root:
New password: DbPass1! # ←仮の新rootパスです
Re-enter new password:

・匿名ユーザーアカウントを削除 Y
・ローカルホスト以外からアクセス可能な root アカウントを削除 Y
・test データベースの削除 Y
・即反映するか Y

ログイン確認
$ mysql -uroot -p
Enter password: 仮の新rootパス
⇒ログインできること

ログインしたらutf8でデータベース作成する
mysql> CREATE DATABASE mmdb DEFAULT CHARACTER SET utf8;
mysql> CREATE USER 'mmdbuser'@'localhost' IDENTIFIED BY 'MmDbUserPass1!'; # ←仮のmmuserパスです
mysql> GRANT ALL PRIVILEGES ON mmdb.* TO 'mmdbuser'@'localhost' IDENTIFIED BY 'MmDbUserPass1!';
mysql> FLUSH PRIVILEGES;
mysql> exit

Mattermost本体のインストール

最新版のバージョンとURLを確認
https://about.mattermost.com/download/

ダウンロード
$ wget https://releases.mattermost.com/3.10.0/mattermost-3.10.0-linux-amd64.tar.gz

ダウンロードしたパッケージを展開すると「mattermost」というディレクトリが作成されるので、これを適当なディレクトリに移動する。今回は/opt/ディレクトリ以下に移動した。

展開
$ tar xvzf mattermost-3.10.0-linux-amd64.tar.gz

移動
$ sudo mv mattermost /opt/

データ保存先ディレクトリ
$ sudo mkdir /opt/mattermost/data

設定ファイルを適宜編集
$ vi /opt/mattermost/config/config.json
"DataSource": "mmuser:mostest@tcp(dockerhost:3306)/mattermost_test?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s",

"DataSource": "mmdbuser:MmDbUserPass1!@tcp(localhost:3306)/mmdb?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s",

Mattermostアプリを実行用のmattermostユーザを作成
$ sudo useradd -r mattermost -U

ファイル/ディレクトリのパーミッションを変更
$ sudo chown -R mattermost:mattermost /opt/mattermost

SystemdでMattermostサービスを管理するための設定ファイルを用意する
$ sudo vi /etc/systemd/system/mattermost.service
-------------------------------------------------
[Unit]
After=network-online.target
Description=mattermost server
Requires=network-online.target rsyslog.service mysqld.service

[Service]
WorkingDirectory=/opt/mattermost/bin
User=mattermost
ExecStart=/opt/mattermost/bin/platform
PIDFile=/var/spool/mattermost/pid/master.pid
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=mattermost

[Install]
WantedBy=multi-user.target
-------------------------------------------------

systemctl設定の反映
$ sudo systemctl daemon-reload

サービスの実行
$ sudo systemctl start mattermost

サービスが稼動しているかどうかも確認
$ sudo systemctl status mattermost

ブラウザで動作確認
http://yourdomain.dev:8065/

ブラウザの80番ポートでアクセスできるようにする。
ここではnginxを利用する

nginxをインストールする
$ sudo yum install nginx

configファイルに設定を追加し、mattermostの8065ポートをReverseProxyにする設定を入れます。
$ vi /etc/nginx/conf.d/nginx.conf
server {
listen 80;
server_name yourdomain.dev;

location / {
client_max_body_size 50M;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_pass http://127.0.0.1:8065;
}
}

nginxを起動
$ sudo systemctl start nginx
$ systemctl status nginx

ブラウザで動作確認
http://yourdomain.dev:80/

日本語全文検索をしたい

世知辛いと投稿しておく
コメントで辛いを検索
⇒Oh! Hitしない…

my.cnfに追記
$ sudo vi /etc/my.cnf
-----------------------------------
[mysql]
default-character-set = utf8mb4

[mysqld]
# setting for utf8mb4
character-set-server = utf8mb4
innodb_large_prefix = ON
innodb_file_format = Barracuda
innodb_file_format_max = Barracuda
-----------------------------------

スキーマをダンプ
$ mysqldump -d mmdb -u mmdbuser -p > ddl.sql
$ grep "FULLTEXT" ddl.sql
FULLTEXT KEY `idx_channels_txt` (`Name`,`DisplayName`)
FULLTEXT KEY `idx_posts_message_txt` (`Message`),
FULLTEXT KEY `idx_posts_hashtags_txt` (`Hashtags`)
FULLTEXT KEY `idx_users_all_txt` (`Username`,`FirstName`,`LastName`,`Nickname`,`Email`),
FULLTEXT KEY `idx_users_all_no_full_name_txt` (`Username`,`Nickname`,`Email`),
FULLTEXT KEY `idx_users_names_txt` (`Username`,`FirstName`,`LastName`,`Nickname`),
FULLTEXT KEY `idx_users_names_no_full_name_txt` (`Username`,`Nickname`)

⇒とりあえずPostsテーブルのMessageカラムだけは対処する

$ mysql -u mmdbuser -p mmdb

Postsテーブルのidx_posts_message_txtインデックスを削除
mysql> ALTER TABLE Posts DROP INDEX idx_posts_message_txt;

Ngramでインデックスを貼る
mysql> ALTER TABLE Posts ADD FULLTEXT INDEX idx_posts_message_txt (`Message`) WITH PARSER ngram COMMENT 'ngram index';

コメントで世知辛いを検索
⇒Hitした。OK

Ngramすげーと思ってたら、Mroonga のほうが速いらしい。。

参考
http://knowledge.sakura.ad.jp/knowledge/5933/
http://qiita.com/shadowhat/items/c29a6d0362a2742425ba
http://qiita.com/terukizm/items/b477943b63c66ab7d454