本文章将使用 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 文件夹下上传 tls_certificatetls_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.logIssue#9970

至此,Synapse应当部署完毕,访问你的服务器 IP:8008 (默认情况)应当能看到以下提示:

It works! Synapse is running

如果无法访问请检查防火墙设置
接下来需要配置Nginx反向代理

配置Nginx

如果未更改端口,则需要反代 80088088 端口,先自行完成反代 在主域名反代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"}}';
}

至此,全部配置已完成,开始使用你的服务器吧!