らくがきちょう

なんとなく

Amazon Linux に Mattermost 4.3.0 をインストールする

以前に CentOS7 に Mattermost 4.2.0 をインストールするというメモを書きました。 今回は Amazon Linux に Mattermost 4.3.0 をインストールしてみます。 概ね手順は同じですが、Amazon Linux が CentOS6 ベースである為、systemd ベースでは無い点で多少、設定に差があります。

MariaDB のインストール

Mattermost のバックエンドになる MariaDB をインストールします。 まず、GPG-KEY をインストールします。

rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

/etc/yum.repos.d/mariadb.repo というファイルを以下の内容で新規作成します。

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3.2/centos6-amd64/
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

インストールします。

yum -y install MariaDB-client MariaDB-server

MariaDB (起動スクリプト名は mysql)を起動します。

/etc/init.d/mysql start

インストール直後の状態で自動起動設定になっていました。

# chkconfig --list | grep mysql
mysql           0:off  1:off  2:on   3:on   4:on   5:on   6:off

MariaDB の初期設定

mysql_secure_installation で初期設定を行い、不要なデータベースや anonymous ユーザを削除しておきます。

mysql_secure_installation

実行例は以下の通りです。

# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] n
 ... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

MariaDB 上にデータベースやユーザを作成します。

mysql -u root
CREATE DATABASE mattermost;
CREATE USER 'mmuser'@'localhost' IDENTIFIED BY 'mmuser-password';
GRANT ALL PRIVILEGES ON mattermost.* TO 'mmuser'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
quit

Mattermost のインストール

ダウンロードページから Matttermost 最新版のソースコードをダウンロードします。 現時点の最新版は 4.3.0 でした。 ダウンロードが完了したら /opt 配下に展開します。 更に、データ用のディレクトリとして /opt/mattermost/data も作成しておきます。

curl -L -O https://releases.mattermost.com/4.3.0/mattermost-4.3.0-linux-amd64.tar.gz
tar zxvf mattermost-4.3.0-linux-amd64.tar.gz -C /opt
mkdir /opt/mattermost/data

Mattermost 実行用のシステムアカウントを作成します。 作成したユーザに必要な権限も付与します。

useradd --system --user-group mattermost
chown -R mattermost:mattermost /opt/mattermost
chmod -R g+w /opt/mattermost

設定ファイルは /opt/mattermost/config/config.json にあります。 SqlSettings 部分はデフォルトで以下のようになっているはずです。

    "SqlSettings": {
        "DriverName": "mysql",
        "DataSource": "mmuser:mostest@tcp(dockerhost:3306)/mattermost_test?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s",
        "DataSourceReplicas": [],
        "DataSourceSearchReplicas": [],
        "MaxIdleConns": 20,
        "MaxOpenConns": 300,
        "Trace": false,
        "AtRestEncryptKey": "",
        "QueryTimeout": 30
    },

DataSourceMariaDB 上に作成したデータベース名・ユーザ名・パスワードに合わせて修正します。 今回は以下のようにしました

        "DataSource": "mmuser:mmuser-password@tcp(127.0.0.1:3306)/mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s",

Mattermost の起動用スクリプトを作成します。 以下の内容で /etc/init.d/mattermost を新規作成します。

#!/bin/sh
# chkconfig:   - 85 15
# description:  mattermost

SERVICE=mattermost
start() {
    cd /opt/mattermost/bin
    sudo -u mattermost ./platform &
    echo "service $SERVICE [start]"
}
stop() {
    pkill platform
    echo "service $SERVICE [stop]"
}
status() {
   PID=`pgrep platform | wc -l`
   if [ $PID -eq 0 ]; then
       echo "$SERVICE stop"
   else
       echo "running $SERVICE ..."
   fi
}

case $1 in
start)
       start
       ;;
stop)
       stop
       ;;
status)
       status
       ;;
restart)
       stop
       start
       ;;
*)
       echo "Usage: $SERVICE [start|stop|restart|status]"
       ;;
esac
exit 0

起動スクリプトに実行権限を付与しておきます。

chmod 755 /etc/init.d/mattermost

Mattermost が自動起動されるように設定しておきます。

chkconfig --add mattermost
chkconfig mattermost on

Mattermost を起動します。

/etc/init.d/mattermost start

Mattermost は初期設定で標準出力へのログ出力が有効になっている為、画面上に数行のログが表示されるはずです。 実行例は以下の通りです。

# /etc/init.d/mattermost start
service mattermost [start]
# [2017/10/22 00:57:56 JST] [INFO] Loaded system translations for 'en' from '/opt/mattermost/i18n/en.json'
[2017/10/22 00:57:56 JST] [INFO] Current version is 4.3.0 (4.3.0/Fri Oct 13 22:06:53 UTC 2017/8966452d1183e94fecc373b9d08c65a0573cbbc6/729b149c2a5c82c230e302f0963f6161ca7c652e)
[2017/10/22 00:57:56 JST] [INFO] Enterprise Enabled: true
[2017/10/22 00:57:56 JST] [INFO] Current working directory is /opt/mattermost/bin
[2017/10/22 00:57:56 JST] [INFO] Loaded config file from /opt/mattermost/config/config.json
[2017/10/22 00:57:56 JST] [INFO] Able to write files to local storage.
[2017/10/22 00:57:56 JST] [INFO] Server is initializing...
[2017/10/22 00:57:56 JST] [INFO] Pinging SQL master database
[2017/10/22 00:57:56 JST] [INFO] The database schema has been set to version 4.3.0
[2017/10/22 00:57:57 JST] [INFO] License key from https://mattermost.com required to unlock enterprise features.
[2017/10/22 00:57:57 JST] [INFO] Initializing plugin: ldapextras
[2017/10/22 00:57:57 JST] [INFO] Initializing plugin: jira
[2017/10/22 00:57:57 JST] [INFO] Initializing job API routes
[2017/10/22 00:57:57 JST] [INFO] API version 3 is scheduled for deprecation. Please see https://api.mattermost.com for details.
[2017/10/22 00:57:57 JST] [INFO] Starting 2 websocket hubs
[2017/10/22 00:57:58 JST] [INFO] Starting Server...
[2017/10/22 00:57:58 JST] [INFO] Server is listening on :8065
[2017/10/22 00:57:58 JST] [INFO] Starting workers
[2017/10/22 00:57:58 JST] [INFO] Starting schedulers.

Mattermost はデフォルトで 8,065/TCP を Listen しますので、ブラウザで http://xxx.xxx.xxx.xxx:8065/ にアクセスします。

Mattermost を 443/TCP で Listen 出来るようにする

Reverse Proxy を経由させずに直接、Mattermost を 80/TCP や 443/TCP で Listen させようとするとエラーになります。 Well Known なポートを Listen 出来るようにする為、Mattermost の実体である platform ファイルに対して setcap で設定を行います。

setcap cap_net_bind_service=+ep /opt/mattermost/bin/platform

これで Mattermost を 443/TCP で Listen させてもエラーが出なくなります。