惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
V
Vulnerabilities – Threatpost
Google Online Security Blog
Google Online Security Blog
Hugging Face - Blog
Hugging Face - Blog
L
LINUX DO - 热门话题
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
D
Docker
C
Cyber Attacks, Cyber Crime and Cyber Security
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
T
Tenable Blog
P
Privacy International News Feed
Google DeepMind News
Google DeepMind News
小众软件
小众软件
Cisco Talos Blog
Cisco Talos Blog
aimingoo的专栏
aimingoo的专栏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
A
Arctic Wolf
C
Cybersecurity and Infrastructure Security Agency CISA
C
Cisco Blogs
T
Threat Research - Cisco Blogs
NISL@THU
NISL@THU
The Hacker News
The Hacker News
Project Zero
Project Zero
AWS News Blog
AWS News Blog
Simon Willison's Weblog
Simon Willison's Weblog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Threatpost
V
Visual Studio Blog
The GitHub Blog
The GitHub Blog
The Cloudflare Blog
Last Week in AI
Last Week in AI
Jina AI
Jina AI
Cyberwarzone
Cyberwarzone
The Register - Security
The Register - Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
Vercel News
Vercel News
D
Darknet – Hacking Tools, Hacker News & Cyber Security
MongoDB | Blog
MongoDB | Blog
U
Unit 42
Scott Helme
Scott Helme
A
About on SuperTechFans
WordPress大学
WordPress大学
F
Fortinet All Blogs
大猫的无限游戏
大猫的无限游戏
G
GRAHAM CLULEY
Latest news
Latest news
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
S
Schneier on Security

兴起百年 - XQBN.com - 学习

小内存服务器大爆发:我是如何优化WordPress扛住上万PV的 我的定投日记:纳斯达克指数基金10个月收益16.33%的思考与展望 Typecho关键词链接插件提示错误 Warning: Undefined array key 2 in 的解决方法 Typecho缩短链接插件提示错误Deprecated: unserialize(): Passing null to parameter #1 ($data) of type string is deprecated的解决方法 ubuntu 22.04系统 如何将硬盘的inodes参数设置为最大值? ROE投资笔记:大道至简,如何寻找长期稳定高ROE的“宝藏股”? 巴菲特也推崇的选股心法:用好这“三层筛子”,半年收益可达80% 投资进阶必备技能:手把手教你高效查找与阅读公司研报 新能源基金暴涨118%!我的投资学习笔记:碳中和赛道还能追吗?
自部署去中心聊天项目 Matrix 服务器Debian12+宝塔面板+Docker安装Matrix免费开源聊天项目
作者: 兴起百年 · 2025-12-06 · via 兴起百年 - XQBN.com - 学习

这篇文章距离最后更新已过163 天,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

一、项目需求说明

为了安全、高效和团队沟通交流,在网络上寻找、对比了多个免费、开源、安全、高效的文字、图片、语音的聊天工具项目,对比之后选择了使用Matrix这个项目

安装环境说明

计划使用域名 https://m.xqbn.com ,服务器使用Debian 12系统 + 宝塔面板 V11 + 宝塔的Docker进行部署

1、项目访问网址使用 https://m.xqbn.com
2、项目主路径 /www/dk_project/dk_app/m.xqbn.com
3、需要开启用户注册功能
4、数据库使用 PostgreSQL 数据库名称、用户名为 mxqbn_com 密码为 R4PhkSD*QPNho6788
5、做好安装、配置、以及每周定时备份的教程

二、Matrix安装、配置说明

下面我为你整理一份在Debian 12系统上,使用宝塔面板和Docker重新部署Matrix Synapse的详细教程。这个教程会完全按照你的要求进行配置,包括使用PostgreSQL数据库、开启用户注册功能,以及设置每周定时备份。

🗑️ 完全清理旧配置

首先彻底清理之前的安装:

# 停止并删除容器
cd /www/dk_project/dk_app/m.xqbn.com
docker-compose down

