【学習メモ】Mattermost4.9+MySQL5.7/8.0.11インストール

1 Star2 Stars3 Stars4 Stars5 Stars (まだ評価されていません)
Loading...

概要

Mattermost4.9+MySQL5.7をインストールしてみました。
ついでに8.0.11も試してみました。

手順は公式のInstalling Mattermost on RHEL 7.1をなぞっています。

加えて、Mattermostの日本語メッセージ全文検索対応まとめ(MySQL編)と、MattermostでSlackのメール連携みたいなことがしたいを参考に取り入れました。

環境

VMware Fusion 10.1.1上の
CentOS 7.4.1708
MySQL 5.7.22 / 8.0.11
nginx 1.12.2

Mattermostのインストール

公式の手順通りに進めます。

Update

yum update
yum upgrade

MySQL

MySQLのインストール

MySQLのインストール(5.7)

rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
cd /usr/local/src ; wget http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm && \
yum localinstall mysql57-community-release-el7-9.noarch.rpm
yum install mysql-community-server
systemctl start mysqld.service

MySQLのインストール(8.0.11)

rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
cd /usr/local/src ; wget  https://repo.mysql.com//mysql80-community-release-el7-1.noarch && \
yum localinstall mysql80-community-release-el7-1.noarch.rpm
yum install mysql-community-server
systemctl start mysqld.service

MySQLのパスワード取得と変更

デフォルトのパスワードを取得します。

MySQLのパスワード取得と変更

grep 'temporary password' /var/log/mysqld.log
?dTLtPylC0#a

標準ではパスワード作成時のチェックが厳しいので、パスワード作成時の検証プラグインを無効にします。

MySQL 5.7と8.0.11では異なります。

パスワード作成時の検証プラグインの無効化(5.7)

vim /etc/my.cnf
-------------
[mysqld]
validate-password=OFF
-------------
systemctl restart mysqld

パスワード作成時の検証プラグインの無効化(8.0.11)

vim /etc/my.cnf
-------------
[mysqld]
validate_password.check_user_name=OFF
validate_password.length=0
validate_password.mixed_case_count=0
validate_password.number_count=0
validate_password.policy=0
validate_password.special_char_count=0
-------------
systemctl restart mysqld

完全に無効化する場合はPLUGINのUninstallが必要です。

参考資料
6.5.3.1 Password Validation Component Installation and Uninstallation(dev.mysql.com)

パスワードを変更します。

MySQL上のrootパスワードの削除

mysql -uroot -p
Password: ?dTLtPylC0#a
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '';
mysql> quit
systemctl enable mysqld

Mattermost用のカスタマイズ

Mattermost用のDBとユーザーを作成します。
パスワードも念のため設定します。

MySQL8.0.11では、デフォルトの認証形式がcaching_sha2_passwordになっています。
Mattermostでcaching_sha2_passwordに対応していなかったようなので、既存のmysql_native_passwordを使用します。

DBとmmuserの作成(5.7)

mysql -uroot
mysql> create user 'mmuser'@'%' identified by '[email protected]#L';
mysql> create database mattermost;
mysql> grant all privileges on mattermost.* to 'mmuser'@'%';
mysql> quit

DBとmmuserの作成(8.0.11)

mysql -uroot
mysql> create user 'mmuser'@'%' identified with mysql_native_password by '[email protected]#L';
mysql> create database mattermost;
mysql> grant all privileges on mattermost.* to 'mmuser'@'%';
mysql> quit

mysql_native_password無しで作ってしまった場合は、mysql> drop user mmuser;でユーザーを削除して作り直します。

ユーザーごとの認証を確認する

