AhFei

AhFei

简洁的写作需要勇气

使用 Ansible 自動安裝 Matrix 即時通信網絡,自由無限制的交流

自建一個賽博小屋供朋友間自由無限制的交流,而不必擔心任何監視審查。

image

Matrix 是一種協議,有不同的實現。工作方式類似電子郵件,擁有「去中心化」和「端到端加密」的特點。

除此之外,通過網橋組件,在 Matrix 網絡就能與其他平台交流,比如 Telegram、E-mail。

最後,除了基本的發送文字,還可以語音通話和視頻聊天,可以安裝 Jitsi 視頻會議平台, Etherpad 開源協作文本編輯器等。


本文重在其部署流程,介紹和具體使用方法請到:自建 即時通信 - 全面監管下,一個自由無限制交流的賽博小屋 - 技焉洲 (vfly2.com)

控制端適用系統:主流 Linux 發行版,本文使用 Debian 系統,非 Debian 系的在 Ansible 這塊稍作調整同樣可以。
被控端適用系統:主流 Linux 發行版

走通預計時間:60 分鐘


這個 matrix-docker-ansible-deploy 項目,使用 Ansible 在被控端用 Docker 容器設置 Matrix 服務器,因此不必手動執行這些任務,操作簡單,不費心;不過內存佔用稍高於手動用 Docker 部署,另外 443 端口會被佔用,想要復用對技術水平有一定要求。

被控端的內存不建議低於 2g,通過查看文檔縮減服務 1g 勉強。在前面配置好後,第一次安裝,一般要 20 分鐘。

實際上,需要什麼樣的服務器規格,很大程度上取決於你的實例,會連接多少大房間(上千人),而不是用戶數量。

本文流程下,實際安裝項目:

  1. 服務端:Synapse
  2. 客戶端:Element 的 Web 端

保持簡單,一旦你能夠走通這個流程,再增加其他組件不過是看看文檔,添加幾行配置的事情

前置準備#

為了簡單起見,使用 root 控制被控端,且用密碼連接 SSH,因此,確保被控端的 SSH 能用 root 登錄。

下面,如果出現「服務器」,指的是「被控端」,Ansible 安裝在「控制端」上,這個控制端既可以在本地電腦上,也可以是在一台服務器上。

為域名配置好 DNS 解析#

以域名 vfly2.com 為例,實操時,請自行修改實際域名。

如果是 Cloudflare DNS,確保用的是 DNS only

基礎:

  1. vfly2.com A 記錄 解析到 服務器 ip (這個不做也行,只是需要後面手動設置反向代理)
  2. matrix.vfly2.com A 記錄 解析到 服務器 ip
  3. element.vfly2.com CNAME 記錄 解析到 matrix.vfly2.com (A 記錄也可以,但是 CNAME 方便以後遷移服務器)

被控端#

  1. 推薦用 Debian 最新系統,且最好是重裝的全新系統
  2. 能用 root 登錄,或有 sudo 權限(本文必須是能用 root 登錄)
  3. 安裝了 Python3 和 pip, apt install python3 python3-pip -y
  4. 確保防火牆放開下面的端口或確保端口沒被其他程序佔用
    1. 80/tcp: HTTP webserver
    2. 443/tcp: HTTPS webserver
    3. 3478: TURN over TCP/UDP (used by Coturn)
    4. 5349: TURN over TCP/UDP (used by Coturn)
    5. 8448/tcp: Matrix Federation API HTTPS webserver.
    6. the range 49152-49172/udp: TURN over UDP

控制端#

可以在另一台 Linux 服務器上,安裝 Ansible 作為控制端,用普通用戶操作即可,本文就是這種模式。

控制端要求:

  1. 安裝有 git ,一般都有
  2. 安裝有 just (它是 make 類型的工具,更好用)
  3. 安裝 ansible ,和 PassLib

安裝 just:

sudo -i   # 切換到 root
curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | sudo bash -s -- --to /usr/local/bin
just --help   # 檢驗是否安裝成功

安裝 ansible:

python3 -m pip install --user ansible
ansible --version
# 此時 ansible 安裝在 ~/.local/bin/ansible

安裝 PassLib:

python3 -m pip install --user passlib

控制端下載 playbook#

創建一個目錄(這裡用 ~/Projects)放 Playbook:

mkdir ~/Projects && cd ~/Projects && \
git clone https://github.com/spantaleev/matrix-docker-ansible-deploy.git

會創建名為 matrix-docker-ansible-deploy 的目錄,後面所有操作都是在這個目錄下進行的

自定義配置文件#

  1. 創建目錄(用於放置自定義配置)
mkdir inventory/host_vars/matrix.vfly2.com
  1. 複製樣例文件和主機文件
cp examples/vars.yml inventory/host_vars/matrix.vfly2.com/vars.yml
cp examples/hosts inventory/hosts   # 存有被控端的連接信息
  1. 編輯主機文件
vim inventory/hosts

將被控端信息放入其中,使 ansible 可以登錄控制,用密碼登錄的樣例如下

[matrix_servers]
matrix.vfly2.com ansible_host=<ip> ansible_ssh_user=root ansible_ssh_pass=<用戶密碼> ansible_ssh_port=<ssh端口>
  1. 自定義配置文件(參考下面的樣例)
vim inventory/host_vars/matrix.vfly2.com/vars.yml

配置文件樣例#

推薦先使用下面的配置文件走一遍,如果走通了,再慢慢添加其他組件等。

需要修改:

  1. matrix_domain
  2. matrix_homeserver_generic_secret_key
  3. devture_traefik_config_certificatesResolvers_acme_email
  4. devture_postgres_connection_password