# 删除所有容器和镜像
docker rm -f matrix_postgres matrix_synapse 2>/dev/null || true
docker rmi matrixdotorg/synapse:latest postgres:13 2>/dev/null || true

# 彻底清理数据(⚠️ 注意:这会删除所有现有数据!)
rm -rf /www/dk_project/dk_app/m.xqbn.com/*

# 重新创建目录结构
mkdir -p /www/dk_project/dk_app/m.xqbn.com/{postgres_data,synapse_data,backups,scripts}

完全清理旧配置 重新创建目录结构

🗄️ 配置PostgreSQL数据库

根据你的要求,我们先设置PostgreSQL数据库:

# 创建数据库初始化脚本
cat > /www/dk_project/dk_app/m.xqbn.com/scripts/init-db.sql << 'EOF'
CREATE USER mxqbn_com_sql WITH PASSWORD 'yR4PhkSD*QPNho8899';
CREATE DATABASE mxqbn_com_sql OWNER mxqbn_com_sql;
GRANT ALL PRIVILEGES ON DATABASE mxqbn_com_sql TO mxqbn_com_sql;
\c mxqbn_com_sql;
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
EOF

配置PostgreSQL数据库

🐳 创建Docker Compose配置

创建主配置文件 docker-compose.yml

services:
  postgres:
    image: postgres:13
    container_name: matrix_postgres
    restart: unless-stopped
    environment:
      POSTGRES_USER: mxqbn_com_sql
      POSTGRES_PASSWORD: R4PhkSD*QPNho6788
      POSTGRES_DB: mxqbn_com_sql
      POSTGRES_INITDB_ARGS: "--encoding=UTF8 --lc-collate=C --lc-ctype=C"
    volumes:
      - ./postgres_data:/var/lib/postgresql/data
      - ./scripts/init-db.sql:/docker-entrypoint-initdb.d/init-db.sql:ro
    command: >
      postgres 
      -c shared_preload_libraries=pg_stat_statements
      -c pg_stat_statements.track=all
      -c max_connections=200
      -c shared_buffers=256MB
      -c effective_cache_size=1GB
    networks:
      - matrix_net
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U mxqbn_com_sql"]
      interval: 10s
      timeout: 5s
      retries: 5

  synapse:
    image: matrixdotorg/synapse:latest
    container_name: matrix_synapse
    restart: unless-stopped
    ports:
      - "127.0.0.1:8008:8008"
    environment:
      SYNAPSE_CONFIG_PATH: /data/homeserver.yaml
    volumes:
      - ./synapse_data:/data
    depends_on:
      postgres:
        condition: service_healthy
    networks:
      - matrix_net
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8008/health"]
      interval: 30s
      timeout: 10s
      retries: 3

networks:
  matrix_net:
    driver: bridge

将此文件保存为:/www/dk_project/dk_app/m.xqbn.com/docker-compose.yml

⚙️ 生成并配置Synapse

现在生成Synapse配置:

cd /www/dk_project/dk_app/m.xqbn.com

# 生成初始配置
docker run -it --rm \
  -v /www/dk_project/dk_app/m.xqbn.com/synapse_data:/data \
  -e SYNAPSE_SERVER_NAME=m.xqbn.com \
  -e SYNAPSE_REPORT_STATS=yes \
  matrixdotorg/synapse:latest generate

生成并配置Synapse

修改生成的配置文件 synapse_data/homeserver.yaml

# 编辑配置文件
nano /www/dk_project/dk_app/m.xqbn.com/synapse_data/homeserver.yaml

以下是默认生成的信息:【我们需要保留 registration_shared_secret、macaroon_secret_key、form_secret、signing_key_path这些参数 对应的信息】

image-20251024172922028

需要修改的关键配置部分:【数据库信息需要修改为对应的,registration_shared_secret、macaroon_secret_key、form_secret、signing_key_path这些参数需要使用对应的信息】

server_name: "m.xqbn.com"
public_baseurl: "https://m.xqbn.com/"
pid_file: /data/homeserver.pid

listeners:
  - port: 8008
    tls: false
    type: http
    x_forwarded: true
    resources:
      - names: [client, federation]
        compress: false

# 数据库配置 - 使用你指定的PostgreSQL
database:
  name: psycopg2
  args:
    user: mxqbn_com_sql
    password: "R4PhkSD*QPNho6788"
    database: mxqbn_com_sql
    host: postgres
    port: 5432
    cp_min: 5
    cp_max: 10
    keepalives_idle: 30
    keepalives_interval: 10
    keepalives_count: 3

# 启用用户注册
enable_registration: true
enable_registration_without_verification: true

# 媒体存储路径
media_store_path: /data/media_store
uploads_path: /data/uploads

# 其他保持生成的默认值
log_config: "/data/m.xqbn.com.log.config"
registration_shared_secret: "p&[email protected]=SurgM6mt_HcowqU7o^D#af-zhr"
report_stats: true
macaroon_secret_key: "4i#0thVQ1AGhUBSaybp-:L;cXR52gqt_9Zek3~qK;*&jpAP5#8"
form_secret: "1s2#nz~yCbwP+;a^PloX@An+mA#BGjzF;_25qo2q7_b-LoRx:U"
signing_key_path: "/data/m.xqbn.com.signing.key"
trusted_key_servers:
  - server_name: "matrix.org"

# 取消密钥服务器警告(可选)
suppress_key_server_warning: true

🔧 设置权限并启动服务

# 设置正确的权限
chown -R 991:991 /www/dk_project/dk_app/m.xqbn.com/synapse_data
chown -R 999:999 /www/dk_project/dk_app/m.xqbn.com/postgres_data

# 启动服务
cd /www/dk_project/dk_app/m.xqbn.com
docker-compose up -d

# 检查服务状态
docker-compose ps
docker-compose logs -f

设置权限并启动服务

🌐 配置宝塔面板反向代理

在宝塔面板中配置反向代理:

  1. 创建新网站,域名填写:m.xqbn.com
  2. 在网站设置中找到"反向代理",添加代理:

    • 代理名称:matrix
    • 目标URL:http://127.0.0.1:8008

image-20260101181747371

👤 创建管理员用户

等待服务完全启动后(约2-3分钟),创建管理员用户:

cd /www/dk_project/dk_app/m.xqbn.com
docker-compose exec synapse register_new_matrix_user http://localhost:8008 -c /data/homeserver.yaml -a -u admin -p Google@168168

打开网站首页,看到这个界面就表示安装成功

打开网站首页,看到这个界面就表示安装成功

💾 配置自动备份系统

创建备份脚本 scripts/backup.sh

#!/bin/bash

# 备份配置
BACKUP_DIR="/www/dk_project/dk_app/m.xqbn.com/backups"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=28

# 创建备份目录
mkdir -p ${BACKUP_DIR}/${DATE}

echo "$(date) 开始Matrix数据备份..."

# 备份PostgreSQL数据库
echo "备份数据库..."
docker-compose exec -T postgres pg_dump -U mxqbn_com_sql mxqbn_com_sql > ${BACKUP_DIR}/${DATE}/matrix_db.sql

# 备份Synapse配置文件和数据
echo "备份Synapse配置..."
tar -czf ${BACKUP_DIR}/${DATE}/synapse_config.tar.gz -C /www/dk_project/dk_app/m.xqbn.com/synapse_data .

# 备份Docker配置
echo "备份Docker配置..."
cp /www/dk_project/dk_app/m.xqbn.com/docker-compose.yml ${BACKUP_DIR}/${DATE}/
cp -r /www/dk_project/dk_app/m.xqbn.com/scripts ${BACKUP_DIR}/${DATE}/

# 打包备份文件
echo "打包备份文件..."
tar -czf ${BACKUP_DIR}/matrix_backup_${DATE}.tar.gz -C ${BACKUP_DIR} ${DATE}

# 清理临时文件
rm -rf ${BACKUP_DIR}/${DATE}

# 清理旧备份
find ${BACKUP_DIR} -name "matrix_backup_*.tar.gz" -mtime +${RETENTION_DAYS} -delete

echo "$(date) 备份完成!备份文件: ${BACKUP_DIR}/matrix_backup_${DATE}.tar.gz"

设置脚本权限并测试:

chmod +x /www/dk_project/dk_app/m.xqbn.com/scripts/backup.sh

# 测试备份
/www/dk_project/dk_app/m.xqbn.com/scripts/backup.sh

⏰ 设置定时备份

使用crontab设置每周备份:

# 编辑crontab
crontab -e

# 添加以下行(每周日凌晨3点执行备份)
0 3 * * 0 /www/dk_project/dk_app/m.xqbn.com/scripts/backup.sh >> /www/dk_project/dk_app/m.xqbn.com/backups/backup.log 2>&1

或者在宝塔面板中添加计划任务:

  • 任务类型:Shell脚本
  • 执行周期:每周
  • 脚本内容:/www/dk_project/dk_app/m.xqbn.com/scripts/backup.sh

🧪 验证部署

检查服务状态:

# 检查容器状态
docker-compose ps

# 检查日志
docker-compose logs --tail=50 synapse

# 测试健康检查
curl http://localhost:8008/health

# 测试 federation
curl https://m.xqbn.com/.well-known/matrix/server

访问 https://m.xqbn.com 应该能看到Matrix的欢迎页面。你可以在 https://app.element.io/ 使用你的服务器地址 https://m.xqbn.com 注册新用户或登录。

打开登录、注册页面 https://app.element.io/ 点击 Edit 更换登录的服务器

  • 2、更换登录服务器为 https://m.xqbn.com 点击继续 Continue

更换登录服务器为 m.xqbn.com 点击继续 Continue

  • 3、可以在注册窗口左下侧的按钮更换语言,支持中文。注册的时候,只需要填写用户名和密码,密码需要填写两次;用户名只能使用小写字母;

可以在注册窗口左下侧的按钮更换语言,支持中文。注册的时候,只需要填写用户名和密码,密码需要填写两次;用户名只能使用小写字母;

  • 4、注册成功之后,可以点击 发送私聊 进入聊天窗口

注册成功之后,可以点击 发送私聊 进入聊天窗口

  • 5、查找需要联系的目标用户格式为 @用户名:服务器域名 比如要联系我,使用 @bruce:m.xqbn.com 在下面的建议中就会显示我的账户了

查找需要联系的目标用户格式为 @用户名:服务器域名  比如要联系我,使用 @bruce:m.xqbn.com 在下面的建议中就会显示我的账户了

  • 6、如果账户没有设置密钥的话,和人聊天发消息的时候,就会有弹窗提示需要设置密钥,点击 继续

如果账户没有设置密钥的话,和人聊天发消息的时候,就会有弹窗提示需要设置密钥

  • 7、然后就会进入设置密钥的界面,点击 Set Up recovery

进入设置密钥的界面,点击  Set Up recovery

  • 8、点击 继续 生成账户恢复密钥

image-20251024175959797

  • 9、到这一步就可以看到生成的账户恢复密钥,点击 后面的复制按钮,一定要保存好;点击 继续 会让你再输入一次密钥确认一次;

到这一步就可以看到生成的账户恢复密钥,点击 后面的复制按钮,一定要保存好;点击 继续 会让你再输入一次密钥确认一次;

  • 10、设置好账户恢复密钥之后,页面的状态就会显示这样

image-20251024180312151

  • 11、🔒 安全建议
  1. 注册控制:团队成员注册完成后,建议修改 homeserver.yaml

    enable_registration: false
    enable_registration_without_verification: false

    然后重启服务:docker-compose restart

  2. 防火墙设置:确保只开放必要的80/443端口。
  3. 定期更新:每月更新一次容器镜像:

    docker-compose pull
    docker-compose up -d

这个完整的方案应该能满足你的所有要求。如果在部署过程中遇到任何问题,可以查看具体的错误日志来进一步排查。