Synapse的原仓库已归档,新仓库地址:Synapse仓库
本文章将使用 Docker ,快速部署 Synapse 并将数据库改为 PostgreSQL ,并且部署 Sliding-sync 供 ElementX 使用。此外还将介绍如何将多个服务器组合成矩阵
Synapse 部署
创建 docker-compose 文件
创建docker-compose.yml
文件,其中写入以下内容即可快速部署 Synapse/Sliding-sync 并将数据库提供者改为 PostgreSQL
注意根据注释修改注释处的内容
// docker-compose.yml
version: '3'
services:
synapse:
image: matrixdotorg/synapse:latest
container_name: matrix-synapse
restart: unless-stopped
environment:
- SYNAPSE_CONFIG_PATH=/data/homeserver.yaml
volumes:
- ./data:/data
depends_on:
- synapse_db
ports:
- 127.0.0.1:8008:8008
synapse_db:
image: docker.io/postgres:15-alpine
restart: unless-stopped
container_name: synapse_db
environment:
- POSTGRES_USER=postgres # 设置数据库用户名
- POSTGRES_PASSWORD=123123 # 设置数据库密码
- POSTGRES_DB=synapse # 设置数据库名
- POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C
volumes:
- ./synapse_db:/var/lib/postgresql/data
ssync-proxy:
image: ghcr.io/matrix-org/sliding-sync:latest
restart: unless-stopped
container_name: ssync-proxy
ports:
- 127.0.0.1:8088:8088
environment:
- "SYNCV3_SECRET=123123123" # 设置代理密钥,自行生成一个密钥串即可
- "SYNCV3_SERVER=https://example.com" # 设置代理服务器地址
- "SYNCV3_DB=user=postgres dbname=synvc3 sslmode=disable host=ssync_db password=123123123123" # 设置数据库连接信息
- "SYNCV3_BINDADDR=0.0.0.0:8088"
depends_on:
- ssync_db
ssync_db:
image: docker.io/postgres:15-alpine
restart: unless-stopped
container_name: ssync_db
environment:
- POSTGRES_USER=postgres # 设置数据库用户名
- POSTGRES_PASSWORD=123123123123 # 设置数据库密码
- POSTGRES_DB=synvc3 # 设置数据库名
- POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C
volumes:
- ./ssync_db:/var/lib/postgresql/data
修改完成后保存
启动容器
前往docker-compose.yml
所在的目录,运行以下命令来运行容器:
docker-compose up -d
应当有若干容器启动完成,至此,服务应当已经全部部署完毕,下文将介绍配置文件的修改
上传证书
在完成了容器的启动后,文件目录应当如下所示:
- root
- synapse
- data
- homeserver.yaml
- ssync_db
- …
- synapse_db
- …
- docker-compose.yml
- data
- synapse
在 data
文件夹下上传 tls_certificate
和 tls_private_key
证书
配置 homeserver.yaml
在 data
文件夹下配置 homeserver.yaml
其中写入以下内容:
注意根据注释修改注释处的内容
如果此目录下不存在 homeserver.yaml
,请检查容器的存储卷配置,或前往容器目录下修改
// homeserver.yaml
# vim:ft=yaml
## TLS ##
tls_certificate_path: "/data/example.com.tls.crt" # 设置tls证书名
tls_private_key_path: "/data/example.com.tls.key" # 设置tls私钥名
## Server ##
server_name: "example.com" # 设置服务器名
pid_file: /homeserver.pid
web_client: False
soft_file_limit: 0
log_config: "/data/log.config"
## Ports ##
listeners:
-
port: 8448
bind_addresses: ['::']
type: http
tls: true
x_forwarded: false
resources:
- names: [client]
compress: true
- names: [federation] # Federation APIs
compress: false
# Allow configuring in case we want to reverse proxy 8008
# using another process in the same container
- port: 8008
tls: false
bind_addresses: ['::']
type: http
x_forwarded: false
resources:
- names: [client]
compress: true
- names: [federation]
compress: false
## Database ##
database:
name: psycopg2
args:
user: postgres # 设置数据库用户
password: 123123123123 # 设置数据库密码
dbname: synapse
host: synapse_db
cp_min: 5
cp_max: 10
## Performance ##
event_cache_size: "10K"
## Ratelimiting ##
rc_messages_per_second: 0.2
rc_message_burst_count: 10.0
federation_rc_window_size: 1000
federation_rc_sleep_limit: 10
federation_rc_sleep_delay: 500
federation_rc_reject_limit: 50
federation_rc_concurrent: 3
## Files ##
media_store_path: "/data/media"
max_upload_size: "5000M" # 设置上传文件的大小限制
max_image_pixels: "3200M"
dynamic_thumbnails: false
# List of thumbnail to precalculate when an image is uploaded.
thumbnail_sizes:
- width: 32
height: 32
method: crop
- width: 96
height: 96
method: crop
- width: 320
height: 240
method: scale
- width: 640
height: 480
method: scale
- width: 800
height: 600
method: scale
url_preview_enabled: False
max_spider_size: "10M"
## Captcha ##
# Captcha 自行考虑设定
recaptcha_public_key: "YOUR_PUBLIC_KEY"
recaptcha_private_key: "YOUR_PRIVATE_KEY"
enable_registration_captcha: False
recaptcha_siteverify_api: "https://www.google.com/recaptcha/api/siteverify"
## Turn ##
# Turn 自行考虑设定(要启用语音聊天功能可能需要)
turn_uris: []
turn_shared_secret: "YOUR_SHARED_SECRET"
turn_user_lifetime: "1h"
turn_allow_guests: True
## Registration ##
enable_registration: true # 设置是否允许注册
enable_registration_without_verification: true
registration_shared_secret: "123412341234" # 自行生成密钥
bcrypt_rounds: 12
allow_guest_access: False
enable_group_creation: true
## Metrics ###
enable_metrics: True
report_stats: True
## API Configuration ##
macaroon_secret_key: "pppppppppppppppppppppppppppppppppppppppppppp" # 自行生成密钥
## Signing Keys ##
signing_key_path: "/data/example.com.signing.key" # 改为自己的域名
old_signing_keys: {}
key_refresh_interval: "1d" # 1 Day.
# The trusted servers to download signing keys from.
trusted_key_servers:
- server_name: matrix.org
verify_keys:
"ed25519:auto": "pppppppppppppppppppppppppppppppppppppppppppp" # 自行生成密钥,32位
password_config:
enabled: true
allow_public_rooms_without_auth: true
federation_domain_whitelist: # 设置服务器矩阵联邦白名单(将你的所有服务器地址写在这)
- example.com
- example.com
可能出现的问题及解决方案:
Permission denied: '/homeserver.log
:Issue#9970
至此,Synapse应当部署完毕,访问你的服务器 IP:8008
(默认情况)应当能看到以下提示:
It works! Synapse is running
如果无法访问请检查防火墙设置
接下来需要配置Nginx反向代理
配置Nginx
如果未更改端口,则需要反代 8008
和 8088
端口,先自行完成反代
在主域名反代Nginx的配置中添加如下内容:
注意根据注释修改, example.com
处应当是代理后的主域名, sync.expample.com
处应当是代理后的 8088
(Sliding-sync)
// nginx.conf
location /.well-known/matrix/server {
default_type application/json; # 设置返回类型为 JSON 联邦通讯
add_header Access-Control-Allow-Origin *; # 允许跨域访问
return 200 '{"m.server": "example.com:443"}';
}
location /.well-known/matrix/client {
default_type application/json; # 设置返回类型为 JSON 联邦通讯
add_header Access-Control-Allow-Origin *; # 允许跨域访问
return 200 '{"m.homeserver": {"base_url": "https://example.com"},"org.matrix.msc3575.proxy": {"url": "https://sync.expample.com"}}';
}
至此,全部配置已完成,开始使用你的服务器吧!