Matrix是一个开源的实时通讯协议,支持Federation(类似电子邮件协议的特性)并且可以桥接很多主流的通讯程序,这里要部署的Synapse是他们官方开源的服务端。

需求
  • linux服务器 (我用的是Arch Linux)
  • 域名 (DDNS的也行但尽量用自己的)
  • 一点命令行知识
部署Synapse

安装Synapse和postgres数据库以及相关依赖

pacman -S matrix-synapse postgresql python-pip socat cronie python-virtualenv gcc libolm

pip install psycopg2-binary

再依次执行如下命令生成配置文件:

cd /var/lib/synapse
su - synapse
python -m synapse.app.homeserver --server-name your.domain.com --config-path /etc/synapse/homeserver.yaml --generate-config --report-stats=no

(切换用户时若提示This account is currently not available.则需将/etc/passwd synapse用户末尾的/usr/bin/nologin修改为/usr/bin/bash

your.domain.com替换为自己的域名,下同)

执行systemctl enable postgresql.service --now启用并运行postgres

(如果postgres运行报错"/*var*/*lib*/*postgres*/*data" is missing or empty*则需要执行su - postgres initdb -D /var/lib/postgres/data

接下来在postgres中创建Synapse的用户和数据库

su - postgres
createuser --pwprompt synapse_user #密码后面会用到
createdb --encoding=UTF8 --locale=C --template=template0 --owner=synapse_user synapse

修改Synapse的配置文件/etc/synapse/homeserver.yaml

bind addresses部分的值修改为服务器的公网ip或0.0.0.0

database部分替换为如下内容

database:
name: psycopg2
txn_limit: 10000
args:
user: synapse_user
password: #填入synapse_user的密码
database: synapse
host: localhost
port: 5432
cp_min: 5
cp_max: 10

配置文件末尾添加suppress_key_server_warning: true

重启Synapse

systemctl restart synapse.service

创建用户

register_new_matrix_user -c /etc/synapse/homeserver.yaml http://127.0.0.1:8008

访问your.domain.com:8008若Synapse正常运行即可看到下图

启用TLS

安装acme.sh

curl https://get.acme.sh | sh -s email=my@example.com

生成证书

.acme.sh/acme.sh --issue -d your.domain.com --standalone

复制证书

mkdir /etc/synapse/cert

.acme.sh/acme.sh --install-cert -d your.domain.com --fullchain-file /etc/synapse/cert/fullchain.pem --key-file /etc/synapse/cert/key.pem

chown -R synapse:synapse /etc/synapse/cert

编辑Synapse配置文件

listeners 部分

port 的值修改为8448

tls的值修改为true

在文件末尾添加如下两行后重启Synapse

tls_certificate_path: "/etc/synapse/cert/fullchain.pem"

tls_private_key_path: "/etc/synapse/cert/key.pem"

桥接Telegram

创建用户

mkdir -p /opt/venvs/mautrix-telegram
useradd -d /opt/venvs/mautrix-telegram -s /bin/bash -r mautrix-telegram
chown mautrix-telegram:root /opt/venvs/mautrix-telegram/

设置virtualenv并安装mautrix-telegram

su - mautrix-telegram
virtualenv -p /usr/bin/python3 .
source ./bin/activate
pip install --upgrade mautrix-telegram[all]

在postgres中创建mautrix-telegram的用户和数据库

su - postgres
createuser --pwprompt mautrix-telegram_user
createdb --encoding=UTF8 --locale=C --template=template0 --owner=mautrix-telegram_user mautrix-telegram

访问https://my.telegram.org

登录后创建API development tools并记录App api_idApp api_hash

修改mautrix-telegram的配置文件config.yaml

su - mautrix_telegram
cp example-config.yaml config.yaml

homeserver部分修改为自己的域名

address: https://your.domain.com:8448
domain: your.domain.com

database部分内容按如下格式替换

#database: postgres://username:password@hostname/dbname
database: postgres://mautrix-telegram_user:nSd%V&@k83QeT^7L!N@localhost/mautrix_telegram

telegram部分填入自己的api_idapi_hash

permissions部分如下

'*': relaybot
'your.domain.com': full
'@admin:your.domain.com': admin

生成registration.yaml

python -m mautrix_telegram -g

将如下内容添加至Synapse配置文件末尾后重启Synapse

app_service_config_files:
- /opt/venvs/mautrix-telegram/registration.yaml

测试mautrix_telegram能否正常运行

su - mautrix_telegram
python -m mautrix_telegram

创建/etc/systemd/system/mautrix-telegram.service并写入如下内容

[Unit]
Description=mautrix-telegram bridge

[Service]
User=mautrix-telegram
WorkingDirectory=/opt/venvs/mautrix-telegram
ExecStart=/opt/venvs/mautrix-telegram/bin/python -m mautrix_telegram

[Install]
WantedBy=multi-user.target

重载systemD并启动mautrix-telegram

systemctl daemon-reload
systemctl enable mautrix-telegram.service --now

Element(或其他支持Matrix协议的客户端)中登录自己的帐号(服务器URL为your.domain.com:8448

@telegrambot:your.domain.com发起对话

发送login后输入手机号和Telegram收到的验证码即可完成桥接

相关