在開始之前#
我在blog上的這篇文章如果你對相關概念不太熟悉,可以跳轉到最下面的介紹
部署#
1. 部署PostgreSQL#
安裝過程可以參照搜索引擎,這樣不過多闡述
創建數據庫#
如果你的數據庫超級用戶名為user
psql -U user # 進入數據庫
創建一個新用戶(假設用戶名為 synapse_user
):
CREATE USER synapse_user WITH PASSWORD 'password';
將 password
替換為你想要設置的密碼。
創建數據庫 synapse
CREATE DATABASE synapse
WITH ENCODING 'UTF8'
LC_COLLATE 'C'
LC_CTYPE 'C'
TEMPLATE template0;
GRANT ALL PRIVILEGES ON DATABASE synapse TO synapse_user;
2. 安裝 Synapse #
因為我希望 Synapse 伺服器的 server_name
(用戶 ID 的後綴,如 @user:my-example.com
)與實際訪問的域名(如 chat.my-example.com
,你伺服器分配的域名),所以要通過 Delegation(委託) 來實現。
在 server_name
的根域名(my-example.com
)下,創建一個 .well-known/matrix/server
文件,內容如下:
{
"m.server": "chat.my-example.com:443"
}
這個文件告訴其他 Matrix 伺服器,實際的 Synapse 伺服器地址是 chat.my-example.com:443
docker 部署#
安裝docker 的操作可以見搜索引擎
docker run -it --rm -v /data/matrix-synapse-data/:/data/ -e SYNAPSE_SERVER_NAME=你的服務端域名 -e SYNAPSE_REPORT_STATS=no matrixdotorg/synapse:latest generate
解釋一下各個參數:
-e SYNAPSE_REPORT_STATS
是否發送匿名統計數據
-v /data/matrix-synapse-data/:/data/
是映射的具體路徑,可以不用修改
-e SYNAPSE_SERVER_NAME
是你的服務端域名,不是 server_name
Synapse 配置#
到了本片教程最坑的地方,一定要注意,同時yml有嚴格的縮進和標點,出錯了要仔細排除
配置 Synapse 主要是配置位於
的 /data/matrix-synapse-data/
homeserver.yaml
這裡給出我的示例,一定要注意!其他內容可以參照官方文檔Configuration - Synapse
server_name: "my-example.com"
public_baseurl: https://chat.my-example.com/ #輸入你的域名
pid_file: /data/homeserver.pid
listeners:
- port: 8008
tls: false
type: http
x_forwarded: true
resources:
- names: [client, federation, openid]
compress: false
database: #按照你的數據庫配置
name: psycopg2
args:
user: synapse_user
password: password
database: synapse
host: 192.168.1.1
cp_min: 5
cp_max: 10
keepalives_idle: 30
keepalives_interval: 10
keepalives_count: 3
log_config: "/data/dorimu.cn.log.config"
media_store_path: /data/media_store
# 這幾行自動生成的,內容不要動
registration_shared_secret: ""
report_stats: false
macaroon_secret_key: ""
form_secret: ""
signing_key_path: ""
trusted_key_servers:
- server_name: "matrix.org"
suppress_key_server_warning: true
# 為新用戶啟用註冊
enable_registration: true
# 無需電子郵件或 recaptcha 驗證即可註冊(其實不推薦)
enable_registration_without_verification: false
email: #郵件配置
smtp_host: smtp-mail.outlook.com
smtp_port: 587
smtp_user: "11" #用戶名
smtp_pass: "11"
force_tls: false
require_transport_security: false
enable_tls: true
notif_from: "user" #用戶名
enable_notifs: true
notif_for_new_users: false
client_base_url: "https://my-example.com"
validation_token_lifetime: 15m
invite_client_location: https://my-example.com
registrations_require_3pid:
- email
運行#
docker run -d --name synapse -v /data/matrix-synapse-data/:/data/ -p 8008:8008 -p 8009:8009 -p 8448:8448 matrixdotorg/synapse:latest
創建管理員用戶#
docker exec -it synapse register_new_matrix_user http://localhost:8008 -c /data/homeserver.yaml -a -u 用戶名 -p 密碼
3. Nginx 反向代理#
location ^~ /_matrix/ {
proxy_pass http://127.0.0.1:8008;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.0;
add_header X-Cache $upstream_cache_status;
add_header Cache-Control no-cache;
proxy_ssl_server_name off;
proxy_ssl_name $proxy_host;
}
location ^~ /_synapse/ {
proxy_pass http://127.0.0.1:8007;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.0;
add_header X-Cache $upstream_cache_status;
add_header Cache-Control no-cache;
proxy_ssl_server_name off;
proxy_ssl_name $proxy_host;
}
4. 按照網頁端和管理端(可選)#
網頁端#
element-hq/element-web: 一個光鮮的 Matrix 協作客戶端,適用於網頁。
去release下載最新版解壓到伺服器網站目錄即可(靜態部署)
記得更改config.sample.json ,裡面要改成你的伺服器地址,文件名變更為config.json
管理端#
Awesome-Technologies/synapse-admin: Synapse Matrix 伺服器的管理控制台
去release下載最新版解壓到伺服器網站目錄即可(靜態部署)
5. 測試#
用 Matrix Federation Tester 進行測試。輸入 server_name
,觀察輸出結果。
介紹#
什麼是 Matrix?#
Matrix 協議的靈活性和安全性使其成為一個強大的通信解決方案,特別適用於那些關注隱私和通信自由的用戶。開放性和互操作性使 Matrix 協議成為一個極有前景的通信標準。
Matrix 有以下特點:
- 分散式架構:Matrix 采用了分散式架構,沒有單一的中央伺服器,而是由多個獨立的伺服器組成網絡。這意味著用戶可以選擇自己的伺服器,或者自行托管伺服器,而不必依賴單一的服務提供商。
- 端到端加密:Matrix 提供了端到端加密的支持,確保消息在發送方和接收方之間加密,中間伺服器無法訪問消息內容。這提供了高級的通信隱私和安全性。
- 互操作性:Matrix 的一個主要目標是實現不同通信應用之間的互操作性。這意味著用戶可以使用不同的客戶端應用程序,仍然能夠與其他用戶進行通信,無論他們使用哪種應用程序或伺服器。
- 開源和開放標準:Matrix 協議是一個開放標準,可供任何人查看和實施。這種開放性有助於確保安全性和可擴展性,並減少了隱藏的後門風險。
- 多種身份驗證機制:Matrix 支持多種身份驗證方式,包括用戶名和密碼、單點登錄、OpenID Connect 等,使用戶能夠選擇適合他們需求的身份驗證方式。
- 活躍的社區支持:Matrix 社區非常活躍,有大量的開發者和用戶參與,不斷改進和擴展協議,以滿足不斷變化的通信需求。
作為一個去中心化通訊協議,你可以使用不同的客戶端(只要客戶端支持 Matrix 協議),連接到任意一個 Matrix 服務端。
Matrix 協議支持諸多特性:
- 去中心化通信(選擇任意一台 Matrix 伺服器創建賬號,再通過 “聯邦” 和其它伺服器上的用戶通信)
- 端到端加密
- WebRTC 語音通話 / 視頻通話(沒錯!Matrix 協議居然支持視頻通話)
- 消息已讀提示
- 輸入狀態提示
- 群組聊天
什麼是端到端加密?#
端到端加密可以理解為是兩台終端的直接通信,我們舉個例子更容易理解:
假設小明用
A 設備
給小紅的B 設備
發了一條消息,這時候小黑想看看他倆在聊什麼,於是小黑盜取了小紅的賬號密碼,並成功在C 設備
上登錄了小紅的賬號。小黑能不能看到他們倆的聊天記錄呢?不能。在端到端加密對話中,所有發出去的消息都會被自動加密。
當小明給小紅發送一段消息時,還會自動附上一串用於解密這段消息的
解密密鑰
。小紅在B 設備
上收到消息時,同時收到了這串解密密鑰
,所以能正常查看消息。但小黑後來登錄時使用的C 設備
並沒有收到解密密鑰
,因此無法解密這些歷史消息。端到端加密算是當今相對最安全的一種隱私保護方式,能夠滿足大多數人的安全需求。
Synapse 是什麼?#
Matrix 是一個協議,而 Matrix Synapse 則是 Matrix 協議的一個具體實現。
除了 Synapse,Matrix 還包含許多其它分支,例如 Dendrite:
另外,Synapse 本身也只是一个不包含圖形界面的伺服器,我們還需要一個支持 Matrix 協議的客戶端才能正常聊天。常見支持 Matrix 協議的客戶端例如 Element (最為熟知和常用)