【Ubuntu】安装 Mattermost
在这篇文章中要解释的内容:
使用亚马逊云服务器搭建Ubuntu实例,然后在其上安装Mattermost。
配置包括Nginx和MySQL。
此外,我们将使用独立域名并通过Let’s Encrypt进行SSL加密。
关于以下内容,我们会在另一篇文章中进行总结。
-
- 将数据从 Slack 迁移到 Mattermost
- 关于操作 Mattermost 的 mmctl 命令(例如,如何删除通道)。
启动服务器
创建一个实例
我会使用Amazon Lightsail。
在启动实例时的配置内容如下。
-
- 平台:Linux / Unix
-
- 只有OS:Ubuntu20.04 LTS
-
-
- 实例计划:10 美元 计划
-
-
- ※ 如果内存没有达到 2GB,在 SSH 过程中可能会出现卡顿。…
-
- SSH 密钥对:保留为默认值
- 启用自动快照:未选中
完成后,将等待状态从“保留中”变为“执行中”。
费用与亚马逊 EC2 不同,无论系统是运行还是停止,都会收取费用。
IP地址的固定
在 “网络 “选项卡中,创建并附加静态 IP 地址。
附加时不收费。
防火墙设置。
同样从 “网络 “选项卡中添加安全规则。
Mattermost 的端口默认为:8065,因此需要打开该端口。
此外,还需要打开80号端口(HTTP)和443号端口(HTTPS)。
SSH连接
从 “连接 “选项卡,通过 “使用 SSH 连接 “进行连接,然后登录服务器。
还有其他几种方法,但这种基于浏览器的连接是最简单、最好的。
所有后续步骤都在服务器中完成。
Mattermost 的设置
请遵循以下官方程序。
准备好
确保应用最新的安全补丁。
$ sudo apt update
$ sudo apt upgrade
// 在紫色画面中,选择 "保留当前安装的本地版本"。
MySQL
按以下顺序操作
首先进行安装。
$ sudo apt install mysql-server
设置root用户的密码
$ sudo mysql
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'hogehoge';
mysql> exit
在公式中,我们首先执行了命令“sudo mysql_secure_installation”,如果不按照这个步骤进行操作,将会出现下面的错误。
Failed! Error: SET PASSWORD has no significance for user 'root'@'localhost' as the au
thentication method used doesn't store authentication data in the MySQL server. Please con
sider using ALTER USER instead if you want to change authentication parameters.
安全设置
$ sudo mysql_secure_installation // 使用刚才使用的密码登录。
执行后,只有以下问题的答案是 “否”。
-
- 「Would you like to setup VALIDATE PASSWORD component?」:No
- 「Change the password for root ?」:No
登录
$ mysql -u root -p // 使用刚才使用的密码登录。
创建用户 (mmuser)
mysql> create user 'mmuser'@'%' identified by 'mmuserP@22w0rd';
mysql> show grants for 'mmuser'@'%';
创建DB
我們將創建一個數據庫來保存Mattermost的數據。
mysql> create database mattermost;
授予访问权限
我們將賦予先前創建的用戶(mmuser)在數據庫(mattermost)中的訪問權限。
mysql> grant all privileges on mattermost.* to 'mmuser'@'%';
mysql> show grants for 'mmuser'@'%';
mysql> exit
以上,MySQL的设置已经完成。
“Mattermost” can be paraphrased in Chinese as “事项最重要” .
下一步,我们将安装Mattermost。
下载
$ wget https://releases.mattermost.com/7.2.0/mattermost-7.2.0-linux-amd64.tar.gz
您可以在此处查看最新版本。
解凍
$ tar -xvzf mattermost*.gz
转到/opt目录,并创建一个名为data的文件夹。
$ sudo mv mattermost /opt
$ sudo mkdir /opt/mattermost/data
创建系统用户和组。
创建用于运行Mattermost的系统用户和组,并授予权限。
$ sudo useradd --system --user-group mattermost
$ sudo chown -R mattermost:mattermost /opt/mattermost
$ sudo chmod -R g+w /opt/mattermost
编辑设置文件
编辑 Mattermost 配置文件 (config.json) 所需的部分。
$ sudo vim /opt/mattermost/config/config.json
编辑内容包括
"SiteURL" : "https://{example.com}"
※将 {example.com} 设置为您希望 Mattermost 关联的自己的域名。
如果您在网站等上使用域名的话,推荐您创建和分配子域名来使用。
※ 配置 DNS 设置;为 A 记录的值设置实例的公共 IP。
"DriverName": "mysql"
"DataSource": "mmuser:<mmuser-password>@tcp(localhost:3306)/mattermost?charset=utf8mb4,utf8&writeTimeout=30s"
※ …为之前在 MySQL 中创建的用户 (mmuser) 设置的密码。
※ 关于 “localhost “部分,虽然官方写法是 “tcp(实例的公共 IP:3306)”),但由于 ping DB 失败会导致出错,因此将其设置为 localhost。 但是,如果使用 “tcp(instance’s public IP:3306)”),则会出现 ping DB 失败和错误,因此将其设置为 localhost。
。
"DefaultServerLocale": "ja"
"DefaultClientLocale": "ja"
可以试试启动Mattermost。
$ cd /opt/mattermost
$ sudo -u mattermost ./bin/mattermost
如果显示了各种信息,并最后显示 “服务器正在监听 :8065” 则表示成功。
systemd 的单元文件配置
要使用 systemd,请创建 systemd 单元文件并配置其内容。
$ sudo vim /lib/systemd/system/mattermost.service
由于使用MySQL,内容将按照官方提供的资料进行参考,具体如下所示。
[Unit]
Description=Mattermost
After=network.target
After=mysql.service
BindsTo=mysql.service
[Service]
Type=notify
ExecStart=/opt/mattermost/bin/mattermost
TimeoutStartSec=3600
KillMode=mixed
Restart=always
RestartSec=10
WorkingDirectory=/opt/mattermost
User=mattermost
Group=mattermost
LimitNOFILE=49152
[Install]
WantedBy=mysql.service
加载systemd,并确认它是否已正确加载。
$ sudo systemctl daemon-reload
$ sudo systemctl status mattermost.service
如果显示以下内容,则成功。
● mattermost.service - Mattermost
Loaded: loaded (/lib/systemd/system/mattermost.service; disabled; vendor preset: enabled)
Active: inactive (dead)
启动Mattermost
$ sudo systemctl start mattermost.service
如果执行以下操作并且返回Matterhost的HTML,则表示成功。
$ curl http://localhost:8065
最后,我们将设置Mattermost在机器启动时自动启动。
$ sudo systemctl enable mattermost.service
Nginx
然后,我们来设置网络服务器。
首先安装。
$ sudo apt update
$ sudo apt install nginx
$ curl http://localhost
创建设置文件
$ sudo vim /etc/nginx/sites-available/mattermost
内容如下
※ {IP地址} 是实例的公共IP。
※ {example.com} 是要与Mattermost关联的自定义域名设置。
upstream backend {
server {IP地址}: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 80 default_server;
server_name {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;
}
}
删除现有的配置文件
由于创建了新的配置文件(/etc/nginx/sites-available/mattermost),因此我们将删除现有的文件。
$ sudo rm /etc/nginx/sites-available/default
激活配置文件
您刚刚创建的配置文件。将(/etc/nginx/sites-available/mattermost) 的符号链接放到 /etc/nginx/sites-enabled/ 中,然后启动 Nginx。。
$ sudo rm /etc/nginx/sites-enabled/default
$ sudo ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/mattermost
$ sudo nginx -t
$ sudo systemctl start nginx
$ curl http://localhost
SSL
接下来,使用 Let’s Encrypt 为网站加密(TLS)。
安装Certbot
让我们准备使用Certbot这个ACME客户端来发行Let’s Encrypt证书。
$ sudo snap install core; sudo snap refresh core
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
–进行一次试运行进行测试
在签发证书之前,请测试 DNS 是否配置正确。
$ sudo certbot certonly --dry-run
// 1: 选择Nginx Web Server plugin (nginx)
※ 确保打开 80 端口(HTTP)。 如果未打开,挑战将失败并提示错误。
颁发证书。
$ sudo certbot
$ curl https://example.com
SSL 安全设置
最后,我们将重新编辑Nginx的配置文件,并加强SSL安全设置。
$ sudo vim /etc/nginx/site-availables/mattermost
编辑内容如下。 要添加的新章节已作注释。
upstream backend {
server {IP地址}: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 80 default_server;
server_name {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_http_version 1.1; # 加上这句话。
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;
}
}
# 从这里开始向下添加所有内容。
listen 443 ssl http2; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/{域名}/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/{域名}/privkey.pem; # managed by Certbot
# include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
ssl_session_timeout 1d;
# Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC).
ssl_protocols TLSv1.2 TLSv1.3;
# Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
# prevent replay attacks.
#
# @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
ssl_early_data on;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:50m;
# HSTS (ngx_http_headers_module is required) (15768000 seconds = six months)
add_header Strict-Transport-Security max-age=15768000;
# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;
}
server {
if ($host = {example.com}) { // 请记住用您自己的域名编辑这一行
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80 default_server;
server_name {example.com}; // 记得编辑
return 404; # managed by Certbot
}
反映
改写完成后,设置将得到反映。
$ sudo rm /etc/nginx/sites-enabled/mattermost
$ sudo ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/mattermost
$ sudo nginx -t
$ sudo systemctl restart nginx
执行以下操作,如果返回 Matterhost HTML,则表示成功。
$ curl https://example.com
也可通过在以下网址搜索域名来检查证书
当您通过浏览器访问 https://example.com 时,可能会出现显示 Nginx 默认页面或者显示 “此连接未受保护” 的情况,请尝试重新加载页面。这可能是因为缓存问题所导致的。
以上,Mattermost 已经成功启动并完成了SSL加密。
我們這次使用了 Amazon Lightsail 的實例,但只要是相同的作業系統,我認為在 Amazon EC2 上也沒有問題。
在另一篇文章中
-
-
- 将数据从 Slack 迁移到 Mattermost
-
- 关于操作 Mattermost 的 mmctl 命令(例如,如何删除通道)。
如果没问题的话,我打算写这个,请您查看。
如果方便的话,请阅读我在以下博客中发布的文章。