---
# 裸域名,用於用戶 ID 的
# 如果填錯了,只能先卸載,再重新安裝 
matrix_domain: vfly2.com

# 要安裝的 matrix 服務端,這裡用的是 synapse 實現
# 更多選項可以查看 roles/custom/matrix-base/defaults/main.yml
# docs/configuring-playbook-IMPLEMENTATION_NAME.md 下查看具體說明
matrix_homeserver_implementation: synapse

# 對 synapse 的一些設置
# 默認設置 roles/custom/matrix-synapse/defaults/main.yml
# 允許註冊
matrix_synapse_enable_registration: true
# 註冊需要邀請碼
matrix_synapse_registration_requires_token: true

# 一個基礎密鑰,用於生成多個其他密碼
# 可以是任意字符串,推薦用 openssl rand -base64 48 生成 64 位字符串
matrix_homeserver_generic_secret_key: 'Wddx05J0Tty9R1M7fzw2nEdR1U9wtGh61+wm3T4SUQi2IbtF2roi6VfqSrMzfKJc'

# 默認用的是 Traefik 實現反代,他可以自動申請 SSL 證書,並自動化反代組件
# 其他替代,查看 `docs/configuring-playbook-own-webserver.md`.
matrix_playbook_reverse_proxy_type: playbook-managed-traefik

# 申請 Let's Encrypt 頒發證書用的郵箱
# 更多說明: docs/configuring-playbook-ssl-certificates.md
devture_traefik_config_certificatesResolvers_acme_email: '[email protected]'

# Postgres 的超級用戶是 matrix ,這裡設置其密碼
# 這個 playbook 對於每個組件都會創建一個用戶和數據庫,通過 matrix 用戶執行
devture_postgres_connection_password: '9HwDqeQ/ZzRlRyaH7KsjW0Q7mEwO7t52YrIsiRUzFieDmvfJ6U4aiMMcrU/5Hdsq'

# 安裝 synapse_admin 組件,就是一個後台,可以查看用戶,添加註冊用的邀請碼
# 它不需要單獨設置域名,網址是 https://matrix.vfly2.com/synapse-admin/
matrix_synapse_admin_enabled: true

正式安裝#

# 所有操作都是在這個目錄下進行的
cd ~/Projects/matrix-docker-ansible-deploy

為了能通過密碼登錄,需要安裝 sshpass:

sudo apt install sshpass

還要先手動登錄一次


在安裝之前,包括以後更新 playbook 或配置文件之後,都需要更新 Ansible roles,它指揮怎麼操作被控端

just roles   # 沒錯,運行一下這個命令就可以了

如果是要遷移舊實例,到這步就可以走遷移那部分的流程了。

在全新機子上安裝#

完全安裝並啟動所有 Matrix 服務

ansible-playbook -i inventory/hosts setup.yml --tags=install-all,ensure-matrix-users-created,start

這行命令執行完成後,其實就可以打開 Web 端了,註冊用戶之後就可以使用了。

互相發現#

配置以實現聯邦之間相互發現,如果將裸域名 vfly2.com 直接解析到服務端,那麼可忽略此節,因為 playbook 自行配置好了。

(important) Federation Server discovery

輔助其他實例 發現自己,沒有正確配置,就無法接入聯邦,無法與聯邦其他成員建立連接。但單機使用是不受影響的。

也就是網頁 https://<matrix_domain>/.well-known/matrix/server 的內容,是否正常。

這個 playbook 將實例安裝在另一個域(比如本文是 matrix.vfly2.com )上,而不是在基本域(vfly2.com )上,但 Matrix 協議本身要求去基本域發現。

本文使用這個 playbook 安裝的在這裡: https://matrix.vfly2.com/.well-known/matrix/server ,裡面的內容是:

{
    "m.server": "matrix.vfly2.com:8448"
}

只需要確保,訪問 https://vfly2.com/.well-known/matrix/server 的內容和上面的一樣就行,可以利用反代等,甚至手動複製內容到新文件裡,讓 Web 服務器公開即可。


(not that important) Client Server discovery

輔助自己的客戶端發現它連接的服務端,這樣能更方便查詢用戶

也就是網頁 https://<matrix_domain>/.well-known/matrix/client 的內容,是否正常。

跟上面的一樣

檢查服務是否工作正常#

ansible-playbook -i inventory/hosts setup.yml --tags=self-check

也可以用 Federation Tester 檢測。

創建用戶#

通過管理後台添加是最簡單的,如果你按照上面的配置樣例安裝,到 https://<domain>/synapse-admin/ 即可進入後台,裡面可以直接創建用戶。

後台也可以生成邀請碼,其他人用邀請碼就能註冊了。

更多方法查看官方說明: https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/master/docs/registering-users.md

既然都自建了 Matrix,那怎麼能不會 Matrix 維護 呢?對本文使用 Ansible 安裝的 Matrix 進行備份和遷移: Matrix 維護 :備份和遷移 - 技焉洲 (vfly2.com)


原文鏈接: https://technique.vfly2.com/2024/01/automated-installation-of-matrix-using-ansible/

版權聲明:本博客所有文章除特別聲明外,均為 AhFei 原創,採用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 技焉洲 (technique.vfly2.com)

保持更新 ٩(・̤̀ᵕ・̤́๑)ᵒᵏᵎᵎᵎᵎ 清晰恒益的實用技能,歡迎使用 RSS 訂閱,或在支持 ActivityPub 的平台關注 @[email protected] 接收新文章的推送,如果能留言互動就更好了。

可在 Telegram 群組 https://t.me/vfly2 交流依文章步驟遇到的問題。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。