<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Matrix 是一個開源、可互動、去中心化的實時通訊服務架構。使用 Matrix 可以搭建安全的通訊伺服器,配合支援 Matrix 的使用者端可以實現個人、團隊間的實時聊天互動。
Matrix 相較於普通的通訊服務(如微信、QQ等軟體使用的服務),最特別的地方在於其去中心化的架構。每個執行著 Matrix 的伺服器都是一個節點(homeserver),使用者可以選擇在任意節點進行註冊、連線,和處於同一節點的其他使用者自由交流,使用者的隱私資料以加密的形式儲存於當前的節點上。同時,節點與節點間也可以通過聯鎖(Federation)機制進行通訊,使在不同節點上的使用者之間可以互相交流。得益於去中心化的服務架構,使用者完全可以自行搭建節點伺服器,使自己的聊天資料安全和隱私得到保護。
支援 Matrix 協定的使用者端有很多,比較成熟的有 Element.io(Riot.IM),語音、視訊通話、附件等功能都有,並且支援 Windows,Linux,Android 等多個平臺。
Matrix 的伺服器端有兩種:Synapse 和 Dendrite。
Synapse 是用 Python 編寫的第一代 Matrix 伺服器端,是十分穩定的正式版,使用者非常多,適合用於生產環境中。Dendrite 是 Matrix 的開發團隊使用 Go 語言編寫的第二代 Matrix 伺服器端,它旨在為 Synapse 提供一個高效、可靠、可延伸的替代方案。目前 Dendrite 仍然在 Beta 開發中,像推播和提醒等一些功能還沒有實現。
如果是生產環境使用,還是搭建 Synapse,更穩定並且相關的教學也十分豐富。
本文使用 Dendrite 來搭建,在 Unraid 系統通過 Docker 容器來實現,主要是想嚐鮮噠!在其他系統下也可以參照本文進行部署。
Matrix 並不強制要求使用哪種資料庫,少量使用者的情況下完全可以使用其內建的 SQLite 資料庫。如果系統內已經有其他資料庫引擎執行,當然也可以直接使用。本文只是按照官方推薦使用 PostgreSQL 作為 Matrix 資料庫的管理引擎。
在安裝 PostgreSQL Docker 前,先建立組態檔目錄 /mnt/user/appdata/PostgreSQL/
。
存取 https://github.com/matrix-org/dendrite/tree/main/build/docker/postgres 下載 create_db.sh
檔案,使用文字編輯器開啟它,修改程式碼中使用者名稱欄位為自己的資料庫使用者名稱。
# 這段程式碼的作用是初始化資料庫,所以語句中的 Username 必須要替換成自己的資料庫管理員使用者名稱。 for db in userapi_accounts userapi_devices mediaapi syncapi roomserver keyserver federationapi appservice mscs; do createdb -U [Username] -O [Username] dendrite_$db # 注意修改[Username] done
最後將 create_db.sh
檔案上傳到組態檔目錄裡:/mnt/user/appdata/PostgreSQL/create_db.sh
建立目錄用來存放 PostgreSQL 的資料庫:
/mnt/user/appdata/PostgreSQL/databases
本文使用 Unraid 系統進行搭建,進入 DOCKER -> ADD CONTAINER
即可設定容器引數。也可以使用 Unraid 外掛中心進行安裝。其他系統使用 docker create
命令可能還更簡單,所以本文也將建立容器的命令列字串附於其後。
Unraid 建立容器需要新增/修改的引數如下:
[Type] Variable [Name] 管理員使用者名稱 [Key] POSTGRES_USER [Value] FrozenSky [Type] Variable [Name] 管理員密碼 [Key] POSTGRES_PASSWORD [Value] xxxxxxx [Type] Path [Name] 資料庫儲存路徑 [Container Path] /var/lib/postgresql/data [Host Path] /mnt/user/appdata/PostgreSQL/databases [Access Mode] Read/Write [Type] Path [Name] 資料庫初始化指令碼 [Container Path] /docker-entrypoint-initdb.d/20-create_db.sh [Host Path] /mnt/user/appdata/PostgreSQL/create_db.sh [Type] Port [Name] 埠對映 [Container Port] 5432 [Host Port] 5432
另外,官方還推薦開啟容器健康狀態檢查功能,在新增容器介面點選高階檢視(ADVANCED VIEW),在 Post Arguments
中新增下面的語句:
--health-cmd='["CMD-SHELL", "pg_isready -U dendrite"]' --health-interval=5s --health-timeout=5s --health-retries=5
設定完成後,點選 APPLY
即可建立容器。
國內網路存取 DockerHub 可能出現無法連線的問題,可以通過阿里雲加速來解決。網路上教學很多,但多是需要更改 Unraid 系統檔案,其實完全沒必要。Docker 命令是支援自定義拉取伺服器的。只需要在設定介面中倉庫(Repository)這一欄新增加速伺服器即可:
比如:dazeaikzq.mirror.aliyuncs.com/library/postgres:14
關於 HEALTHCHECK
官方 docker-compose 檔案中,有個 HEALTHCHECK
欄位,如果使用 docker-cli
啟動容器的話可以參照下面的欄位進行替換。這個欄位是設定容器健康狀態檢查的,貌似不加也可以。
--health-cmd Command to run to check health --health-interval Time between running the check --health-retries Consecutive failures needed to report unhealthy --health-timeout Maximum time to allow one check to run --health-start-period Start period for the container to initialize before starting health-retries countdown --no-healthcheck Disable any container-specified HEALTHCHECK
附:命令列方式建立Docker
docker create --name='PostgreSQL' --net='bridge' -e TZ="Asia/Shanghai" -e HOST_OS="Unraid" -e 'POSTGRES_PASSWORD'='xxxxxxx' -e 'POSTGRES_USER'='FrozenSky' -e 'POSTGRES_DB'='' -p '5432:5432/tcp' -v '/mnt/user/appdata/PostgreSQL/databases':'/var/lib/postgresql/data':'rw' -v '/mnt/user/appdata/PostgreSQL/create_db.sh':'/docker-entrypoint-initdb.d/20-create_db.sh':'rw' --restart=always 'postgres:14' --health-cmd='["CMD-SHELL", "pg_isready -U dendrite"]' --health-interval=5s --health-timeout=5s --health-retries=5
可以使用 PGAdmin、dbeaver、phpMyAdmin 等管理軟體連線遠端資料庫,檢視是否已經建立了好多個 dendrite 開頭的資料。
PostgreSQL 的預設連線地址是: [IP]:5432
Matrix-Dendrite 伺服器端分為2個版本,monolith
和 polylith
,本文選擇了 monolith
,因為它的各個元件都是整合在一起的,設定簡單。
Dendrite 的 Github 倉庫:https://github.com/matrix-org/dendrite
建立目錄:/mnt/user/appdata/Dendrite/config
該目錄下必須包含如下檔案:
dendrite.yaml
組態檔matrix_key.pem
伺服器端金鑰(通過下文的命令生成)server.crt
證書檔案(打算作為Matrix伺服器的域名的證書)server.key
證書私鑰把你的網站域名證書和私鑰上傳到設定目錄裡:
/mnt/user/appdata/Dendrite/config/server.key /mnt/user/appdata/Dendrite/config/server.crt
開啟 Unraid 終端,進入組態檔目錄,執行下面的 Docker 命令:
# 注意:命令引數中 -tls-cert 和 -tls-key 的檔名要和上面保持一致。 docker run --rm --entrypoint="" -v $(pwd):/mnt matrixdotorg/dendrite-monolith:latest /usr/bin/generate-keys -private-key /mnt/matrix_key.pem -tls-cert /mnt/server.crt -tls-key /mnt/server.key
該命令將在當前目錄中生成伺服器端金鑰 matrix_key.pem
# 命令輸出 Created TLS cert file: /mnt/server.crt Created TLS key file: /mnt/server.key Created private key file: /mnt/matrix_key.pem
從 Github 倉庫下載組態檔 dendrite.yaml
範例進行修改。下載地址: 組態檔範例
以下組態檔將假設我的域名是 frozensky.org
並且打算在 1443
埠進行反向代理,將 Matrix 的 API 請求進行轉發;我的資料庫使用者名稱是 FrozenSky
密碼是 xxxxxxx
,資料庫存取地址是:192.168.7.9:5432
主要修改的地方如下:
# 域名(運營商封443的話,就要填寫你的自定義反向代理埠) server_name: frozensky.org:1443 # 伺服器私鑰路徑(上文生成的私鑰) private_key: /etc/dendrite/matrix_key.pem # Well-known服務的域名(同域名) well_known_server_name: "frozensky.org:1443" # 每個元件的資料庫連線字串 connection_string # 組態檔中所有元件的資料庫連線URL都要改(使用內建SQLite則不需要改) connection_string: postgresql://FrozenSky:xxxxxxxx@192.168.7.9:5432/............ # 註釋掉 JetStream 預設的伺服器地址 # Configuration for NATS JetStream jetstream: addresses: # - jetstream:4222 #註釋該行 storage_path: /etc/JetStream_NATS #設定一個容器內目錄用來儲存資料
建立一些目錄用來儲存 Dendrite 的資料:
JetStream:/mnt/user/appdata/Dendrite/JetStream
Media: /mnt/user/appdata/Dendrite/media
使用官方映象:matrixdotorg/dendrite-monolith
以下是容器設定:
[Type] Port 1 [Name] 埠對映 [Container Port] 8008 [Host Port] 8008 [Type] Port 2 [Name] 埠對映 [Container Port] 8448 [Host Port] 8448 [Type] Path [Name] 組態檔路徑 [Container Path] /etc/dendrite [Host Path] /mnt/user/appdata/Dendrite/config [Access Mode] Read/Write [Type] Path [Name] 媒體檔案路徑 [Container Path] /var/dendrite/media [Host Path] /mnt/user/appdata/Dendrite/media [Type] Path [Name] JetStream路徑 [Container Path] /etc/JetStream_NATS [Host Path] /mnt/user/appdata/Dendrite/JetStream
在新增容器介面點選高階檢視(ADVANCED VIEW),在 Post Arguments
中新增下面的語句:
--tls-cert=server.crt --tls-key=server.key
點選 APPLY
建立容器。
安裝完成 Dendrite 後,其實 Matrix 服務架構的後端就已經執行起來了,但想要讓使用者端軟體與我們的伺服器端通訊還需要通過 Nginx 設定,將使用者端的請求轉發到對應的伺服器埠上來。
修改 Nginx 組態檔 /etc/nginx/sites-available
(Nginx版本不同組態檔路徑可能不同)
以本文環境為例,因運營商封殺443埠,我在路由上將 1443 埠轉發到內部的 443 埠。組態檔要修改的部分本文都作了註釋,就不再為 Nginx 的設定做過多說明了,遇到問題可以自行搜尋,教學還是很詳細的。
server { listen 80; listen 443 ssl; server_name frozensky.org; #域名 charset utf-8; #ssl on; ssl_certificate /etc/ssl/frozensky.org/fullchain.crt; #證書 ssl_certificate_key /etc/ssl/frozensky.org/frozensky.org.key; #金鑰 ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; # 代理請求的一些設定 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_read_timeout 600; # Dendrite組態檔中的server_name,注意埠是外部埠!!! location /.well-known/matrix/server { return 200 '{ "m.server": "frozensky.org:1443" }'; } # Dendrite組態檔中的server_name,注意埠是外部埠!!! location /.well-known/matrix/client { return 200 '{ "m.homeserver": { "base_url": "https://frozensky.org:1443" } }'; # Dendrite後端的地址,IP是搭建Dendrite的伺服器IP,埠是8008 location /_matrix { proxy_pass http://192.168.7.10:8008; }
設定完成後儲存退出。
過載組態檔和證書,重啟Nginx服務
sudo service nginx force-reload sudo service nginx restart
測試連線
至此,Matrix 服務就全部設定完成了,可以存取 Federation Tester 輸入自己的 Matrix 網址 https://frozensky.org:1443
進行測試,全部通過的話就表示服務執行正常且 Federation 聯鎖也已啟用,可以和其他伺服器的小夥伴進行通訊了。本文推薦安裝 Element.io 使用者端來使用,雖然 Matrix-Dendrite 還處於開發測試階段,但經過這幾天的使用發現主要功能並沒有什麼問題。
https://docs.docker.com/engine/reference/run/
到此這篇關於開源框架 Matrix-Dendrite 搭建聊天伺服器的文章就介紹到這了,更多相關Matrix Dendrite聊天伺服器內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45