Container - Matrix (Synapse)
本页记录如何在 MikroTik RouterOS 上将 Synapse Matrix 服务器设置为容器,涵盖容器网络配置和 PostgreSQL 环境设置等前提条件,以实现跨多个平台的安全联邦通信。
容器 - Matrix (Synapse)
Matrix 是一种去中心化通信协议。每个 Matrix 服务器独立运行,维护自己的一组用户并定义自己的规则和政策。
托管你自己的 Matrix 服务器
你可以使用容器直接在 RouterOS 设备上托管自己的 Matrix 服务器。这使你能够完全控制自己的通信基础设施。
联邦
Matrix 服务器可以通过联邦连接起来,构建统一的通信网络。这使得不同 Matrix 服务器上的用户能够安全地相互通信,而无需中央权威机构。
桥接到其他平台
Matrix 支持桥接以中继来自其他聊天平台的消息,包括:
- Discord
- Signal
- Telegram
- 以及许多其他平台
通过使用 Matrix 桥接,你可以将来自多个平台的通信整合到一个应用中,例如 Element。这使你能够通过一个统一的界面与不同平台的用户通信。
在 RouterOS 上设置 Synapse Matrix 服务器
本指南说明如何使用容器在你的 MikroTik RouterOS 设备上设置 Synapse——可用的多个 Matrix 服务器之一。
信息
在继续之前,请确保你已创建容器网络。有关说明,请参阅容器网络文档。
前提条件
- 一台支持容器的 RouterOS 设备
- 已配置好的现有容器网络
- 为数据库和 Synapse 数据提供足够的存储空间
步骤 1:创建 PostgreSQL 容器环境变量
为 PostgreSQL 容器配置环境变量列表:
/container/envs/add list=postgres_synapse_envs key=POSTGRES_DB value="synapse"
/container/envs/add list=postgres_synapse_envs key=POSTGRES_PASSWORD value="<POSTGRES_PASSWORD_HERE>"
/container/envs/add list=postgres_synapse_envs key=POSTGRES_USER value="synapse_user"
/container/envs/add list=postgres_synapse_envs key=PGDATA value="/var/lib/postgresql/data/pgdata"
/container/envs/add list=postgres_synapse_envs key=POSTGRES_INITDB_ARGS value="--encoding='UTF8' --lc-collate='C' --lc-ctype='C'"
/container/envs/add list=postgres_synapse_envs key=PGPORT value=5433
说明
将
<POSTGRES_PASSWORD_HERE>替换为你想要的 PostgreSQL 密码。
步骤 2:创建 PostgreSQL 容器挂载
创建一个挂载点,将 PostgreSQL 数据持久化到你的 RouterOS 设备上:
/container/mounts/add list=synapse_postgres_data src=disk1/synapse-postgres-data dst=/var/lib/postgresql/data
步骤 3:创建 PostgreSQL 容器
使用前面步骤中的配置启动 PostgreSQL 容器:
/container/add remote-image=postgres:17.2-alpine interface=veth1 root-dir=disk1/postgres-17.2-synapse mountlists=synapse_postgres_data envlists=postgres_synapse_envs name=postgresql_synapse
步骤 4:创建 Synapse 容器环境变量
为 Synapse 容器配置环境变量:
/container/envs/add list=synapse_envs key=SYNAPSE_CONFIG_DIR value="/data"
/container/envs/add list=synapse_envs key=SYNAPSE_CONFIG_PATH value="/data/homeserver.yaml"
/container/envs/add list=synapse_envs key=SYNAPSE_SERVER_NAME value="test.mt.lv"
/container/envs/add list=synapse_envs key=SYNAPSE_REPORT_STATS value="yes"
说明
将
test.mt.lv替换为你实际的服务器域名。
步骤 5:创建 Synapse 容器挂载
创建一个挂载点,将 Synapse 数据持久化到你的 RouterOS 设备上:
/container/mounts/add list=synapse_data src=disk1/synapse-data dst=/data
步骤 6:生成初始 Synapse 配置
创建并运行一个 Synapse 容器以生成所需的配置文件。该容器使用 generate 命令运行以创建初始配置:
/container/add remote-image=matrixdotorg/synapse:latest interface=veth1 cmd="generate" root-dir=disk1/synapse mountlists=synapse_data envlists=synapse_envs name=synapse
步骤 7:初始化配置文件
启动然后停止 Synapse 容器,使其生成必要的配置文件:
/container/start [find where name=synapse]
/container/stop [find where name=synapse]
步骤 8:移除 generate 命令
清除 Synapse 容器中的 command 参数,使其以正常模式运行:
/container/set [find where name=synapse] cmd=""
步骤 9:配置数据库连接
使用 SFTP 客户端(例如 Windows 上的 WinSCP)连接到你的 RouterOS 设备,并编辑生成的配置文件 disk1/synapse-data/homeserver.yaml。用以下设置更新数据库部分:
database:
name: psycopg2
args:
user: synapse_user
password: <POSTGRES_PASSWORD_HERE>
dbname: synapse
host: 172.17.0.2
port: 5433
cp_min: 5
cp_max: 10
keepalives_idle: 10 # optional
keepalives_interval: 10 # optional
keepalives_count: 3 # optional
信息
将
<POSTGRES_PASSWORD_HERE>替换为你在步骤 1 中设置的密码。
步骤 10:启动 PostgreSQL 容器
启动 PostgreSQL 容器以准备数据库:
/container/start [find where name=postgresql_synapse]
步骤 11:启动 Synapse 容器
启动 Synapse 容器以运行你的 Matrix 服务器:
/container/start [find where name=synapse]
步骤 12:注册 Matrix 用户
进入 Synapse 容器的 shell 并注册一个新用户:
/container/shell [find where name=synapse]
进入容器后,运行:
register_new_matrix_user -c /data/homeserver.yaml
按照提示创建你的管理员用户账户。
步骤 13:访问你的 Matrix 服务器
你的 Synapse Matrix 服务器现在正在运行。使用你 RouterOS 设备的 IP 地址或域名访问它。
警告
请始终查阅官方 Synapse 文档,以获取最新的配置选项和最佳实践,因为配置步骤可能会随新版本而变化。
Discord 桥接
提示
-
创建 PostgreSQL Discord 桥接容器环境变量:
/container/envs/add list=postgres_discord_envs key=POSTGRES_DB value="synapse-discord" /container/envs/add list=postgres_discord_envs key=POSTGRES_PASSWORD value="<POSTGRE_BRIDGE_PASSWORD_HERE>" /container/envs/add list=postgres_discord_envs key=POSTGRES_USER value="synapse_discord" /container/envs/add list=postgres_discord_envs key=PGDATA value="/var/lib/postgresql/data/pgdata" /container/envs/add list=postgres_discord_envs key=POSTGRES_INITDB_ARGS value="--encoding='UTF8' --lc-collate='C' --lc-ctype='C'" /container/envs/add list=postgres_discord_envs key=PGPORT value=5434 -
创建 PostgreSQL Discord 桥接容器挂载:
/container/mounts/add list=discord_postgres_data src=disk1/discord-postgres-data dst=/var/lib/postgresql/data -
为 Discord 桥接创建 PostgreSQL 容器:
/container/add remote-image=postgres:17.2-alpine interface=veth1 root-dir=disk1/postgres-17.2-discord mountlists=discord_postgres_data envlists=postgres_discord_envs name=postgresql_discord -
按照 HAProxy 容器指南,为端口
8080设置逆向代理 -
创建 Discord 桥接容器挂载点:
/container/mounts/add list=synapse_discord_data src=disk1/synapse-discord-data dst=/data -
创建 Discord 桥接容器:
/container/add remote-image=litetex/mau.mautrix.discord:latest interface=veth1 root-dir=disk1/synapse-discord mountlists=synapse_discord_data name=synapse_discord -
启动并停止 Discord 桥接容器以生成文件:
/container/start [find where name=synapse_discord] /container/stop [find where name=synapse_discord] -
使用 SFTP 客户端(例如在 Microsoft Windows 上使用 WinSCP)连接到你的 RouterOS 设备,并调整文件
disk1/synapse-discord/config.yaml:homeserver address: http://172.17.0.2:8008 domain: test.mt.lv software: standard async_media: true appservice address: leave default hostname: leave default port: leave default database: type: postgres uri: postgres://synapse_discord:<POSTGRE_DISCORD_PASSWORD_HERE>@172.17.0.2:5434/synapse-discord?sslmode=disable bridge: encryption: allow: true permissions: "*": relay "@your_admin_user1:test.mt.lv": admin "@your_admin_user2:test.mt.lv": admin -
再次启动并停止 Discord 桥接容器:
/container/start [find where name=synapse_discord] /container/stop [find where name=synapse_discord] -
下载文件
disk1/synapse-discord/registration.yaml,并将其作为文件disk1/synapse-data/mautrix-discord-registration.yaml上传 -
使用 SFTP 客户端(例如在 Microsoft Windows 上使用 WinSCP)连接到你的 RouterOS 设备,并将以下行添加到
disk1/synapse-data/homeserver.yaml:... app_service_config_files: - /data/mautrix-discord-registration.yaml -
启动 Synapse 和 Discord 桥接容器:
/container/start [find where name=postgresql_discord] /container/start [find where name=synapse_discord] /container/start [find where name=postgresql_synapse] /container/start [find where name=synapse] -
你的 Matrix 服务器现在应该有一个名为 "Discord bridge bot" 的新用户。按照官方文档创建桥接房间。