mysql> select user,host,plugin,authentication_string from mysql.user;                                                
+------------------+-----------+-----------------------+-------------------------------------------+                 
| user             | host      | plugin                | authentication_string                     |
+------------------+-----------+-----------------------+-------------------------------------------+
| mmuser           | %         | mysql_native_password | *914C0873C8148224CF267E2F9ADD0C6AEBA89978 |
| mysql.infoschema | localhost | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.session    | localhost | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys        | localhost | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| root             | localhost | caching_sha2_password |                                           |
+------------------+-----------+-----------------------+-------------------------------------------+

参考資料
MySQL 8.0.4におけるデフォルト認証形式の変更(yoku0825.blogspot.jp)
MySQL 8.0.4 : New Default Authentication Plugin : caching_sha2_password(mysqlserverteam.com)

Mattermost

Mattermostのインストール

Mattermostのインストール

wget https://releases.mattermost.com/4.9.1/mattermost-4.9.1-linux-amd64.tar.gz
tar xf mattermost-4.9.1-linux-amd64.tar.gz
mv mattermost /opt
mkdir /opt/mattermost/data
useradd --system --user-group mattermost
chown -R mattermost:mattermost /opt/mattermost
chmod -R g+w /opt/mattermost

Mattermostのカスタマイズ

config.jsonファイルを編集します
password, localhost, mattermost tableの3か所を修正します。

/opt/mattermost/config/config.json

cd /opt/mattermost/config
cp config.json config.json.original
vim config.json
-----------------------
# diff config.json.original config.json
108c108
<         "DataSource": "mmuser:[email protected](dockerhost:3306)/mattermost_test?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s",
---
>         "DataSource": "mmuser:[email protected]#[email protected](localhost:3306)/mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s",
-----------------------

Mattermostの試験起動

Mattermostの試験起動

cd /opt/mattermost/bin
sudo -u mattermost ./platform

Server is listening on :8065 が見えたら、Ctrl+Cで終了します。
MySQL8.0.11でnative passwordを使用してユーザーを作成していないと、こんな認証失敗が表示されます。

認証失敗のエラー

[2018/05/08 13:08:08 JST] [INFO] Using config file at /opt/mattermost/config/config.json
[2018/05/08 13:08:08 JST] [INFO] Loaded system translations for 'en' from '/opt/mattermost/i18n/en.json'
[2018/05/08 13:08:08 JST] [INFO] Server is initializing...
[2018/05/08 13:08:08 JST] [INFO] Pinging SQL master database
[2018/05/08 13:08:08 JST] [EROR] Failed to ping DB retrying in 10 seconds err=this authentication plugin is not supported

mmuserをnative_passwordで作成し直せば改善します。

起動スクリプトの作成

公式の手順に加えて、requiresをいくつか追加しています。

起動スクリプトの作成

vim /etc/systemd/system/mattermost.service
-------------------
[Unit]
Description=Mattermost
After=syslog.target network.target
Requires=network-online.target
[Service]
Type=notify
WorkingDirectory=/opt/mattermost
User=mattermost
ExecStart=/opt/mattermost/bin/platform
PIDFile=/var/spool/mattermost/pid/master.pid
TimeoutStartSec=3600
LimitNOFILE=49152
[Install]
WantedBy=multi-user.target
-------------------

起動スクリプトの有効化と起動

chmod 664 /etc/systemd/system/mattermost.service
systemctl daemon-reload
systemctl enable mattermost
systemctl start mattermost

firewallの穴あけ

8065ポート、80ポート、443ポートを空けます。

firewallのポート開放

firewall-cmd --add-port=8065/tcp --zone=public --permanent
firewall-cmd --add-port=80/tcp --zone=public --permanent
firewall-cmd --add-port=443/tcp --zone=public --permanent
firewall-cmd --list-all --zone=public
firewall-cmd --reload

Mattermostの設定

ブラウザからlocalhost:8065にアクセスします。

Nortifications>Emailを以下のように設定します。

gmailを利用した設定例になります。
GmailのSMTP認証で使うパスワードは、アプリケーション用パスワードでログインしないとうまく動作しませんでした。
Mattermost用にアプリケーションパスワードを事前に発行しておきます。

