一直想部署个Matrix服务器,但要么担心服务器性能不够卡死,要么因为王八壳的服务器是ARM架构担心出什么莫名其妙的兼容性问题。这次直接头铁一把,用1GB内存硬上Synapse了。
直接用Docker,不用Docker Compose。
首先部署PostgreSQL数据库:
docker run --name postgres -v postgres_data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=数据库密码 -d postgres
创建数据库用户:
docker exec -it postgres createuser -U postgres --pwprompt synapse
创建时会要求输入密码,接下来创建数据库,执行:
docker exec -it postgres psql -U postgres
然后输入创建命令:
CREATE DATABASE synapse
ENCODING 'UTF8'
LC_COLLATE='C'
LC_CTYPE='C'
template=template0
OWNER synapse;
创建后退出容器,然后创建数据库网络并将容器加入:
docker network create postgres_network
docker network connect postgres_network postgres
接下来部署Synapse,先建立存放所需文件的目录,然后生成配置文件:
docker run -it --rm -v 之前建立的目录的绝对路径:/data -e SYNAPSE_SERVER_NAME=域名 -e SYNAPSE_REPORT_STATS=no matrixdotorg/synapse:latest generate
这里的域名不是服务器的域名,而是Matrix用户所在域的域名,两者可以不一致,且部署完成后无法更改,请慎重设置。完成后文件夹中会出现一个Homeserver.yaml文件,编辑它来修改配置:
首先注释掉原有的数据库选项,默认数据库使用SQLite,然后添加PostgreSQL的配置,示例如下:
#database:
# name: sqlite3
# args:
# database: /data/homeserver.db
database:
name: psycopg2
args:
user: synapse
password: 数据库密码
database: synapse
host: postgres
cp_min: 5
cp_max: 10
如果用户所在域名和服务器不一致时,需要在配置文件中添加:
public_baseurl: "https://服务器访问地址/"
如果需要由Synapse提供联邦验证文件,在配置文件中添加:
serve_server_wellknown: true
剩余生成的部分大多为访问配置和密钥配置,如果想要添加其他配置,诸如邮件验证、VoIP穿透,单点登录之类的,可以参考配置手册。
配置完成后,使用以下命令部署:
docker run -d --name synapse -v 包括配置文件的目录路径:/data -p 8008:8008 --network=postgres_network matrixdotorg/synapse
完成后访问8008端口查看是否成功。
现在Synapse已经启动,接下来部署Caddy作为反向代理并提供证书,首先创建Caaddyfile文件,并填写:
{
email 证书电子邮件地址
#acme_ca https://acme-staging-v02.api.letsencrypt.org/directory
}
Synapse服务器地址,不是用户所在域域名 {
reverse_proxy synapse:8008
}
然后创建网络:
docker network create caddy_network
将Synapse加入Caddy网络:
docker network connect caddy_network synapse
部署Caddy
docker run -d --name caddy -v Caddyfile文件绝对路径:/etc/caddy/Caddyfile -v caddy_data:/data -v caddy_config:/config -p 80:80 -p 443:443 -p 443:443/udp --network=caddy_network caddy
部署完成,但如果之前配置中,将用户域和服务器地址设置的不同的情况下,其他服务器无法发现该服务器,所以需要通过在用户域中设置well-known来帮助其他服务器发现。well-known可以通过SRV或example.com/.well-known/matrix/server
的方式来提供,这里利用Cloudflare Workers生成example.com/.well-known/matrix/server
响应。
此外,一些客户端也需要example.com/.well-known/matrix/client
,这里一起部署:
登录Cloudflare,点击Workers和Pages并选择Create application,创建后将内容改为:
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const body = `{
"m.server": "服务器地址:端口,一般来说就是443"
}`;
return new Response(body, {
headers: { 'Content-Type': 'application/json' },
})
}
如果需要创建client,则创建另一个,并改为如下内容:
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const body = `{
"m.homeserver": {
"base_url": "https://服务器地址/"
}
}`;
return new Response(body, {
headers: { 'Content-Type': 'application/json' },
})
}
其中server中只需要填写服务器地址和端口,不需要带有协议名称,而client中需要带有协议名称。部署后可以访问一下提供的地址来查看效果。其中server应返回:
{
"m.server": "服务器地址:端口"
}
client应返回:
{
"m.homeserver": {
"base_url": "https://服务器地址/"
}
}
创建成功后,回到Cloudfalre主界面并选择用户所在域的域名,进入后选择Workers路由,分别创建用户域/.well-known/matrix/server
和用户域/.well-known/matrix/client
,并在服务中分别选择对应的项目,然后选择环境,默认就是production
,部署完成后分别访问对应的路径查看是否成功。
全都成功后可以用测试网站来检测能否正常加入Matrix联邦。填写用户域,如果显示绿色的Success
,则说明Matrix服务器成功部署。
参考文章
以及特别鸣谢ChatGPT的悉心指导
Comments NOTHING