こんにちは。エンジニアの mori です。
先日の「MattermostのActiveDirectory(LDAP)認証を検証してみた」の環境構築の際に、クローズドの環境でMattermostを作るのに少し苦労しました。
Mattermostの公式ドキュメントでは、yumを利用するなど、インターネットに接続できることが前提の構築手順が紹介されていますが、クローズドの環境では、インターネットに接続できませんので、yumが使えません。そんなクローズドでの環境構築方法をご紹介したいと思います。
Overview
Mattemostを構築する際に考慮すべき項目は、以下の5項目あたりを押さえておけばよいかと思います。
(設定に関しは「Mattermostをインストールしたら行うべき5つの設定」にまとめておりますのでこちらを参照ください)
・Mattermost Server(アプリ本体)
・データベース(MYSQL/Postgresql/RDS)
・プロキシ(NGNIX/ELB)
・ストレージ(ローカル/S3)
・メール(SMTP Server)
クローズドであるため、ストレージはデフォルトのローカルとし、プロキシやメール設定は必須ではないので今回は割愛します。また、別の機会に。
ということで、データベースとMattermost Serverがセットアップについて解説していきます。
必要なモジュールを入手
データベースはMYSQL/Postgresql/RDSが利用できます。
弊社でよく利用しているMYSQLについて解説していきます。対象のOSはCentOS 7系です。
インターネットにつながる環境に、構築したい環境と同じOSで環境を構築します。
この環境でyumコマンドを利用してデータベースのパッケージをダウンロードします。
このパーッケージのダウンロード方法だと依存関係があるモジュールも一緒にダウンロードされます。
# Wgetコマンドのインストール
$ sudo yum install wget
# MYSQLコミュニティのリポジトリインストール
$ wget http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
$ sudo yum localinstall mysql57-community-release-el7-9.noarch.rpm
# ワークフォルダの作成
$ mkdir /tmp/work
$ mkdir /tmp/work/mysql
# MYSQLのパーケージのダウンロード(依存関係含む)
$ sudo yum install --downloadonly --downloaddir=/tmp/work/mysql/ mysql-community-server
# パーケージファイル群を移動しやすいように固めます。
$ cd /tmp/work
$ tar -czvf mysql_57.tgz mysql/
上記の手順で作成した、パッケージファイル群「mysql_57.tgz 」をクローズド環境へ配置し、このモジュールを使って、MYSQLのインストールを行っていきます。
また、Mattermost Self-Managed Server Softwareからインストールモジュールをダウンロードしてください。ダウンロードしたファイルをクローズド環境のサーバに配置してください。
クローズド環境に持ち込むファイルは以下の2つですね。
- mysql_57.tgz
- mattermost-X.X.X-linux-amd64.tar.gz
データベース
それでは、データベースを構築していきます。ここからはクローズド環境での作業となります。
まずは、postfixとmariadbをアンインストールします。
$ sudo rpm -e postfix-2.10.1-7.el7.x86_64
$ sudo rpm -e mariadb-libs-5.5.64-1.el7.x86_64
パッケージファイル群「mysql_57.tgz 」をクローズド環境のサーバで展開し、MYSQLを以下のコマンドでインストールします。
# 展開します
$ tar -zxvf mysql_57.tgz
$ cd mysql
$ rpm -ivh *
ちょっとしたTIPSですが、依存関係のあるモジュールをインストールする場合、RPMコマンドで同時に指定することでインストールできます。インストールの順番などはRPMコマンドが解決してくれます。
ただ、関連するモジュールが多い場合はコマンドが長すぎてエラーになることもあります。その場合は、フォルダに全て格納して、上記のように「rpm -ivh *」としてインストールするとよいでしょう。
補足ですが、今回作成したパッケージファイル群のファイル一覧は以下になります。
# mysql_57.tgzのファイル一覧
libaio-0.3.109-13.el7.x86_64.rpm
mysql-community-client-5.7.33-1.el7.x86_64.rpm
mysql-community-common-5.7.33-1.el7.x86_64.rpm
mysql-community-libs-5.7.33-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.33-1.el7.x86_64.rpm
mysql-community-server-5.7.33-1.el7.x86_64.rpm
perl-5.16.3-299.el7_9.x86_64.rpm
perl-Carp-1.26-244.el7.noarch.rpm
perl-constant-1.27-2.el7.noarch.rpm
perl-Encode-2.51-7.el7.x86_64.rpm
perl-Exporter-5.68-3.el7.noarch.rpm
perl-File-Path-2.09-2.el7.noarch.rpm
perl-File-Temp-0.23.01-3.el7.noarch.rpm
perl-Filter-1.49-3.el7.x86_64.rpm
perl-Getopt-Long-2.40-3.el7.noarch.rpm
perl-HTTP-Tiny-0.033-3.el7.noarch.rpm
perl-libs-5.16.3-299.el7_9.x86_64.rpm
perl-macros-5.16.3-299.el7_9.x86_64.rpm
perl-parent-0.225-244.el7.noarch.rpm
perl-PathTools-3.40-5.el7.x86_64.rpm
perl-Pod-Escapes-1.04-299.el7_9.noarch.rpm
perl-Pod-Perldoc-3.20-4.el7.noarch.rpm
perl-Pod-Simple-3.28-4.el7.noarch.rpm
perl-Pod-Usage-1.63-3.el7.noarch.rpm
perl-podlators-2.5.1-3.el7.noarch.rpm
perl-Scalar-List-Utils-1.27-248.el7.x86_64.rpm
perl-Socket-2.010-5.el7.x86_64.rpm
perl-Storable-2.45-3.el7.x86_64.rpm
perl-Text-ParseWords-3.29-4.el7.noarch.rpm
perl-threads-1.87-4.el7.x86_64.rpm
perl-threads-shared-1.43-6.el7.x86_64.rpm
perl-Time-HiRes-1.9725-3.el7.x86_64.rpm
perl-Time-Local-1.2300-2.el7.noarch.rpm
postfix-2.10.1-9.el7.x86_64.rpm
以降のインストール手順は公式に紹介されているものと同様です。
MYSQLのインストールが終わったら、起動させます。
MYSQLは初回起動時にログにパスワードを出力します。
無事に起動できらたらrootのパスワードは変更しておくといいでしょう。自動起動設定もお忘れなく。
# MYSQLの起動
$ sudo systemctl start mysqld.service
$ sudo grep 'temporary password' /var/log/mysqld.log
2021-05-24T04:33:52.411851Z 1 [Note] A temporary password is generated for root@localhost: wjkRlQo&-4p/
# rootパスワード変更
$ mysql -u root -p
Enter Password: パスワード
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '新パスワード';
# 自動起動設定
$ sudo systemctl enable mysqld.service
Mattemost 用のユーザとDBを作成します。
# DB接続用のユーザ作成
mysql> create user 'mmuser'@'%' identified by 'パスワード';
# MattermostDB作成
mysql> create database mattermost;
# ロール設定
mysql> grant all privileges on mattermost.* to 'mmuser'@'%';
ここまでできれば、データベース側は準備完了です。
Mattermost Server
続いて、Mattermost Serverを構築していきます。インストールモジュール(mattermost-X.X.X-linux-amd64.tar.gz)を展開し配置していきます。
# Mattermost Serverの展開
$ tar -zxvf mattermost-X.X.X-linux-amd64.tar.gz
# Mattermost Serverを配置
$ sudo mv mattermost /opt
$ sudo mkdir /opt/mattermost/data
# Mattermotユーザ作成およびパーミッション変更
$ sudo useradd --system --user-group mattermost;
$ sudo chown -R mattermost:mattermost /opt/mattermost
$ sudo chmod -R g+w /opt/mattermost
configファイル(/opt/mattermost/config/config.json)を設定します。
データベースの接続関連は以下の2項目を修正します。
- DriverName
- DataSource
:
"SqlSettings": {
"DriverName": "mysql",
"DataSource": "mmuser:パスワード@tcp(localhost:3306)/mattermost?charset=utf8mb4,utf8\\u0026readTimeout=30s\\u0026writeTimeout=30s",
"DataSourceReplicas": [],
:
Mattemost Serverの自動起動の設定を実施します。
# 起動スクリプトを作成
$ sudo touch /etc/systemd/system/mattermost.service
$ sudo vi /etc/systemd/system/mattermost.service
---mattermost.serviceの内容---
[Unit]
Description=Mattermost
After=syslog.target network.target mysqldservice
[Service]
Type=notify
WorkingDirectory=/opt/mattermost
User=mattermost
ExecStart=/opt/mattermost/bin/mattermost
PIDFile=/var/spool/mattermost/pid/master.pid
TimeoutStartSec=3600
LimitNOFILE=49152
[Install]
WantedBy=multi-user.target
---ここまで---
# パーミッションを修正し、自動起動を有効にします。
$ sudo chmod 664 /etc/systemd/system/mattermost.service
$ sudo systemctl daemon-reload
$ sudo systemctl enable mattermost
それでは、サーバを起動してみましょう。
# Mattermost Serverの起動
$ sudo systemctl start mattermost
起動ができたらブラウザから接続します。ポートはデフォルトで8065になりますね。
http://XX.XX.XX.XX:8065
これでクローズド環境へのイントール検証は終わりです。
さいごに
MattermostServerはGO言語でコンパイル済みにモジュールですので、依存関係でのエラーは起きにくいかと思います。クローズド環境の構築で苦労するとしたら、MYSQLなどのデータベースをインストールするときに依存関係かと感じました。
今回はCentOSの7系でのクローズドな構築検証でしたが、同様の手順でほかのディストリビューションもできるのではないでしょうか。
設定内容やインストールに関する詳細な内容については公式ドキュメントをご参照ください。