ブラウザ上からNortifications>Emailを設定する

Enable Email Notifications > true
Enable Email Batching      > false
Notification Display Name  > No-Reply
Notification From Address  > [email protected]
Notification Footer Mailing Address > 空白
SMTP Server                > smtp.gmail.com
SMTP Server Port           > 587
Enable SMTP Authentication > true
SMTP Server Username       > [email protected]
SMTP Server Password       > Application Password
COnnection Security        > STARTTLS

test connectionを押して No errorsと出ればOKです。

参考資料
アプリ パスワードでログイン(support.google.com)

nginx

nginxのインストール

nginxのインストール

yum install nginx
systemctl start nginx
systemctl enable nginx

nginx.confの編集

標準のlisten 80のserverディレクティブをコメントアウトします。

nginxポート80設定のコメントアウト

vim /etc/nginx/nginx.config
-------------
38 ##    server {
39 ##        listen       80 default_server;
40 ##        listen       [::]:80 default_server;
41 ##        server_name  _;
42 ##        root         /usr/share/nginx/html;
43 ##
44 ##        # Load configuration files for the default server block.
45 ##        include /etc/nginx/default.d/*.conf;
46 ##
47 ##        location / {
48 ##        }
49 ##
50 ##        error_page 404 /404.html;
51 ##            location = /40x.html {
52 ##        }
53 ##
54 ##        error_page 500 502 503 504 /50x.html;
55 ##            location = /50x.html {
56 ##        }
57 ##    }
-------------

自己証明書の作成

自己証明書の作成

mkdir /opt/mattermost/ssl
cd /opt/mattermost/ssl
openssl genrsa 2048 > server.key
openssl req -new -key server.key > server.csr
(適当に)
openssl x509 -req -days 3650 -signkey server.key < server.csr > server.crt
ls /opt/mattermost/ssl

参考資料
OpenSSL で SSL 自己証明書を発行する手順(weblabo.oscasierra.net)

mattermost.confの作成

変更箇所
・backgroudをmattermostが動いているIPアドレスに変更
・listen 80のserver_nameをhost名に変更
・listen 80の通信を443へリダイレクト
・自己証明書の設定
・iconsの指定(メールで投稿する機能のため)

mattermost用のconfを作成

vim /etc/nginx/conf.d/mattermost.conf
-------------
upstream backend {
server 192.168.122.96:8065;
}
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;
server {
listen 80;
server_name    192.168.122.96 mattermost7.localhost;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name    mattermost7.localhost;
ssl on;
ssl_certificate /opt/mattermost/ssl/server.crt;
ssl_certificate_key /opt/mattermost/ssl/server.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
location ~ /api/v[0-9]+/(users/)?websocket$ {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
client_max_body_size 50M;
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_buffers 256 16k;
proxy_buffer_size 16k;
proxy_read_timeout 600s;
proxy_pass http://backend;
}
location / {
proxy_http_version 1.1;
client_max_body_size 50M;
proxy_set_header Connection "";
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_buffers 256 16k;
proxy_buffer_size 16k;
proxy_read_timeout 600s;
proxy_cache mattermost_cache;
proxy_cache_revalidate on;
proxy_cache_min_uses 2;
proxy_cache_use_stale timeout;
proxy_cache_lock on;
proxy_pass http://backend;
}
location /icons {
root /opt/mattermost ;
}
}
-------------

nginxの再起動と動作確認

nginxの再起動と動作確認

nginx -t
systemctl restart nginx
curl localhost
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.12.2</center>
</body>
</html>
curl https://mattermost7.localhost --insecure
<!DOCTYPE html> <html lang=en> <head> <meta http-equiv=Content-S (略)

https://無しでアクセスすると400 Bad Requestとなります。

httpsで 502 Bad Gatewayが出続けるときはSELinuxの設定を見直します。

