原文地址:https://lala.im/8438.html,請支持原作者!該處僅作轉載。
桥接telegram需要用到mautrix-telegram这个软件,这篇文章记录一下安装和配置。
如果你只需要mautrix-telegram基本的功能,那配置起来还是比较简单的,但如果要支持全部功能的话就需要额外安装很多依赖,配置起来也很麻烦,所以我这里直接用docker的方式来部署,因为官方提供的docker镜像是支持全部功能的,所有的这些依赖都已经在镜像内提供了。
由于mautrix-telegram使用docker进行部署,所以conduit这里也用docker的方式部署,并且两个服务同在一个compose内可以使用默认的网络,而不需要再额外配置网络。如果你的conduit不是docker部署的,建议就不要参考这篇文章来配置了,不要将宿主机的服务和docker启的服务混用是常识。
首先安装docker和一些其他需要用到的软件,注意现在安装的docker版本都已经自带了compose的子命令,所以不再需要额外安装docker-compose了:
apt -y update
apt -y install curl nginx python3-certbot-nginx
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
新建一个目录,进入这个目录:
mkdir /opt/conduit-docker && cd /opt/conduit-docker
新建一个docker-compose文件:
nano docker-compose.yml
写入如下配置,需要修改的地方我加了注释:
version: '3.5'
services:
homeserver:
container_name: conduit
image: matrixconduit/matrix-conduit:latest
restart: unless-stopped
environment:
CONDUIT_SERVER_NAME: conduit.example.com # 修改成你的域名
CONDUIT_DATABASE_PATH: /var/lib/matrix-conduit/
CONDUIT_DATABASE_BACKEND: rocksdb
CONDUIT_PORT: 6167
CONDUIT_MAX_REQUEST_SIZE: 50_000_000
CONDUIT_ALLOW_REGISTRATION: 'true'
CONDUIT_ALLOW_FEDERATION: 'true'
CONDUIT_TRUSTED_SERVERS: '["matrix.org"]'
CONDUIT_MAX_CONCURRENT_REQUESTS: 500
#CONDUIT_LOG: info,rocket=off,_=off,sled=off
CONDUIT_ADDRESS: 0.0.0.0
CONDUIT_CONFIG: ''
ports:
- 127.0.0.1:6167:6167
volumes:
- db:/var/lib/matrix-conduit/
mautrix-telegram:
container_name: mautrix-telegram
image: dock.mau.dev/mautrix/telegram:latest
restart: unless-stopped
volumes:
- ./mautrix-telegram:/data
mautrix-db:
container_name: mautrix-db
image: postgres:14.4-alpine
restart: unless-stopped
environment:
POSTGRES_DB: telegram_bridge # 数据库名
POSTGRES_USER: telegram # 数据库用户名
POSTGRES_PASSWORD: password # 数据库用户密码
volumes:
- ./postgres:/var/lib/postgresql/data
volumes:
db:
首先启动conduit:
docker compose up -d homeserver
配置反向代理,新建一个nginx站点配置文件:
nano /etc/nginx/conf.d/conduit.conf
写入如下配置:
server {
listen 80;
server_name conduit.example.com;
merge_slashes off;
client_max_body_size 0;
location /_matrix/ {
proxy_pass http://127.0.0.1:6167$request_uri;
proxy_set_header Host $http_host;
proxy_buffering off;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
}
location /.well-known/matrix/server {
return 200 '{ "m.server": "conduit.example.com:443" }';
}
location /.well-known/matrix/client {
add_header Access-Control-Allow-Origin '*';
return 200 '{ "m.homeserver": { "base_url": "https://conduit.example.com" } }';
}
}
签发ssl证书:
certbot --nginx
之后还需要修改一下之前新建的nginx站点配置文件
nano /etc/nginx/conf.d/conduit.conf
在原本的基础上额外添加一个8448端口的监听,以及启用http2:
listen 8448 ssl http2;
listen 443 ssl http2; # managed by Certbot
重载nginx使配置生效:
systemctl reload nginx
至此conduit就搭建完成了,测试你搭建的服务是否正常:
curl https://conduit.example.com/_matrix/client/versions
curl https://conduit.example.com:8448/_matrix/client/versions
如果正常会有类似回显:
{"versions":["r0.5.0","r0.6.0","v1.1","v1.2"],"unstable_features":{"org.matrix.e2e_cross_signing":true}}
现在你可以在element-web内用你刚搭建的conduit服务器注册一个账号:
https://github.com/vector-im/element-web#getting-started
你可以选择自建一个element-web服务还是用官方的,这里的element-web实际就是一个客户端,你也可以用其他的客户端,比如iOS上的Element Messenger:
https://apps.apple.com/us/app/element/id1083446067
接下来配置mautrix-telegram。
首先启动postgresql容器,准备好mautrix-telegram需要用到的数据库:
docker compose up -d mautrix-db
然后先运行一次mautrix-telegram,用于生成配置文件:
docker compose run --rm mautrix-telegram
编辑配置文件:
nano mautrix-telegram/config.yaml
这里我只列出必须要改动的项:
homeserver:
address: https://conduit.example.com
domain: conduit.example.com
...
appservice:
address: http://mautrix-telegram:29317
database: postgres://telegram:password@mautrix-db/telegram_bridge
...
bridge:
permissions:
'*': relaybot
conduit.example.com: full
'@imlala:conduit.example.com': admin
...
telegram:
api_id: 89648964
api_hash: 8964896489648964896489648964
telegram的api和hash在这个网站申请:https://my.telegram.org/apps
修改好配置后,再运行一次mautrix-telegram,用于生成应用服务注册文件:
docker compose run --rm mautrix-telegram
如果正常,你可以查看到应用服务注册文件:
cat mautrix-telegram/registration.yaml
应用服务注册文件的内容类似于:
id: telegram
as_token: secret
hs_token: secret
namespaces:
users:
- exclusive: true
regex: '@telegram_.*:conduit\.example\.com'
- exclusive: true
regex: '@telegrambot:conduit\.example\.com'
aliases:
- exclusive: true
regex: \#telegram_.*:conduit\.example\.com
url: http://mautrix-telegram:29317
sender_localpart: secret
rate_limited: false
现在回到element-web,浏览到conduit的管理员房间,在房间内@管理员机器人注册应用服务,格式如下:
@conduit:conduit.example.com: register-appservice
id: telegram
as_token: secret
hs_token: secret
namespaces:
users:
- exclusive: true
regex: '@telegram_.*:conduit\.example\.com'
- exclusive: true
regex: '@telegrambot:conduit\.example\.com'
aliases:
- exclusive: true
regex: \#telegram_.*:conduit\.example\.com
url: http://mautrix-telegram:29317
sender_localpart: secret
rate_limited: false
注册完成后启动mautrix-telegram:
docker compose up -d mautrix-telegram
回到element-web,添加@telegrambot:conduit.example.com,与telegrambot机器人聊天:
向机器人发送login登录指令,之后机器人会让你输入手机号进行登录,注意输入的手机号是需要带国际区号的,比如中国是+86:
至此桥接就配置好了,来自telegram群组和频道的消息会在桥接器启动或者重启后自动创建相应的matrix房间,而对于telegram私聊的消息,只有当你收到新消息的时候才会创建matrix房间。可以简单测试一下:
参考文献:
https://docs.mau.fi/bridges/general/docker-setup.html?bridge=telegram\nhttps://docs.mau.fi/bridges/general/registering-appservices.html\nhttps://gitlab.com/famedly/conduit/-/blob/next/APPSERVICES.md\nhttps://docs.mau.fi/bridges/python/telegram/authentication.html\nhttps://docs.mau.fi/bridges/python/telegram/creating-and-managing-chats.html\nhttps://github.com/mautrix/telegram