SlackのOSS版ともいうべき Mattermostを
セキュア(TLS)+大規模アクセス対応(Nginxによるリバースプロキシ)した環境で構築します。
基本的に、公式サイトに
従ってすすめます。
パッケージを最新化します。
$ sudo yum update
$ sudo yum upgrade
MySQL をインストールします。
$ sudo curl -L -O http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
$ sudo yum localinstall mysql57-community-release-el7-9.noarch.rpm
$ sudo yum install mysql-community-server
$ sudo systemctl enable mysqld
$ sudo systemctl start mysqld
rootのパスワードを確認します。
$ sudo grep 'temporary password' /var/log/mysqld.log
DBを作成します。
$ mysql -u root -p
mysql> alter user 'root'@'localhost' identified by 'Password42!';
mysql> create user 'mmuser'@'172.17.1.63' identified by 'Password53!';
mysql> create database mattermost;
mysql> grant all privileges on mattermost.* to 'mmuser'@'172.17.1.63';
mysql> quit
Mattermostをインストールします。
$ curl -L -O https://releases.mattermost.com/5.8.0/mattermost-5.8.0-linux-amd64.tar.gz
$ tar zxvf mattermost-5.8.0-linux-amd64.tar.gz
$ sudo mv mattermost /opt/
$ sudo mkdir /opt/mattermost/data
$ sudo useradd --system --user-group mattermost
$ sudo chown -R mattermost:mattermost /opt/mattermost
$ sudo chmod -R g+w /opt/mattermost
$ sudo vi /opt/mattermost/config/config.json
以下のように編集
...
"SqlSettings": {
"DriverName": "mysql",
"DataSource": "mmuser:Password53!@tcp(172.17.1.63:3306)/mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s",
...
Mattermostが起動するか確認します。
$ cd /opt/mattermost
$ sudo -u mattermost ./bin/mattermost
下記メッセージがでればOKです。
{"level":"info","ts":1551684862.607604,"caller":"app/server.go:462","msg":"Server is listening on [::]:8065"}
サービス登録します。
$ sudo touch /etc/systemd/system/mattermost.service
$ sudo vi /etc/systemd/system/mattermost.service
下記のように編集します。
[Unit]
Description=Mattermost
After=syslog.target network.target mysqld.service
[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
$ sudo systemctl start mattermost
動作確認します。
$ curl http://localhost:8065
リバースプロキシとしてnginxをインストールします。
$ sudo touch /etc/yum.repos.d/nginx.repo
$ sudo vi /etc/yum.repos.d/nginx.repo
以下のように編集します。
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/rhel/7/$basearch/
gpgcheck=0
enabled=1
$ sudo yum install nginx.x86_64
$ sudo systemctl enable nginx
$ sudo systemctl start nginx
nginxの設定をします。
$ sudo vi /etc/nginx/conf.d/mattermost.conf
以下のように編集します。
upstream backend {
server 172.17.1.63:8065;
keepalive 32;
}
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 8080;
server_name mattermost.example.com;
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;
client_body_timeout 60;
send_timeout 300;
lingering_timeout 5;
proxy_connect_timeout 90;
proxy_send_timeout 300;
proxy_read_timeout 90s;
proxy_pass http://backend;
}
location / {
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_http_version 1.1;
proxy_pass http://backend;
}
}
$ sudo systemctl restart nginx
リバースプロキシ経由でアクセスできるか確認します。
$ curl http://localhost:8080
SSLを設定します(今回は自己証明書です)
$ sudo yum -y install openssl
$ sudo mkdir -p /etc/nginx/ssl
$ sudo openssl req -new -x509 -sha256 -newkey rsa:2048 -days 365 -nodes -out /etc/nginx/ssl/server.pem -keyout /etc/nginx/ssl/server.key
$ sudo vi /etc/nginx/conf.d/mattermost.conf
以下のように編集します。
...
server {
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/server.pem;
ssl_certificate_key /etc/nginx/ssl/server.key;
...
$ sudo systemctl restart nginx
SSLでアクセスできることを確認します。
$ curl -k https://localhost