概要
DockerでOSSのチャットツールMattermostを立てます。OSSで公開されているチャットツールはいくつかありますが、私はMattermostが一番気に入っています。ただ、特に工夫せずにサービスを作ると日本語検索ができないので、MySQLにMeCabプラグインを導入し、形態素解析して日本語検索できるようにします。
ファイルとディレクトリの準備
次のディレクトリ構成を目指してファイルとディレクトリを準備します。
.
├── app
│ ├── Dockerfile
│ └── entrypoint.sh
├── db
| ├── 99-mecab.cnf
│ └── Dockerfile
└── docker-compose.yml
docker-compose.yml
version: "3"
services:
db:
build:
context: db
environment:
MYSQL_USER: mmuser
MYSQL_PASSWORD: password
MYSQL_DATABASE: mattermost
volumes:
- ./data/db:/var/lib/mysql
app:
build:
context: app
args:
edition: team
environment:
MM_USERNAME: mmuser
MM_PASSWORD: password
MM_DBNAME: mattermost
DB_HOST: db
DB_PORT_NUMBER: 3306
MM_SQLSETTINGS_DRIVERNAME: mysql
MM_SQLSETTINGS_DATASOURCE: mmuser:password@tcp(db:3306)/mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s
volumes:
- ./data/mattermost/config:/mattermost/config:rw
- ./data/mattermost/data:/mattermost/data:rw
- ./data/mattermost/logs:/mattermost/logs:rw
- ./data/mattermost/plugins:/mattermost/plugins:rw
- ./data/mattermost/client-plugins:/mattermost/client/plugins:rw
- /etc/localtime:/etc/localtime:ro
links:
- db
ports:
- 8000:8000
db/99-mecab.cnf
[mysqld]
# MeCab Full-Text Parser Plugin Settings
loose-mecab-rc-file=/etc/mecabrc
innodb_ft_min_token_size=1
db/Dockerfile
FROM centos/mysql-57-centos7:5.7
USER 0
RUN yum -y install epel-release
RUN rpm -ivh http://packages.groonga.org/centos/groonga-release-1.5.2-1.noarch.rpm
RUN yum -y install mecab mecab-ipadic
COPY 99-mecab.cnf /etc/my.cnf.d/
USER 27
app/{Dockerfile,entrypoint.sh}
wget https://raw.githubusercontent.com/mattermost/mattermost-docker/master/app/Dockerfile -O app/Dockerfile
wget https://raw.githubusercontent.com/mattermost/mattermost-docker/master/app/entrypoint.sh -O app/entrypoint.sh
chmod +x app/entrypoint.sh
ファイルができたら、データ用永続化用のディレクトリを作成し、パーミッションを設定します。
# DB用
mkdir -p ./data/db
sudo chown -R 27:27 ./data/db
# App用
mkdir -p ./data/mattermost/client-plugins
mkdir -p ./data/mattermost/data
mkdir -p ./data/mattermost/config
mkdir -p ./data/mattermost/logs
mkdir -p ./data/mattermost/plugins
sudo chown -R 2000:2000 ./data/mattermost
これでファイルとディレクトリの準備は完了です。
コンテナの準備
コンテナをビルドして立ち上げます。
docker-compose build
docker-compose up -d
コンテナが起動したらMySQLサーバにログインします。
docker-compose exec db /bin/bash
mysql -u root
次のSQLコマンドを実行し、MeCabの形態素解析を有効化し、全文検索インデックスを作成します。
INSTALL PLUGIN mecab SONAME 'libpluginmecab.so';
USE mattermost;
ALTER TABLE `Posts` DROP INDEX idx_posts_message_txt;
ALTER TABLE Posts ADD FULLTEXT INDEX idx_posts_message_txt (`Message`) WITH PARSER mecab;
設定が完了したらコンテナを再起動します。
docker-compose restart
これで、日本語で全文検索できるMattermost環境ができました。
リバースプロキシの準備
なくても動きますが、SSL終端したいため、別途用意したリバースプロキシに設定を投入します。 WebSocket通信をするため、通常の設定に加えて、 proxy_set_header Upgrade $http_upgrade; と proxy_set_header Connection “$upgrade”; あたりが必要です。
server {
listen 443;
server_name <server-hostname>;
ssl on;
ssl_certificate /etc/letsencrypt/live/<server-hostname>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<server-hostname>/privkey.pem;
location / {
client_max_body_size 4g;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
proxy_set_header Host $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-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 1m;
proxy_connect_timeout 1m;
proxy_pass http://<server-ip-address>:8000;
}
}