全文検索の追加

Mattermostの日本語メッセージ全文検索対応まとめ(MySQL編)(qiita.com/terukizm)を参考に、全文検索機能を入れます。

テーブルの修正

テーブルの修正

mysql mattermost -ummuser -p
[email protected]#L
mysql> ALTER TABLE `Posts` DROP INDEX idx_posts_message_txt;
mysql> ALTER TABLE Posts ADD FULLTEXT INDEX idx_posts_message_txt (`Message`) WITH PARSER ngram COMMENT 'ngram index';
mysql> quit;

my.cnfの修正

/etc/my.cnfを編集します。
mysqlとmysqldにそれぞれ追加します。

my.cnfの修正(5.7)

vim /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
------------
systemctl restart mysqld

my.cnfの修正(8.0.11)

vim /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
------------
systemctl restart mysqld

メール連携の追加

MattermostでSlackのメール連携みたいなことがしたい(qitia.com/cocoon)を参考に入れます。

CPANのインストール

CPANのインストール

yum install cpan
cpan -h
#[ENTER]連打
cpan -i Email::MIME JSON

4, 5分かかります。

postfixの修正

myhostnameを書き換えます。

postfixの設定修正

vim /etc/postfix/main.cf
# 77行目あたりを修正
----------
myhostname = mattermost7.localhost
----------
# ファイル末尾に追加
----------
recipient_delimiter = +
transport_destination_recipient_limit = 1
----------

aliasの修正

MailAliasの修正と反映

vim /etc/aliases
-----
support:        postmaster
bot: "| /opt/emailbot/mail2channel"
-----
newaliases

mail2channelの作成

mail2channelの作成

mkdir /opt/emailbot
touch /opt/emailbot/mail2channel
chmod +x /opt/emailbot/mail2channel

元記事のスクリプトをコピーします。
修正箇所は、$curl$hooks$iconurlの3か所です。
メールを受け取ってwebhookにPOSTするスクリプト

diff mail2channel.original mail2channel
12,13c12,13
< my $curl     = '/usr/bin/curl -s --data-urlencode';
< my $hooks    = 'http://my.domain.name/hooks/';
---
> my $curl     = '/usr/bin/curl -s --insecure --data-urlencode';
> my $hooks    = 'https://mattermost8.localhost/hooks/';
15c15
< my $iconurl  = 'kigjm34lvzr.png',
---
> my $iconurl  = 'noj2dswg3gc.png',

スクリプトの作成時の注意

  • 自己証明書の場合、curlコマンドに--insecureを追加します。'/usr/bin/curl -s --insecure --data-urlencode'
  • /opt/mattermost/iconにアイコン用のpngファイルを作成しておきます。

送信テスト

webhook用のトークンを利用し、メールを送信し、投稿されるか確認します。

メール送信テスト

 echo "test " | mail -s " test mail " [email protected]

投稿されないときは、curlコマンドで投稿できるか確認します。

curl -i -X POST --insecure --data-urlencode 'payload={"text": "Hello, this is some text\nThis is more text. :tada:"}' https://mattermost7.localhost/hooks/_your_token_

登録されていれば、メールのリレーに問題がありそうです。

正常に送信されていれば、/var/log/maillogに以下のようなログが残ります。

成功時の/var/log/maillog

May  8 03:47:51 mattemost7 postfix/local[15689]: 04DAD1076445: to=<[email protected]>, relay=local, delay=0.58, delays=0.1/0.05/0/0.43, dsn=2.0.0, status=sent (delivered to command:  /opt/emailbot/mail2channel)

以上で終わりです。
firewall-cmd --remove-port=8065/tcp --zone=public --permanent ; firewall-cmd --reloadを実施したほうが良いでしょう。


1 Star2 Stars3 Stars4 Stars5 Stars (まだ評価されていません)
Loading...
      この投稿は審査処理中  | 元のサイトへ