在1至3台机器上安装生产就绪的Mattermost系统。
完整的Mattermost安装由三个主要组件组成:代理服务器,数据库服务器和Mattermost服务器。 您可以在一台机器上安装所有组件,也可以在每台机器上安装每个组件。 如果您只有两台计算机,请在一台计算机上安装代理和Mattermost服务器,然后在另一台计算机上安装数据库。
对于数据库,您可以安装MySQL或PostgreSQL。 代理是NGINX。
按以下顺序安装和配置组件。 请注意,您只需要一个数据库,即MySQL或PostgreSQL。
- 安装Ubuntu Server 16.04 LTS
- 安装MySQL数据库服务器
- 安装PostgreSQL数据库服务器
- 安装Mattermost服务器
- 配置Mattermost服务器
- 在Mattermost服务器上配置TLS
- 安装NGINX服务器
- 将NGINX配置为Mattermost服务器的代理
- 使用SSL和HTTP / 2配置NGINX
1. 安装Ubuntu Server 16.04 LTS
在托管一个或多个组件的每台机器上安装64位版本的Ubuntu Server。
安装Ubuntu Server 16.04
- 要安装Ubuntu Server 16.04,请参阅Ubuntu安装指南。
- 系统安装完成后,确保是最新的安全补丁。 打开终端窗口并输入以下命令:
sudo apt-get update
sudo apt-get upgrade
系统更新后,可以开始安装构成Mattermost系统的组件。
2. 安装MySQL数据库服务器
安装并设置数据库以供Mattermost服务器使用。 您可以选择安装MySQL或PostgreSQL。
在Ubuntu Server 16.04上安装MySQL
- 登录到将要托管数据库的服务器,并打开一个终端窗口。
- 安装MySQL。
sudo apt-get install mysql-server
在安装过程中,系统会提示您为MySQL根用户创建一个密码。 记下密码,因为您将在下一步中使用密码。
-
以root身份登录到MySQL。
mysql -u root -p
当提示出现时,输入安装MySQL时创建的根密码。 -
创建Mattermost用户'mmuser'。
mysql> create user 'mmuser'@'%' identified by 'mmuser-password';
- 使用比“mmuser-password”更安全的密码。
- '%'表示mmuser可以从网络上的任何机器连接。 但是,使用托管Mattermost的计算机的IP地址更安全。 例如,如果您在IP地址为10.10.10.2的计算机上安装了Mattermost,请使用以下命令:
mysql> create user 'mmuser'@'10.10.10.2' identified by 'mmuser-password';
这里的mmuser-password
在后文还会用到,当时我换成了123456,导致认证MySQL失败。
- 创建Mattermost数据库。
mysql> create database mattermost;
- 授予用户“mmuser”的访问权限。
mysql> grant all privileges on mattermost.* to 'mmuser'@'%';
- 注销MySQL。
mysql> exit
在安装完数据库并完成初始设置之后,您现在可以安装Mattermost服务器。
3. 安装PostgreSQL数据库服务器
TODO
4. 安装Mattermost服务器
在64位机器上安装Mattermost Server。
假设该服务器的IP地址为10.10.10.2。
在Ubuntu上安装Mattermost服务器
- 登录到将要托管Mattermost Server的服务器并打开一个终端窗口。
- 下载最新版本的Mattermost服务器。 在下面的命令中,将X.X.X替换为要下载的版本:
wget https://releases.mattermost.com/X.X.X/mattermost-X.X.X-linux-amd64.tar.gz
- 提取Mattermost服务器文件。
tar -xvzf mattermost*.gz
- 将提取的文件移至
/opt
目录。
sudo mv mattermost /opt
- 创建文件的存储目录。
sudo mkdir /opt/mattermost/data
存储目录将包含用户发布到Mattermost的所有文件和图像,因此您需要确保该驱动器足够大以容纳预期数量的上传文件和图像。
- 设置一个名为
mattermost
的系统用户和组将运行此服务,并设置所有权和权限。
a. 创建Mattermost用户和组:
sudo useradd --system --user-group mattermost
b. 将用户和组mattermost设置为Mattermost文件的所有者:
sudo chown -R mattermost:mattermost /opt/mattermost
c. 给mattermost组写入权限:
sudo chmod -R g+w /opt/mattermost
- 在文件
/opt/mattermost/config/config.json
中设置数据库驱动程序。 在文本编辑器中打开文件并进行以下更改:-
如果您使用PostgreSQL:
- 将
DriverName
设置为postgres
- 将
DataSource
设置为以下值,用适当的值替换<mmuser-password>
和<host-name-or-IP>
:
"postgres://mmuser:<mmuser-password>@<host-name-or-IP>:5432/mattermost?sslmode=disable&connect_timeout=10"
- 将
-
如果您使用MySQL:
- 将
DriverName
设置为postgres
- 将
DataSource
设置为以下值,用适当的值替换<mmuser-password>
和<host-name-or-IP>
:
mmuser:<mmuser-password>@tcp(<host-name-or-IP>:3306)/mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s
<mmuser-password>
换成mmuser-password
(基于上文设定:)),将<host-name-or-IP>
换成127.0.0.1
(因为我的Mattermost服务器和MySQL服务器安装在一台服务器上面)。 - 将
-
- 测试Mattermost服务器以确保一切正常。
a. 切换到bin
目录:
cd /opt/mattermost/bin
b. 以用户mattermost身份启动Mattermost服务器:
sudo -u mattermost ./platform
当服务器启动时,会显示一些日志信息,Server is listening on :8065
。 您可以通过在终端窗口中按CTRL+C来停止服务器。 - 设置Mattermost使用systemd启动和停止。
a. 创建一个systemd单元文件:
sudo touch /lib/systemd/system/mattermost.service
b. 在文本编辑器中以root身份打开单元文件,并将以下行复制到文件中:
[Unit]
Description=Mattermost
After=network.target
After=postgresql.service
Requires=postgresql.service
[Service]
Type=simple
ExecStart=/opt/mattermost/bin/platform
Restart=always
RestartSec=10
WorkingDirectory=/opt/mattermost
User=mattermost
Group=mattermost
LimitNOFILE=49152
[Install]
WantedBy=multi-user.target
如果你正在使用MySQL,请在[Unit]部分的2个地方用mysql.service替换postgresql.service。
c. 使systemd加载新的单元。
`sudo systemctl daemon-reload`
d. 检查以确保装置已装入。
`sudo systemctl status mattermost.service`
您应该看到类似于以下的输出:
● mattermost.service - Mattermost
Loaded: loaded (/lib/systemd/system/mattermost.service; disabled; vendor preset: enabled)
Active: inactive (dead)
e. 开始服务。
`sudo systemctl start mattermost.service`
f. 验证Mattermost正在运行。
`curl http://localhost:8065`
您应该可以看到Mattermost服务器返回的HTML。
g. 设置Mattermost在机器启动时启动。
`sudo systemctl enable mattermost.service`
现在,Mattermost服务器已启动并运行,您可以执行一些初始配置和设置。
5. 配置Mattermost服务器
创建System Admin用户并设置Mattermost作为一般用途。
-
打开浏览器并导航到您的Mattermost实例。 例如,如果Mattermost服务器的IP地址是
10.10.10.2
,则请转到http://10.10.10.2:8065
。 -
创建第一个团队和用户。 系统中的第一个用户具有
system_admin
角色,可以访问系统控制台。 -
打开系统控制台。 要打开系统控制台,请单击导航面板顶部的用户名,然后在打开的菜单中单击系统控制台。
-
设置网站网址:
a. 在“系统控制台”的GENERAL部分中,单击Configuration。
b. 在Site URL字段中,设置用户指向其浏览器的网址。 例如,https://mattermost.example.com。 如果您使用HTTPS,请确保您在Mattermost服务器或代理上设置TLS。 -
设置电子邮件通知。
a. 在系统控制台的NOTIFICATIONS部分中,单击Email并进行以下更改:
- Set Enable Email Notifications to true
- Set Notification Display Name to No-Reply
- Set Notification From Address to {your-domain-name} For example, example.com
- Set SMTP Server Username to {SMTP-username} For example, admin@example.com
- Set SMTP Server Password to {SMTP-password}
- Set SMTP Server to {SMTP-server} For example, mail.example.com
- Set SMTP Server Port to 465
- Set Connection Security to TLS or STARTTLS, depending on what the SMTP server accepts.b. 点击Test Connection。
c. 连接完成后,点击Save。 -
设置文件和图像存储位置。
a. 在“系统控制台”的FILES部分中,单击Storage。
b. 如果您在本地存储文件,请将File Storage System设置为Local File System,然后接受Local Storage Directory的默认值或输入位置。 该位置必须是存在的目录,并具有Mattermost服务器的写入权限。 它可以是绝对路径或相对路径。 相对路径是相对于mattermost
目录。
c. 如果您将文件存储在Amazon S3上,请将文件存储系统设置为Amazon S3并为您的Amazon帐户输入适当的值。
d. 点击Save。
- 用户附加到消息的文件和图像不存储在数据库中。 而是将它们存储在您指定的位置。 您可以将文件存储在本地文件系统或Amazon S3中。
- 确保该位置有足够的可用空间。 所需的存储量取决于用户的数量以及用户附加到邮件的文件的数量和大小。
- 查看系统控制台中的其他设置,确保一切都按照您的要求进行。
- 重新启动Mattermost服务。
在Ubuntu 14.04和RHEL 6.6上:
sudo restart mattermost
在Ubuntu 16.04, Debian Jessie, 和RHEL 7.1上:
sudo systemctl restart mattermost
6. 在Mattermost服务器上配置TLS
如果您希望用户使用HTTPS连接,则有两个选项:
- 在Mattermost服务器上设置TLS。
- 安装代理(如NGINX)并在代理上设置TLS。
最简单的方法是在Mattermost服务器上设置TLS,但如果您希望有超过200个用户,请使用代理来获得更好的性能。 代理服务器还提供标准的HTTP请求日志。
6.1 在Mattermost服务器上配置TLS:
-
System Console > General > Configuration。
a. Change the Listen Address setting to :443.
b. Change the Connection Security setting to TLS.
c. Change the Forward port 80 to 443 setting to true. - 激活
CAP_NET_BIND_SERVICE
功能,允许Mattermost绑定到低端口。
a. 打开终端窗口并切换到Mattermostbin
目录。
cd /opt/mattermost/bin
b. 运行下列命令:
sudo setcap cap_net_bind_service=+ep ./platform
- 安装安全证书。 您可以使用Let's Encrypt自动安装和设置证书,也可以指定自己的证书。
-
要使用Let's Encrypt证书:
第一次客户端尝试连接到Mattermost服务器时检索证书。 检索客户端尝试访问服务器的任何主机名的证书。
a. Change the Use Let’s Encrypt setting to true.
b. Restart the Mattermost server for these changes to take effect. - 指定自己的证书
a. Change the Use Let’s Encrypt setting to false.
b. Change the TLS Certificate File setting to the location of the certificate file.
c. Change the TLS Key File setting to the location of the private key file.
d. Restart the Mattermost server for these changes to take effect.
-
要使用Let's Encrypt证书:
7. 安装NGINX服务器
在生产环境中,使用代理服务器来提高Mattermost的安全性和性能。
使用代理的主要好处如下:
- SSL termination
- HTTP to HTTPS redirect
- Port mapping
:80
to:8065
- Standard request logs
在Ubuntu服务器上安装NGINX:
- 登录到承载代理的服务器并打开一个终端窗口。
- 安装NGINX.
sudo apt-get install nginx
- 安装完成后,确认NGINX正在运行。
curl http://localhost
如果NGINX正在运行,您会看到以下输出:
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
.
.
.
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
您可以使用以下命令停止,启动并重新启动NGINX:
sudo service nginx stop sudo service nginx start sudo service nginx restart
下一步
- 映射完全限定的域名(FQDN),如mattermost.example.com指向NGINX服务器。
- 配置NGINX代理连接从互联网到Mattermost服务器。
8. 将NGINX配置为Mattermost服务器的代理
NGINX使用/etc/nginx/sites-available
目录中的文件进行配置。 您需要创建该文件,然后启用它。 创建文件时,需要Mattermost服务器的IP地址和Mattermost网站的完全限定域名(FQDN)。
将NGINX配置为代理
- 登录到承载NGINX的服务器并打开一个终端窗口。
- 为Mattermost创建一个配置文件。
sudo touch /etc/nginx/sites-available/mattermost
- 在文本编辑器中以root用户身份打开
/etc/nginx/sites-available/mattermost
文件,并使用以下行替换其内容(如果有)。 确保您使用您自己的值作为server_name的Mattermost服务器IP地址和FQDN。
upstream backend {
server 10.10.10.2: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 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;
proxy_read_timeout 600s;
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_pass http://backend;
}
}
- 删除现有默认的启用站点的文件。
sudo rm /etc/nginx/sites-enabled/default
- 启用mattermost配置。
sudo ln -s /etc/nginx/sites-available/mattermost /etc/nginx/sites-enabled/mattermost
- 重启NGINX。
在Ubuntu 14.04和RHEL 6.6:sudo service nginx restart
在Ubuntu 16.04, Debian Jessie,和RHEL 7.1上:sudo systemctl restart nginx
- 验证你可以通过代理访问Mattermost。
curl http://localhost
如果一切正常,您将看到Mattermost注册页面的HTML。 - 限制对端口8065的访问。
默认情况下,Mattermost服务器接受来自网络上每台计算机的端口8065上的连接。 除了承载NGINX的机器和用于管理Mattermost服务器的机器之外,使用防火墙拒绝8065端口上的连接。 如果您在Amazon Web Services上安装,则可以使用安全组来限制访问。
现在NGINX已经安装并运行了,你可以配置它使用SSL,它允许你使用HTTPS连接和HTTP/2协议。
11. 使用SSL和HTTP/2配置NGINX
使用SSL通过确保Mattermost客户端和Mattermost服务器之间的通信被加密,从而提供更高的安全性。 它也允许你配置NGINX使用HTTP / 2协议。
尽管您可以配置不使用SSL的HTTP / 2,但Firefox和Chrome浏览器仅支持安全连接上的HTTP / 2。
您可以使用任何您想要的证书,但是这些说明将告诉您如何从Let's Encrypt(一个免费的证书颁发机构)下载并安装证书。
配置SSL和HTTP/2:
- 登录到承载NGINX的服务器并打开一个终端窗口。
- 安装git。
如果你使用Ubuntu或者Debian:
sudo apt-get install git
如果你使用RHEL:
sudo yum install git
- 克隆GitHub上的Let's Encrypt存储库。
git clone https://github.com/letsencrypt/letsencrypt
- 切换到
letsencrypt
目录。
cd letsencrypt
- 停止NGINX
Ubuntu 14.04和RHEL 6.6:
sudo service nginx stop
Ubuntu 16.04和RHEL 7.1:
sudo systemctl stop nginx
- 运行
netstat
以确保没有任何内容正在侦听端口80。
netstat -na | grep ':80.*LISTEN'
- 运行Let's Encrypt安装程序。
./letsencrypt-auto certonly --standalone
出现提示时,输入您的域名。 安装完成后,您可以在/etc/letsencrypt/live
目录中找到证书。 - 在文本编辑器中以root用户身份打开文件
/etc/nginx/sites-available/mattermost
,并更新服务器部分,以将高亮显示的行合并到以下示例中。 请务必在3个地方将{domain-name}替换为您自己的域名。
.
.
.
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 {domain-name} ;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name {domain-name} ;
ssl on;
ssl_certificate /etc/letsencrypt/live/{domain-name}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/{domain-name}/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 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;
.
.
.
location / {
proxy_http_version 1.1;
.
.
.
- 重启NGINX.
Ubuntu 14.04和RHEL 6.6:
sudo service nginx start
Ubuntu 16.04和RHEL 7.1:
sudo systemctl start nginx
- 检查您的SSL证书设置是否正确。
- 通过访问诸如https://www.ssllabs.com/ssltest/index.html的站点来测试SSL证书
- 如果关于链路或证书路径丢失有错误,则可能缺少需要包含的中间证书。
- 配置
cron
,以便证书每个月都会自动更新
crontab -e
在以下行中,使用您自己的域名替换{domain-name}
@monthly /home/ubuntu/letsencrypt/letsencrypt-auto certonly --reinstall --nginx -d {domain-name} && sudo service nginx reload
网友评论