{"id":23901,"date":"2023-02-06T20:46:33","date_gmt":"2023-01-05T15:21:44","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90ubuntu%e3%80%91%e5%ae%89%e8%a3%85-mattermost\/"},"modified":"2025-08-11T00:31:27","modified_gmt":"2025-08-10T16:31:27","slug":"%e3%80%90ubuntu%e3%80%91%e5%ae%89%e8%a3%85-mattermost","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90ubuntu%e3%80%91%e5%ae%89%e8%a3%85-mattermost\/","title":{"rendered":"\u3010Ubuntu\u3011\u5b89\u88c5 Mattermost"},"content":{"rendered":"<p>\u5728\u8fd9\u7bc7\u6587\u7ae0\u4e2d\u8981\u89e3\u91ca\u7684\u5185\u5bb9\uff1a<\/p>\n<p>\u4f7f\u7528\u4e9a\u9a6c\u900a\u4e91\u670d\u52a1\u5668\u642d\u5efaUbuntu\u5b9e\u4f8b\uff0c\u7136\u540e\u5728\u5176\u4e0a\u5b89\u88c5Mattermost\u3002<br \/>\n\u914d\u7f6e\u5305\u62ecNginx\u548cMySQL\u3002<\/p>\n<p>\u6b64\u5916\uff0c\u6211\u4eec\u5c06\u4f7f\u7528\u72ec\u7acb\u57df\u540d\u5e76\u901a\u8fc7Let&#8217;s Encrypt\u8fdb\u884cSSL\u52a0\u5bc6\u3002<\/p>\n<p>\u5173\u4e8e\u4ee5\u4e0b\u5185\u5bb9\uff0c\u6211\u4eec\u4f1a\u5728\u53e6\u4e00\u7bc7\u6587\u7ae0\u4e2d\u8fdb\u884c\u603b\u7ed3\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u5c06\u6570\u636e\u4ece Slack \u8fc1\u79fb\u5230 Mattermost<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u5173\u4e8e\u64cd\u4f5c Mattermost \u7684 mmctl \u547d\u4ee4\uff08\u4f8b\u5982\uff0c\u5982\u4f55\u5220\u9664\u901a\u9053\uff09\u3002<\/ul>\n<h2>\u542f\u52a8\u670d\u52a1\u5668<\/p>\n<h3>\u521b\u5efa\u4e00\u4e2a\u5b9e\u4f8b\u6211\u4f1a\u4f7f\u7528Amazon Lightsail\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u5728\u542f\u52a8\u5b9e\u4f8b\u65f6\u7684\u914d\u7f6e\u5185\u5bb9\u5982\u4e0b\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u5e73\u53f0\uff1aLinux \/ Unix<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u53ea\u6709OS\uff1aUbuntu20.04 LTS<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u5b9e\u4f8b\u8ba1\u5212\uff1a10 \u7f8e\u5143 \u8ba1\u5212<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u203b \u5982\u679c\u5185\u5b58\u6ca1\u6709\u8fbe\u5230 2GB\uff0c\u5728 SSH \u8fc7\u7a0b\u4e2d\u53ef\u80fd\u4f1a\u51fa\u73b0\u5361\u987f\u3002\u2026<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">SSH \u5bc6\u94a5\u5bf9\uff1a\u4fdd\u7559\u4e3a\u9ed8\u8ba4\u503c<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u542f\u7528\u81ea\u52a8\u5feb\u7167\uff1a\u672a\u9009\u4e2d<\/ul>\n<p>\u5b8c\u6210\u540e\uff0c\u5c06\u7b49\u5f85\u72b6\u6001\u4ece\u201c\u4fdd\u7559\u4e2d\u201d\u53d8\u4e3a\u201c\u6267\u884c\u4e2d\u201d\u3002<\/p>\n<p>\u8d39\u7528\u4e0e\u4e9a\u9a6c\u900a EC2 \u4e0d\u540c\uff0c\u65e0\u8bba\u7cfb\u7edf\u662f\u8fd0\u884c\u8fd8\u662f\u505c\u6b62\uff0c\u90fd\u4f1a\u6536\u53d6\u8d39\u7528\u3002<\/p>\n<h3>IP\u5730\u5740\u7684\u56fa\u5b9a\u5728 &#8220;\u7f51\u7edc &#8220;\u9009\u9879\u5361\u4e2d\uff0c\u521b\u5efa\u5e76\u9644\u52a0\u9759\u6001 IP \u5730\u5740\u3002<br \/>\n\u9644\u52a0\u65f6\u4e0d\u6536\u8d39\u3002<\/p>\n<h3>\u9632\u706b\u5899\u8bbe\u7f6e\u3002\u540c\u6837\u4ece &#8220;\u7f51\u7edc &#8220;\u9009\u9879\u5361\u4e2d\u6dfb\u52a0\u5b89\u5168\u89c4\u5219\u3002<\/p>\n<p>Mattermost \u7684\u7aef\u53e3\u9ed8\u8ba4\u4e3a\uff1a8065\uff0c\u56e0\u6b64\u9700\u8981\u6253\u5f00\u8be5\u7aef\u53e3\u3002<br \/>\n\u6b64\u5916\uff0c\u8fd8\u9700\u8981\u6253\u5f0080\u53f7\u7aef\u53e3\uff08HTTP\uff09\u548c443\u53f7\u7aef\u53e3\uff08HTTPS\uff09\u3002<\/p>\n<h3>SSH\u8fde\u63a5\u4ece &#8220;\u8fde\u63a5 &#8220;\u9009\u9879\u5361\uff0c\u901a\u8fc7 &#8220;\u4f7f\u7528 SSH \u8fde\u63a5 &#8220;\u8fdb\u884c\u8fde\u63a5\uff0c\u7136\u540e\u767b\u5f55\u670d\u52a1\u5668\u3002<\/p>\n<p>\u8fd8\u6709\u5176\u4ed6\u51e0\u79cd\u65b9\u6cd5\uff0c\u4f46\u8fd9\u79cd\u57fa\u4e8e\u6d4f\u89c8\u5668\u7684\u8fde\u63a5\u662f\u6700\u7b80\u5355\u3001\u6700\u597d\u7684\u3002<br \/>\n\u6240\u6709\u540e\u7eed\u6b65\u9aa4\u90fd\u5728\u670d\u52a1\u5668\u4e2d\u5b8c\u6210\u3002<\/p>\n<h2>Mattermost \u7684\u8bbe\u7f6e\u8bf7\u9075\u5faa\u4ee5\u4e0b\u5b98\u65b9\u7a0b\u5e8f\u3002<\/p>\n<h3>\u51c6\u5907\u597d\u786e\u4fdd\u5e94\u7528\u6700\u65b0\u7684\u5b89\u5168\u8865\u4e01\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo apt update\r\n$ sudo apt upgrade\r\n\r\n\/\/ \u5728\u7d2b\u8272\u753b\u9762\u4e2d\uff0c\u9009\u62e9 \"\u4fdd\u7559\u5f53\u524d\u5b89\u88c5\u7684\u672c\u5730\u7248\u672c\"\u3002\r\n<\/code><\/pre>\n<h3>MySQL\u6309\u4ee5\u4e0b\u987a\u5e8f\u64cd\u4f5c<\/p>\n<h4>\u9996\u5148\u8fdb\u884c\u5b89\u88c5\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo apt install mysql-server\r\n<\/code><\/pre>\n<h4>\u8bbe\u7f6eroot\u7528\u6237\u7684\u5bc6\u7801<\/p>\n<pre class=\"post-pre\"><code>$ sudo mysql\r\nmysql&gt; ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'hogehoge';\r\nmysql&gt; exit\r\n<\/code><\/pre>\n<p>\u5728\u516c\u5f0f\u4e2d\uff0c\u6211\u4eec\u9996\u5148\u6267\u884c\u4e86\u547d\u4ee4\u201csudo mysql_secure_installation\u201d\uff0c\u5982\u679c\u4e0d\u6309\u7167\u8fd9\u4e2a\u6b65\u9aa4\u8fdb\u884c\u64cd\u4f5c\uff0c\u5c06\u4f1a\u51fa\u73b0\u4e0b\u9762\u7684\u9519\u8bef\u3002<\/p>\n<pre class=\"post-pre\"><code>Failed! Error: SET PASSWORD has no significance for user 'root'@'localhost' as the au\r\nthentication method used doesn't store authentication data in the MySQL server. Please con\r\nsider using ALTER USER instead if you want to change authentication parameters.\r\n<\/code><\/pre>\n<h4>\u5b89\u5168\u8bbe\u7f6e<\/p>\n<pre class=\"post-pre\"><code>$ sudo mysql_secure_installation  \/\/ \u4f7f\u7528\u521a\u624d\u4f7f\u7528\u7684\u5bc6\u7801\u767b\u5f55\u3002\r\n<\/code><\/pre>\n<p>\u6267\u884c\u540e\uff0c\u53ea\u6709\u4ee5\u4e0b\u95ee\u9898\u7684\u7b54\u6848\u662f &#8220;\u5426&#8221;\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u300cWould you like to setup VALIDATE PASSWORD component?\u300d\uff1aNo<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u300cChange the password for root ?\u300d\uff1aNo<\/ul>\n<h4>\u767b\u5f55<\/p>\n<pre class=\"post-pre\"><code>$ mysql -u root -p  \u3000\/\/ \u4f7f\u7528\u521a\u624d\u4f7f\u7528\u7684\u5bc6\u7801\u767b\u5f55\u3002\r\n<\/code><\/pre>\n<h4>\u521b\u5efa\u7528\u6237 (mmuser)<\/p>\n<pre class=\"post-pre\"><code>mysql&gt; create user 'mmuser'@'%' identified by 'mmuserP@22w0rd';\r\nmysql&gt; show grants for 'mmuser'@'%';\r\n<\/code><\/pre>\n<h4>\u521b\u5efaDB\u6211\u5011\u5c07\u5275\u5efa\u4e00\u500b\u6578\u64da\u5eab\u4f86\u4fdd\u5b58Mattermost\u7684\u6578\u64da\u3002<\/p>\n<pre class=\"post-pre\"><code>mysql&gt; create database mattermost;\r\n<\/code><\/pre>\n<h4>\u6388\u4e88\u8bbf\u95ee\u6743\u9650\u6211\u5011\u5c07\u8ce6\u4e88\u5148\u524d\u5275\u5efa\u7684\u7528\u6236\uff08mmuser\uff09\u5728\u6578\u64da\u5eab\uff08mattermost\uff09\u4e2d\u7684\u8a2a\u554f\u6b0a\u9650\u3002<\/p>\n<pre class=\"post-pre\"><code>mysql&gt; grant all privileges on mattermost.* to 'mmuser'@'%';\r\nmysql&gt; show grants for 'mmuser'@'%';\r\nmysql&gt; exit\r\n<\/code><\/pre>\n<p>\u4ee5\u4e0a\uff0cMySQL\u7684\u8bbe\u7f6e\u5df2\u7ecf\u5b8c\u6210\u3002<\/p>\n<h3>&#8220;Mattermost&#8221; can be paraphrased in Chinese as &#8220;\u4e8b\u9879\u6700\u91cd\u8981&#8221; .\u4e0b\u4e00\u6b65\uff0c\u6211\u4eec\u5c06\u5b89\u88c5Mattermost\u3002<\/p>\n<h4>\u4e0b\u8f7d<\/p>\n<pre class=\"post-pre\"><code>$ wget https:\/\/releases.mattermost.com\/7.2.0\/mattermost-7.2.0-linux-amd64.tar.gz\r\n<\/code><\/pre>\n<p>\u60a8\u53ef\u4ee5\u5728\u6b64\u5904\u67e5\u770b\u6700\u65b0\u7248\u672c\u3002<\/p>\n<p>&nbsp;<\/p>\n<h4>\u89e3\u51cd<\/p>\n<pre class=\"post-pre\"><code>$ tar -xvzf mattermost*.gz\r\n<\/code><\/pre>\n<h4>\u8f6c\u5230\/opt\u76ee\u5f55\uff0c\u5e76\u521b\u5efa\u4e00\u4e2a\u540d\u4e3adata\u7684\u6587\u4ef6\u5939\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo mv mattermost \/opt\r\n$ sudo mkdir \/opt\/mattermost\/data\r\n<\/code><\/pre>\n<h4>\u521b\u5efa\u7cfb\u7edf\u7528\u6237\u548c\u7ec4\u3002\u521b\u5efa\u7528\u4e8e\u8fd0\u884cMattermost\u7684\u7cfb\u7edf\u7528\u6237\u548c\u7ec4\uff0c\u5e76\u6388\u4e88\u6743\u9650\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo useradd --system --user-group mattermost\r\n$ sudo chown -R mattermost:mattermost \/opt\/mattermost\r\n$ sudo chmod -R g+w \/opt\/mattermost\r\n<\/code><\/pre>\n<h4>\u7f16\u8f91\u8bbe\u7f6e\u6587\u4ef6\u7f16\u8f91 Mattermost \u914d\u7f6e\u6587\u4ef6 (config.json) \u6240\u9700\u7684\u90e8\u5206\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo vim \/opt\/mattermost\/config\/config.json\r\n<\/code><\/pre>\n<p>\u7f16\u8f91\u5185\u5bb9\u5305\u62ec<\/p>\n<pre class=\"post-pre\"><code>\"SiteURL\" : \"https:\/\/{example.com}\"\r\n<\/code><\/pre>\n<p>\u203b\u5c06 {example.com} \u8bbe\u7f6e\u4e3a\u60a8\u5e0c\u671b Mattermost \u5173\u8054\u7684\u81ea\u5df1\u7684\u57df\u540d\u3002<\/p>\n<p>\u5982\u679c\u60a8\u5728\u7f51\u7ad9\u7b49\u4e0a\u4f7f\u7528\u57df\u540d\u7684\u8bdd\uff0c\u63a8\u8350\u60a8\u521b\u5efa\u548c\u5206\u914d\u5b50\u57df\u540d\u6765\u4f7f\u7528\u3002<\/p>\n<p>\u203b \u914d\u7f6e DNS \u8bbe\u7f6e\uff1b\u4e3a A \u8bb0\u5f55\u7684\u503c\u8bbe\u7f6e\u5b9e\u4f8b\u7684\u516c\u5171 IP\u3002<\/p>\n<pre class=\"post-pre\"><code>\"DriverName\": \"mysql\"\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>\"DataSource\": \"mmuser:&lt;mmuser-password&gt;@tcp(localhost:3306)\/mattermost?charset=utf8mb4,utf8&amp;writeTimeout=30s\"\r\n<\/code><\/pre>\n<p>\u203b \u2026\u4e3a\u4e4b\u524d\u5728 MySQL \u4e2d\u521b\u5efa\u7684\u7528\u6237 (mmuser) \u8bbe\u7f6e\u7684\u5bc6\u7801\u3002<\/p>\n<p>\u203b \u5173\u4e8e &#8220;localhost &#8220;\u90e8\u5206\uff0c\u867d\u7136\u5b98\u65b9\u5199\u6cd5\u662f &#8220;tcp(\u5b9e\u4f8b\u7684\u516c\u5171 IP:3306)&#8221;)\uff0c\u4f46\u7531\u4e8e ping DB \u5931\u8d25\u4f1a\u5bfc\u81f4\u51fa\u9519\uff0c\u56e0\u6b64\u5c06\u5176\u8bbe\u7f6e\u4e3a localhost\u3002 \u4f46\u662f\uff0c\u5982\u679c\u4f7f\u7528 &#8220;tcp(instance&#8217;s public IP:3306)&#8221;)\uff0c\u5219\u4f1a\u51fa\u73b0 ping DB \u5931\u8d25\u548c\u9519\u8bef\uff0c\u56e0\u6b64\u5c06\u5176\u8bbe\u7f6e\u4e3a localhost\u3002<br \/>\n\u3002<\/p>\n<pre class=\"post-pre\"><code>\"DefaultServerLocale\": \"ja\"\r\n\"DefaultClientLocale\": \"ja\"\r\n<\/code><\/pre>\n<h4>\u53ef\u4ee5\u8bd5\u8bd5\u542f\u52a8Mattermost\u3002<\/p>\n<pre class=\"post-pre\"><code>$ cd \/opt\/mattermost\r\n$ sudo -u mattermost .\/bin\/mattermost\r\n<\/code><\/pre>\n<p>\u5982\u679c\u663e\u793a\u4e86\u5404\u79cd\u4fe1\u606f\uff0c\u5e76\u6700\u540e\u663e\u793a &#8220;\u670d\u52a1\u5668\u6b63\u5728\u76d1\u542c :8065&#8221; \u5219\u8868\u793a\u6210\u529f\u3002<\/p>\n<h4>systemd \u7684\u5355\u5143\u6587\u4ef6\u914d\u7f6e<br \/>\n\u8981\u4f7f\u7528 systemd\uff0c\u8bf7\u521b\u5efa systemd \u5355\u5143\u6587\u4ef6\u5e76\u914d\u7f6e\u5176\u5185\u5bb9\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo vim \/lib\/systemd\/system\/mattermost.service\r\n<\/code><\/pre>\n<p>\u7531\u4e8e\u4f7f\u7528MySQL\uff0c\u5185\u5bb9\u5c06\u6309\u7167\u5b98\u65b9\u63d0\u4f9b\u7684\u8d44\u6599\u8fdb\u884c\u53c2\u8003\uff0c\u5177\u4f53\u5982\u4e0b\u6240\u793a\u3002<\/p>\n<pre class=\"post-pre\"><code>[Unit]\r\nDescription=Mattermost\r\nAfter=network.target\r\nAfter=mysql.service\r\nBindsTo=mysql.service\r\n\r\n[Service]\r\nType=notify\r\nExecStart=\/opt\/mattermost\/bin\/mattermost\r\nTimeoutStartSec=3600\r\nKillMode=mixed\r\nRestart=always\r\nRestartSec=10\r\nWorkingDirectory=\/opt\/mattermost\r\nUser=mattermost\r\nGroup=mattermost\r\nLimitNOFILE=49152\r\n\r\n[Install]\r\n  WantedBy=mysql.service\r\n<\/code><\/pre>\n<h4>\u52a0\u8f7dsystemd\uff0c\u5e76\u786e\u8ba4\u5b83\u662f\u5426\u5df2\u6b63\u786e\u52a0\u8f7d\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo systemctl daemon-reload\r\n$ sudo systemctl status mattermost.service\r\n<\/code><\/pre>\n<p>\u5982\u679c\u663e\u793a\u4ee5\u4e0b\u5185\u5bb9\uff0c\u5219\u6210\u529f\u3002<\/p>\n<pre class=\"post-pre\"><code>\u25cf mattermost.service - Mattermost\r\nLoaded: loaded (\/lib\/systemd\/system\/mattermost.service; disabled; vendor preset: enabled)\r\nActive: inactive (dead)\r\n<\/code><\/pre>\n<h4>\u542f\u52a8Mattermost<\/p>\n<pre class=\"post-pre\"><code>$ sudo systemctl start mattermost.service\r\n<\/code><\/pre>\n<p>\u5982\u679c\u6267\u884c\u4ee5\u4e0b\u64cd\u4f5c\u5e76\u4e14\u8fd4\u56deMatterhost\u7684HTML\uff0c\u5219\u8868\u793a\u6210\u529f\u3002<\/p>\n<pre class=\"post-pre\"><code>$ curl http:\/\/localhost:8065\r\n<\/code><\/pre>\n<p>\u6700\u540e\uff0c\u6211\u4eec\u5c06\u8bbe\u7f6eMattermost\u5728\u673a\u5668\u542f\u52a8\u65f6\u81ea\u52a8\u542f\u52a8\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo systemctl enable mattermost.service\r\n<\/code><\/pre>\n<h3>Nginx\u7136\u540e\uff0c\u6211\u4eec\u6765\u8bbe\u7f6e\u7f51\u7edc\u670d\u52a1\u5668\u3002<\/p>\n<h4>\u9996\u5148\u5b89\u88c5\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo apt update\r\n$ sudo apt install nginx\r\n$ curl http:\/\/localhost\r\n<\/code><\/pre>\n<h4>\u521b\u5efa\u8bbe\u7f6e\u6587\u4ef6<\/p>\n<pre class=\"post-pre\"><code>$ sudo vim \/etc\/nginx\/sites-available\/mattermost\r\n<\/code><\/pre>\n<p>\u5185\u5bb9\u5982\u4e0b<\/p>\n<p>\u203b {IP\u5730\u5740} \u662f\u5b9e\u4f8b\u7684\u516c\u5171IP\u3002<br \/>\n\u203b {example.com} \u662f\u8981\u4e0eMattermost\u5173\u8054\u7684\u81ea\u5b9a\u4e49\u57df\u540d\u8bbe\u7f6e\u3002<\/p>\n<pre class=\"post-pre\"><code>upstream backend {\r\n   server {IP\u5730\u5740}:8065;\r\n   keepalive 32;\r\n}\r\n\r\nproxy_cache_path \/var\/cache\/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;\r\n\r\nserver {\r\n   listen 80 default_server;\r\n   server_name {example.com};\r\n\r\n   location ~ \/api\/v[0-9]+\/(users\/)?websocket$ {\r\n       proxy_set_header Upgrade $http_upgrade;\r\n       proxy_set_header Connection \"upgrade\";\r\n       client_max_body_size 50M;\r\n       proxy_set_header Host $http_host;\r\n       proxy_set_header X-Real-IP $remote_addr;\r\n       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\n       proxy_set_header X-Forwarded-Proto $scheme;\r\n       proxy_set_header X-Frame-Options SAMEORIGIN;\r\n       proxy_buffers 256 16k;\r\n       proxy_buffer_size 16k;\r\n       client_body_timeout 60;\r\n       send_timeout 300;\r\n       lingering_timeout 5;\r\n       proxy_connect_timeout 90;\r\n       proxy_send_timeout 300;\r\n       proxy_read_timeout 90s;\r\n       proxy_pass http:\/\/backend;\r\n   }\r\n\r\n   location \/ {\r\n       client_max_body_size 50M;\r\n       proxy_set_header Connection \"\";\r\n       proxy_set_header Host $http_host;\r\n       proxy_set_header X-Real-IP $remote_addr;\r\n       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\n       proxy_set_header X-Forwarded-Proto $scheme;\r\n       proxy_set_header X-Frame-Options SAMEORIGIN;\r\n       proxy_buffers 256 16k;\r\n       proxy_buffer_size 16k;\r\n       proxy_read_timeout 600s;\r\n       proxy_cache mattermost_cache;\r\n       proxy_cache_revalidate on;\r\n       proxy_cache_min_uses 2;\r\n       proxy_cache_use_stale timeout;\r\n       proxy_cache_lock on;\r\n       proxy_http_version 1.1;\r\n       proxy_pass http:\/\/backend;\r\n   }\r\n}\r\n<\/code><\/pre>\n<h4>\u5220\u9664\u73b0\u6709\u7684\u914d\u7f6e\u6587\u4ef6\u7531\u4e8e\u521b\u5efa\u4e86\u65b0\u7684\u914d\u7f6e\u6587\u4ef6\uff08\/etc\/nginx\/sites-available\/mattermost\uff09\uff0c\u56e0\u6b64\u6211\u4eec\u5c06\u5220\u9664\u73b0\u6709\u7684\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo rm \/etc\/nginx\/sites-available\/default\r\n<\/code><\/pre>\n<h4>\u6fc0\u6d3b\u914d\u7f6e\u6587\u4ef6\u60a8\u521a\u521a\u521b\u5efa\u7684\u914d\u7f6e\u6587\u4ef6\u3002\u5c06(\/etc\/nginx\/sites-available\/mattermost) \u7684\u7b26\u53f7\u94fe\u63a5\u653e\u5230 \/etc\/nginx\/sites-enabled\/ \u4e2d\uff0c\u7136\u540e\u542f\u52a8 Nginx\u3002\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo rm \/etc\/nginx\/sites-enabled\/default\r\n$ sudo ln -s \/etc\/nginx\/sites-available\/mattermost \/etc\/nginx\/sites-enabled\/mattermost\r\n$ sudo nginx -t\r\n$ sudo systemctl start nginx\r\n$ curl http:\/\/localhost\r\n<\/code><\/pre>\n<h2>SSL\u63a5\u4e0b\u6765\uff0c\u4f7f\u7528 Let&#8217;s Encrypt \u4e3a\u7f51\u7ad9\u52a0\u5bc6\uff08TLS\uff09\u3002<\/p>\n<p>&nbsp;<\/p>\n<h4>\u5b89\u88c5Certbot\u8ba9\u6211\u4eec\u51c6\u5907\u4f7f\u7528Certbot\u8fd9\u4e2aACME\u5ba2\u6237\u7aef\u6765\u53d1\u884cLet&#8217;s Encrypt\u8bc1\u4e66\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo snap install core; sudo snap refresh core\r\n$ sudo snap install --classic certbot\r\n$ sudo ln -s \/snap\/bin\/certbot \/usr\/bin\/certbot\r\n<\/code><\/pre>\n<h4>&#8211;\u8fdb\u884c\u4e00\u6b21\u8bd5\u8fd0\u884c\u8fdb\u884c\u6d4b\u8bd5\u5728\u7b7e\u53d1\u8bc1\u4e66\u4e4b\u524d\uff0c\u8bf7\u6d4b\u8bd5 DNS \u662f\u5426\u914d\u7f6e\u6b63\u786e\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo certbot certonly --dry-run\r\n\/\/ 1: \u9009\u62e9Nginx Web Server plugin (nginx) \r\n<\/code><\/pre>\n<p>\u203b \u786e\u4fdd\u6253\u5f00 80 \u7aef\u53e3\uff08HTTP\uff09\u3002 \u5982\u679c\u672a\u6253\u5f00\uff0c\u6311\u6218\u5c06\u5931\u8d25\u5e76\u63d0\u793a\u9519\u8bef\u3002<\/p>\n<h4>\u9881\u53d1\u8bc1\u4e66\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo certbot\r\n$ curl https:\/\/example.com\r\n<\/code><\/pre>\n<h4>SSL \u5b89\u5168\u8bbe\u7f6e<br \/>\n\u6700\u540e\uff0c\u6211\u4eec\u5c06\u91cd\u65b0\u7f16\u8f91Nginx\u7684\u914d\u7f6e\u6587\u4ef6\uff0c\u5e76\u52a0\u5f3aSSL\u5b89\u5168\u8bbe\u7f6e\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo vim \/etc\/nginx\/site-availables\/mattermost\r\n<\/code><\/pre>\n<p>\u7f16\u8f91\u5185\u5bb9\u5982\u4e0b\u3002 \u8981\u6dfb\u52a0\u7684\u65b0\u7ae0\u8282\u5df2\u4f5c\u6ce8\u91ca\u3002<\/p>\n<pre class=\"post-pre\"><code>upstream backend {\r\n   server {IP\u5730\u5740}:8065;\r\n   keepalive 32;\r\n}\r\n\r\nproxy_cache_path \/var\/cache\/nginx levels=1:2 keys_zone=mattermost_cache:10m max_size=3g inactive=120m use_temp_path=off;\r\n\r\nserver {\r\n    listen 80 default_server;\r\n    server_name {example.com};\r\n\r\n    location ~ \/api\/v[0-9]+\/(users\/)?websocket$ {\r\n        proxy_set_header Upgrade $http_upgrade;\r\n        proxy_set_header Connection \"upgrade\";\r\n        client_max_body_size 50M;\r\n        proxy_set_header Host $http_host;\r\n        proxy_set_header X-Real-IP $remote_addr;\r\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\n        proxy_set_header X-Forwarded-Proto $scheme;\r\n        proxy_set_header X-Frame-Options SAMEORIGIN;\r\n        proxy_buffers 256 16k;\r\n        proxy_buffer_size 16k;\r\n        client_body_timeout 60;\r\n        send_timeout 300;\r\n        lingering_timeout 5;\r\n        proxy_connect_timeout 90;\r\n        proxy_send_timeout 300;\r\n        proxy_read_timeout 90s;\r\n        proxy_http_version 1.1;  # \u52a0\u4e0a\u8fd9\u53e5\u8bdd\u3002\r\n        proxy_pass http:\/\/backend;\r\n    }\r\n\r\n    location \/ {\r\n        client_max_body_size 50M;\r\n        proxy_set_header Connection \"\";\r\n        proxy_set_header Host $http_host;\r\n        proxy_set_header X-Real-IP $remote_addr;\r\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\n        proxy_set_header X-Forwarded-Proto $scheme;\r\n        proxy_set_header X-Frame-Options SAMEORIGIN;\r\n        proxy_buffers 256 16k;\r\n        proxy_buffer_size 16k;\r\n        proxy_read_timeout 600s;\r\n        proxy_cache mattermost_cache;\r\n        proxy_cache_revalidate on;\r\n        proxy_cache_min_uses 2;\r\n        proxy_cache_use_stale timeout;\r\n        proxy_cache_lock on;\r\n        proxy_http_version 1.1;\r\n        proxy_pass http:\/\/backend;\r\n    }\r\n}\r\n\r\n# \u4ece\u8fd9\u91cc\u5f00\u59cb\u5411\u4e0b\u6dfb\u52a0\u6240\u6709\u5185\u5bb9\u3002\r\n    listen 443 ssl http2; # managed by Certbot\r\n    ssl_certificate \/etc\/letsencrypt\/live\/{\u57df\u540d}\/fullchain.pem; # managed by Certbot\r\n    ssl_certificate_key \/etc\/letsencrypt\/live\/{\u57df\u540d}\/privkey.pem; # managed by Certbot\r\n    # include \/etc\/letsencrypt\/options-ssl-nginx.conf; # managed by Certbot\r\n    ssl_dhparam \/etc\/letsencrypt\/ssl-dhparams.pem; # managed by Certbot\r\n\r\n    ssl_session_timeout 1d;\r\n\r\n    # Enable TLS versions (TLSv1.3 is required upcoming HTTP\/3 QUIC).\r\n    ssl_protocols TLSv1.2 TLSv1.3;\r\n\r\n    # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to\r\n    # prevent replay attacks.\r\n    #\r\n    # @see: https:\/\/nginx.org\/en\/docs\/http\/ngx_http_ssl_module.html#ssl_early_data\r\n    ssl_early_data on;\r\n\r\n    ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA;\r\n    ssl_prefer_server_ciphers on;\r\n    ssl_session_cache shared:SSL:50m;\r\n    # HSTS (ngx_http_headers_module is required) (15768000 seconds = six months)\r\n    add_header Strict-Transport-Security max-age=15768000;\r\n    # OCSP Stapling ---\r\n    # fetch OCSP records from URL in ssl_certificate and cache them\r\n    ssl_stapling on;\r\n    ssl_stapling_verify on;\r\n}\r\n\r\n\r\nserver {\r\n    if ($host = {example.com}) {  \/\/ \u8bf7\u8bb0\u4f4f\u7528\u60a8\u81ea\u5df1\u7684\u57df\u540d\u7f16\u8f91\u8fd9\u4e00\u884c\r\n        return 301 https:\/\/$host$request_uri;\r\n    } # managed by Certbot\r\n\r\n\r\n    listen 80 default_server;\r\n    server_name {example.com};   \/\/ \u8bb0\u5f97\u7f16\u8f91\r\n    return 404; # managed by Certbot\r\n\r\n}\r\n<\/code><\/pre>\n<h4>\u53cd\u6620\u6539\u5199\u5b8c\u6210\u540e\uff0c\u8bbe\u7f6e\u5c06\u5f97\u5230\u53cd\u6620\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sudo rm \/etc\/nginx\/sites-enabled\/mattermost\r\n$ sudo ln -s \/etc\/nginx\/sites-available\/mattermost \/etc\/nginx\/sites-enabled\/mattermost\r\n$ sudo nginx -t\r\n$ sudo systemctl restart nginx\r\n<\/code><\/pre>\n<p>\u6267\u884c\u4ee5\u4e0b\u64cd\u4f5c\uff0c\u5982\u679c\u8fd4\u56de Matterhost HTML\uff0c\u5219\u8868\u793a\u6210\u529f\u3002<\/p>\n<pre class=\"post-pre\"><code>$ curl https:\/\/example.com\r\n<\/code><\/pre>\n<p>\u4e5f\u53ef\u901a\u8fc7\u5728\u4ee5\u4e0b\u7f51\u5740\u641c\u7d22\u57df\u540d\u6765\u68c0\u67e5\u8bc1\u4e66<\/p>\n<p>&nbsp;<\/p>\n<p>\u5f53\u60a8\u901a\u8fc7\u6d4f\u89c8\u5668\u8bbf\u95ee https:\/\/example.com \u65f6\uff0c\u53ef\u80fd\u4f1a\u51fa\u73b0\u663e\u793a Nginx \u9ed8\u8ba4\u9875\u9762\u6216\u8005\u663e\u793a &#8220;\u6b64\u8fde\u63a5\u672a\u53d7\u4fdd\u62a4&#8221; \u7684\u60c5\u51b5\uff0c\u8bf7\u5c1d\u8bd5\u91cd\u65b0\u52a0\u8f7d\u9875\u9762\u3002\u8fd9\u53ef\u80fd\u662f\u56e0\u4e3a\u7f13\u5b58\u95ee\u9898\u6240\u5bfc\u81f4\u7684\u3002<\/p>\n<p>\u4ee5\u4e0a\uff0cMattermost \u5df2\u7ecf\u6210\u529f\u542f\u52a8\u5e76\u5b8c\u6210\u4e86SSL\u52a0\u5bc6\u3002<\/p>\n<p>\u6211\u5011\u9019\u6b21\u4f7f\u7528\u4e86 Amazon Lightsail \u7684\u5be6\u4f8b\uff0c\u4f46\u53ea\u8981\u662f\u76f8\u540c\u7684\u4f5c\u696d\u7cfb\u7d71\uff0c\u6211\u8a8d\u70ba\u5728 Amazon EC2 \u4e0a\u4e5f\u6c92\u6709\u554f\u984c\u3002<\/p>\n<p>\u5728\u53e6\u4e00\u7bc7\u6587\u7ae0\u4e2d<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u5c06\u6570\u636e\u4ece Slack \u8fc1\u79fb\u5230 Mattermost<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u5173\u4e8e\u64cd\u4f5c Mattermost \u7684 mmctl \u547d\u4ee4\uff08\u4f8b\u5982\uff0c\u5982\u4f55\u5220\u9664\u901a\u9053\uff09\u3002<\/ul>\n<p>\u5982\u679c\u6ca1\u95ee\u9898\u7684\u8bdd\uff0c\u6211\u6253\u7b97\u5199\u8fd9\u4e2a\uff0c\u8bf7\u60a8\u67e5\u770b\u3002<\/p>\n<p>\u5982\u679c\u65b9\u4fbf\u7684\u8bdd\uff0c\u8bf7\u9605\u8bfb\u6211\u5728\u4ee5\u4e0b\u535a\u5ba2\u4e2d\u53d1\u5e03\u7684\u6587\u7ae0\u3002<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5728\u8fd9\u7bc7\u6587\u7ae0\u4e2d\u8981\u89e3\u91ca\u7684\u5185\u5bb9\uff1a \u4f7f\u7528\u4e9a\u9a6c\u900a\u4e91\u670d\u52a1\u5668\u642d\u5efaUbuntu\u5b9e\u4f8b\uff0c\u7136\u540e\u5728\u5176\u4e0a\u5b89\u88c5Mattermost\u3002 \u914d\u7f6e [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[227],"class_list":["post-23901","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-227"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u3010Ubuntu\u3011\u5b89\u88c5 Mattermost - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"\u5173\u4e8e\u3010Ubuntu\u3011\u5b89\u88c5 Mattermost\u7684\u6280\u672f\u6587\u7ae0\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u3010ubuntu\u3011\u5b89\u88c5-mattermost\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u3010Ubuntu\u3011\u5b89\u88c5 Mattermost\" \/>\n<meta property=\"og:description\" content=\"\u5173\u4e8e\u3010Ubuntu\u3011\u5b89\u88c5 Mattermost\u7684\u6280\u672f\u6587\u7ae0\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u3010ubuntu\u3011\u5b89\u88c5-mattermost\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-05T15:21:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-10T16:31:27+00:00\" \/>\n<meta name=\"author\" content=\"\u6587, \u7fd4\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6587, \u7fd4\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90ubuntu%e3%80%91%e5%ae%89%e8%a3%85-mattermost\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90ubuntu%e3%80%91%e5%ae%89%e8%a3%85-mattermost\/\",\"name\":\"\u3010Ubuntu\u3011\u5b89\u88c5 Mattermost - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-01-05T15:21:44+00:00\",\"dateModified\":\"2025-08-10T16:31:27+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c\"},\"description\":\"\u5173\u4e8e\u3010Ubuntu\u3011\u5b89\u88c5 Mattermost\u7684\u6280\u672f\u6587\u7ae0\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90ubuntu%e3%80%91%e5%ae%89%e8%a3%85-mattermost\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90ubuntu%e3%80%91%e5%ae%89%e8%a3%85-mattermost\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90ubuntu%e3%80%91%e5%ae%89%e8%a3%85-mattermost\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u3010Ubuntu\u3011\u5b89\u88c5 Mattermost\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c\",\"name\":\"\u6587, \u7fd4\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"caption\":\"\u6587, \u7fd4\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90ubuntu%e3%80%91%e5%ae%89%e8%a3%85-mattermost\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u3010Ubuntu\u3011\u5b89\u88c5 Mattermost - Blog - Silicon Cloud","description":"\u5173\u4e8e\u3010Ubuntu\u3011\u5b89\u88c5 Mattermost\u7684\u6280\u672f\u6587\u7ae0","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u3010ubuntu\u3011\u5b89\u88c5-mattermost\/","og_locale":"zh_CN","og_type":"article","og_title":"\u3010Ubuntu\u3011\u5b89\u88c5 Mattermost","og_description":"\u5173\u4e8e\u3010Ubuntu\u3011\u5b89\u88c5 Mattermost\u7684\u6280\u672f\u6587\u7ae0","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u3010ubuntu\u3011\u5b89\u88c5-mattermost\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-01-05T15:21:44+00:00","article_modified_time":"2025-08-10T16:31:27+00:00","author":"\u6587, \u7fd4","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6587, \u7fd4","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"2 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90ubuntu%e3%80%91%e5%ae%89%e8%a3%85-mattermost\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90ubuntu%e3%80%91%e5%ae%89%e8%a3%85-mattermost\/","name":"\u3010Ubuntu\u3011\u5b89\u88c5 Mattermost - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-01-05T15:21:44+00:00","dateModified":"2025-08-10T16:31:27+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c"},"description":"\u5173\u4e8e\u3010Ubuntu\u3011\u5b89\u88c5 Mattermost\u7684\u6280\u672f\u6587\u7ae0","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90ubuntu%e3%80%91%e5%ae%89%e8%a3%85-mattermost\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90ubuntu%e3%80%91%e5%ae%89%e8%a3%85-mattermost\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90ubuntu%e3%80%91%e5%ae%89%e8%a3%85-mattermost\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u3010Ubuntu\u3011\u5b89\u88c5 Mattermost"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c","name":"\u6587, \u7fd4","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","caption":"\u6587, \u7fd4"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90ubuntu%e3%80%91%e5%ae%89%e8%a3%85-mattermost\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/23901","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=23901"}],"version-history":[{"count":4,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/23901\/revisions"}],"predecessor-version":[{"id":110930,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/23901\/revisions\/110930"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=23901"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=23901"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=23901"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}