准备工作
1、一台x86/amd64架构的Linux服务器(基本无性能要求,可用内存建议在200M以上)
2、安装Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh ./get-docker.sh若未安装可使用上述命令安装
3、一个域名(文中使用Cloudflare作为DNS提供商,并使用Cloudflare Pages部署客户端,如有需要也可使用其他提供商)
4、一个邮箱(可使用SMTP,用于设置发信,自建邮局/outlook等均可)
5、一个Cloudflare账户
搭建过程
1、使用Docker Compose搭建Synapse
创建一个文件夹以存放数据,并在该文件夹下创建docker-compose.yml,内容如下
version: "3.3"
services:
synapse:
image: "matrixdotorg/synapse:latest"
container_name: "matrix_synapse"
restart: unless-stopped
healthcheck: #healthcheck,由于该镜像原有的Healthcheck在Nginx反代后疑似不起效导致服务始终显示Unhealthy,在此修改Healthcheck
test: ["CMD", "curl", "-f", "你的服务器URL"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
ports:
- '监听IP:端口:VIRTUAL_PORT'#此处VIRTUAL_PORT输入与下文VIRTUAL_PORT同样的端口
volumes:
- "./data:/data"#数据存放在./data文件夹中,可随意修改为可用路径
VIRTUAL_HOST: "你的域名" #如使用子域名请填写子域名,下同
VIRTUAL_PORT: 你的服务端口 #此处指的是Docker容器的端口,端口映射在上文有提到,端口无需加引号
LETSENCRYPT_HOST: "你的域名" #此为其内置HTTPS使用的域名,本文中使用HTTP协议通过NPM反向代理实现HTTPS,故不重要
SYNAPSE_SERVER_NAME: "你的域名"
SYNAPSE_REPORT_STATS: "yes/no" #是否向官方服务器反馈错误接下来使用如下命令在./data中生成配置文件
docker run -it --rm -v ./data/:/data/ -e SYNAPSE_SERVER_NAME=你的域名 -e SYNAPSE_REPORT_STATS=yes/no matrixdotorg/synapse:latest generate #yes/no选择一个,域名填写与docker-compose.yml相同的域名即可生成成功后./data(或者自定义的路径)中会出现homeserver.yaml,将其修改,参照以下模板
# Configuration file for Synapse.
#
# This is a YAML file: see [1] for a quick introduction. Note in particular
# that *indentation is important*: all the elements of a list or dictionary
# should have the same indentation.
#
# [1] https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html
#
# For more information on how to configure Synapse, including a complete accounting of
# each option, go to docs/usage/configuration/config_documentation.md or
# https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html
server_name: "你的域名"
pid_file: /data/homeserver.pid
listeners:
- port: 你的端口 #同上
tls: false
type: http
x_forwarded: true
resources:
- names: [client, federation]
compress: false
database: #这里使用SQLite,若要使用其他数据库请参考官方文档修改此处配置
name: sqlite3
args:
database: /data/homeserver.db
log_config: "/data/你的域名.log.config" #可修改该文件以配置日志
media_store_path: /data/media_store #此处可以修改用户上传的媒体的存储路径(在容器中的路径)
registration_shared_secret: "保留生成的secret即可"
report_stats: false
macaroon_secret_key: "保留生成的secret即可"
form_secret: "保留生成的secret即可"
signing_key_path: "/data/你的域名.signing.key"
trusted_key_servers:
- server_name: "matrix.org"
enable_registration: True #若是私人服务器设置为false可关闭注册
registrations_require_3pid: #使用邮箱注册,若需其他方式可参考官方文档
- email
suppress_key_server_warning: True
public_baseurl: https://你的域名 #其他服务器访问你的服务器所用域名,同上面的域名即可
serve_server_wellknown: true #开启后服务器连接会通过443而不是非标端口,可以用于添加CDN
block_non_admin_invites: false
allow_guest_access: false
email:
smtp_host: 你的邮件服务器 #无需引号
smtp_port: 你的邮件服务器端口 #无需引号
smtp_user: "你的SMTP账户"
smtp_pass: "你的SMTP密码"
enable_tls: true #是否开启TLS,OutLook需开启
require_transport_security: true
notif_from: "Your Friendly %(app)s homeserver <>" #验证邮件提示语,可按照喜好自行修改
client_base_url: "https://你的element域名" #不同于上述"你的域名",指的是客户端域名,后续部署element时会提到
validation_token_lifetime: 15m #验证邮件有效时长
invite_client_location: https://你的element域名
subjects: #各种提示消息的主题,如需修改样式,请参阅官方文档并自行搜索主题
message_from_person_in_room: "%(person)s 在 %(room)s 聊天室中给你发送了一条消息"
message_from_person: "%(person)s 给你发送了一条消息"
messages_from_person: "%(person)s 给你发送了多条消息"
messages_in_room: "你有一条来自 %(room)s 聊天室的消息"
messages_in_room_and_others: "你有一些来自 %(room)s 聊天室和其他人的消息"
messages_from_person_and_others: "[%(app)s] 你有一些来自 %(person)s 和其他人的消息"
invite_from_person_to_room: "%(person)s 邀请你加入 %(room)s 聊天室"
invite_from_person: "%(person)s 邀请你注册<>"
password_reset: "【】密码重置"
email_validation: "【】验证您的电子邮件"
# vim:ft=yaml
修改完之后,使用chmod -R +777 ./data 将data文件夹权限设为最高,然后在含有docker-compose.yml的目录下使用docker compose up -d 启动服务器
此时,若你将服务器该端口映射到公网,访问公网IP+端口,应出现包含It works! Synapse is running 的界面,证明搭建正确
2、使用Nginx Proxy Manager进行反向代理
打开Nginx Proxy Manager,并添加Proxy Host,此处使用的域名是前文中"你的域名",IP与端口则是前文中Docker容器映射到的IP与端口,回源协议选择HTTP,开启TLS(如果使用Cloudflare CDN也可不开启TLS)
将域名解析至服务器公网IP,若访问https://你的域名 出现与上文一样的It works! Synapse is running 的界面,证明搭建成功
3、接入Cloudflare CDN(可选)
由于Cloudflare CDN会自行提供边缘TLS证书,所以若要接入Cloudflare CDN,前文配置Nginx Proxy Manager时可不使用TLS/使用Cloudflare提供的15年有效期的源服务器证书
另外一种方法是不使用Nginx Proxy Manager,而直接使用Origin Rules将该域名解析会员至指定端口,但是不推荐此种方式,因为Cloudflare免费计划中每个域名只有10条Origin Rules,且使用此种方式需在公网上暴露端口
4、搭建Synapse时的一些注意事项
(1)开启TLS十分重要
Matrix协议的加密与TLS有着密不可分的关系,若不开启TLS直接使用HTTP搭建HomeServer,在使用过程中会发现无法生成加密秘钥等问题
(2)接入Cloudflare CDN后的上传文件限制
在接入Cloudflare CDN后,由于免费版的限制,最大文件上传大小为100MB,否则会返回Error 413
(3)文件存储
文件会全部存储在搭建用服务器上,所以尽量使用硬盘较大的服务器作为HomeServer
5、使用Cloudflare Pages搭建Element客户端
由于Element客户端为纯前端页面,所以可以使用Cloudflare Pages搭建,而不必浪费服务器资源
https://github.com/element-hq/element-web
将此仓库的最新分支/稳定分支部署至Cloudflare Pages/任意前端托管平台上即可
注意需修改config.json,将其中的HomeServer修改为你自己的HomeServer,且将你自己的客户端域名解析至此Pages上,作为上文中的"你的element域名"
结语
Matrix是一个分布式的加密通讯协议,而Synapse是现存的唯一稳定服务端,Element也是一个很好用的稳定客户端,界面十分美观,如有需要也可尝试Android/IOS/PC版,浏览器版的泛用性相对更强,但操作相对更困难一些。