【沟通协作软件】腾讯云域名DDNS搭建Matrix家庭服务器 - 完整操作笔记

📋 项目概述

目标:在Ubuntu桌面环境下,使用腾讯云域名+DDNS搭建可迁移的Matrix家庭服务器

🏗️ 环境准备

系统要求

  • 操作系统:Ubuntu 22.04/24.04 Desktop
  • 内存:≥4GB(推荐8GB)
  • 存储:≥50GB可用空间
  • 网络:家庭宽带(有公网IP)或可申请动态公网IP

域名准备

  • 腾讯云注册的域名(如:your-domain.com
  • 域名已实名认证
  • 确保DNS服务器为腾讯云DNSPod

🔑 第一步:获取腾讯云API密钥

1. 登录腾讯云控制台

~~

访问:https://console.cloud.tencent.com/cam/capi

~~

2. 创建API密钥

  1. 点击「访问密钥」→「API密钥管理」
  2. 点击「新建密钥」
  3. 关键设置
    • 选择「子用户」
    • 用户名:matrix-ddns-user
    • 访问方式:编程访问
    • 策略:搜索并勾选 QcloudDNSPodFullAccess
  4. 保存并记录:
    • SecretIdAKIDxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    • SecretKeyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

🖥️ 第二步:Ubuntu系统初始化

1. 系统更新

~~

更新系统

sudo apt update && sudo apt upgrade -y

安装基础工具

sudo apt install -y curl wget git vim jq net-tools htop

~~

2. 配置时区

~~

sudo timedatectl set-timezone Asia/Shanghai

~~

3. 检查网络

~~

查看当前IP

curl http://ip.3322.net

检查是否有公网IP

curl https://api.ipify.org

测试域名解析

nslookup your-domain.com

~~

📡 第三步:安装和配置DDNS服务

1. 创建DDNS工作目录

~~

sudo mkdir -p /opt/matrix-ddns/{config,scripts,logs,backup}

sudo chown -R USER:USER:USER:USER /opt/matrix-ddns

cd /opt/matrix-ddns

~~

2. 安装腾讯云CLI工具

~~

安装Python3和pip

sudo apt install -y python3 python3-pip

Ubuntu 24.04 需要创建虚拟环境

python3 -m venv /opt/matrix-ddns/venv

source /opt/matrix-ddns/venv/bin/activate

安装腾讯云CLI(使用国内镜像)

pip install tccli -i https://mirrors.aliyun.com/pypi/simple/

配置CLI

tccli configure

或分步配置:

tccli configure set secretId 你的SecretId

tccli configure set secretKey 你的SecretKey

tccli configure set region ap-guangzhou

tccli configure set output json

退出虚拟环境

deactivate

~~

3. 创建DDNS脚本

~~

nano /opt/matrix-ddns/scripts/ddns-update.sh

~~

脚本内容:

~~

#!/bin/bash

Matrix服务器专用DDNS更新脚本

激活虚拟环境(确保tccli可用)

source /opt/matrix-ddns/venv/bin/activate

配置文件

CONFIG_FILE="/opt/matrix-ddns/config/ddns-config.json"

LOG_FILE="/opt/matrix-ddns/logs/ddns-$(date +%Y%m%d).log"

STATE_FILE="/opt/matrix-ddns/state/current-ip.txt"

加载配置

SECRET_ID=(jq -r '.secret_id' CONFIGFILE)SECRETKEY=CONFIG_FILE) SECRET_KEY=CONFIGFILE)SECRETKEY=(jq -r '.secret_key' CONFIGFILE)DOMAIN=CONFIG_FILE) DOMAIN=CONFIGFILE)DOMAIN=(jq -r '.domain' CONFIGFILE)SUBDOMAIN=CONFIG_FILE) SUBDOMAIN=CONFIGFILE)SUBDOMAIN=(jq -r '.subdomain' CONFIG_FILE)

TTL=600 # 腾讯云最低TTL

设置腾讯云环境变量

export TENCENTCLOUD_SECRET_ID=SECRETIDexportTENCENTCLOUDSECRETKEY=SECRET_ID export TENCENTCLOUD_SECRET_KEY=SECRETIDexportTENCENTCLOUDSECRETKEY=SECRET_KEY

日志函数

log() {

echo "[(date '+%Y-%m-%d %H:%M:%S')\] 1" | tee -a $LOG_FILE

}

获取公网IP(多源验证)

get_public_ip() {

local ip_sources=(

"https://api.ipify.org?format=text"

"http://ip.3322.net"

"http://icanhazip.com"

"http://ifconfig.me"

)

复制代码
for source in "${ip_sources[@]}"; do
    local ip=$(curl -s --connect-timeout 5 $source)
    if [[ $ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
        log "从 $source 获取到IP: $ip"
        echo $ip
        return 0
    fi
done

log "错误:无法从任何源获取公网IP"
echo ""

}

获取DNS记录ID

get_record_id() {

local record_info=$(tccli dnspod DescribeRecordList

--Domain $DOMAIN

--Subdomain $SUBDOMAIN 2>/dev/null)

复制代码
if [ $? -eq 0 ]; then
    local record_id=$(echo $record_info | jq -r '.RecordList[0].RecordId // empty')
    echo $record_id
else
    echo ""
fi

}

创建DNS记录

create_dns_record() {

local ip=$1

log "创建DNS记录: SUBDOMAIN.SUBDOMAIN.SUBDOMAIN.DOMAIN -> $ip"

复制代码
tccli dnspod CreateRecord \
    --Domain $DOMAIN \
    --SubDomain $SUBDOMAIN \
    --RecordType A \
    --Value $ip \
    --RecordLine "默认" \
    --TTL $TTL 2>&1 | tee -a $LOG_FILE

}

更新DNS记录

update_dns_record() {

local record_id=$1

local ip=$2

复制代码
log "更新DNS记录(ID: $record_id): $SUBDOMAIN.$DOMAIN -> $ip"

tccli dnspod ModifyRecord \
    --Domain $DOMAIN \
    --RecordId $record_id \
    --SubDomain $SUBDOMAIN \
    --RecordType A \
    --Value $ip \
    --RecordLine "默认" \
    --TTL $TTL 2>&1 | tee -a $LOG_FILE

}

主函数

main() {

log "开始DDNS检查..."

复制代码
# 获取当前公网IP
CURRENT_IP=$(get_public_ip)
if [ -z "$CURRENT_IP" ]; then
    log "无法获取公网IP,退出"
    exit 1
fi

# 读取上次记录的IP
if [ -f "$STATE_FILE" ]; then
    LAST_IP=$(cat $STATE_FILE)
else
    LAST_IP=""
    touch $STATE_FILE
fi

# 检查IP是否变化
if [ "$CURRENT_IP" != "$LAST_IP" ]; then
    log "检测到IP变化: $LAST_IP -> $CURRENT_IP"
    
    # 获取现有记录ID
    RECORD_ID=$(get_record_id)
    
    if [ -z "$RECORD_ID" ]; then
        # 记录不存在,创建新记录
        create_dns_record "$CURRENT_IP"
    else
        # 记录存在,更新记录
        update_dns_record "$RECORD_ID" "$CURRENT_IP"
    fi
    
    # 更新状态文件
    echo "$CURRENT_IP" > $STATE_FILE
    log "DNS记录更新完成"
    
    # 执行IP变化后的处理脚本
    if [ -f "/opt/matrix-ddns/scripts/on-ip-change.sh" ]; then
        /opt/matrix-ddns/scripts/on-ip-change.sh "$LAST_IP" "$CURRENT_IP"
    fi
else
    log "IP未变化: $CURRENT_IP"
fi

log "DDNS检查完成"

}

执行主函数

main

退出虚拟环境

deactivate

~~

4. 创建配置文件

~~

nano /opt/matrix-ddns/config/ddns-config.json

~~

~~

{

"secret_id": "你的SecretId",

"secret_key": "你的SecretKey",

"domain": "your-domain.com",

"subdomain": "ddns",

"check_interval": 300,

"enable_email_notify": false,

"email": "your-email@example.com"

}

~~

5. 设置脚本权限

~~

chmod +x /opt/matrix-ddns/scripts/ddns-update.sh

chmod 600 /opt/matrix-ddns/config/ddns-config.json

~~

6. 创建IP变化处理脚本

~~

nano /opt/matrix-ddns/scripts/on-ip-change.sh

~~

~~

#!/bin/bash

IP变化时的处理脚本

OLD_IP=$1

NEW_IP=$2

LOG_FILE="/opt/matrix-ddns/logs/ip-change.log"

echo "[(date '+%Y-%m-%d %H:%M:%S')\] IP变化: OLD_IP -> NEW_IP" \>\> LOG_FILE

可以在这里添加:

1. 重启相关服务

2. 发送通知

3. 更新防火墙规则

示例:发送邮件通知(需要配置邮件服务)

echo "Matrix服务器IP已更新为: $NEW_IP" | mail -s "DDNS IP更新通知" your-email@example.com

示例:重启Nginx(如果需要)

systemctl restart nginx

~~

🚀 第四步:安装和配置Matrix服务器

1. 添加Matrix仓库

~~

下载Matrix GPG密钥(如果官方源无法访问,可以从GitHub下载)

sudo wget -O /usr/share/keyrings/matrix-org-keyring.gpg https://github.com/matrix-org/packages.matrix.org/raw/master/debian/matrix-org-keyring.gpg

添加Matrix软件源

echo "deb [signed-by=/usr/share/keyrings/matrix-org-keyring.gpg] https://packages.matrix.org/debian/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/matrix-org.list

如果官方源无法访问,可能需要等待或使用替代方案

更新包列表(可能会有警告,但可以继续)

sudo apt update

~~

2. 安装Matrix Synapse

~~

如果官方源无法访问,可以使用源码编译安装:

安装编译依赖

sudo apt install -y

build-essential

python3-dev

libffi-dev

python3-pip

python3-setuptools

sqlite3

libssl-dev

libjpeg-dev

libxslt1-dev

libpq-dev

python3-venv

创建虚拟环境

sudo mkdir -p /opt/matrix-synapse

sudo chown -R USER:USER:USER:USER /opt/matrix-synapse

cd /opt/matrix-synapse

python3 -m venv synapse-env

source /opt/matrix-synapse/synapse-env/bin/activate

使用国内PyPI源安装

pip install matrix-synapse -i https://mirrors.aliyun.com/pypi/simple/

生成配置文件

python -m synapse.app.homeserver

--server-name matrix.your-domain.com

--config-path homeserver.yaml

--generate-config

--report-stats=no

~~

3. 配置Synapse

~~

编辑配置文件

nano /opt/matrix-synapse/homeserver.yaml

~~

关键配置项:

~~

服务器名称

server_name: "your-domain.com"

必须添加统计报告设置

report_stats: false

Matrix客户端URL

public_baseurl: "https://matrix.your-domain.com"

监听地址(所有网络接口)

bind_addresses: ['0.0.0.0']

监听端口

listeners:

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

数据库配置(默认SQLite,生产环境建议PostgreSQL)

database:

name: sqlite3

args:

database: /opt/matrix-synapse/homeserver.db

注册设置

enable_registration: false # 初始关闭,手动创建用户

enable_registration_without_verification: false

媒体存储

media_store_path: /opt/matrix-synapse/media_store

日志配置(可选)

log_config: "/opt/matrix-synapse/log.yaml"

~~

4. 创建systemd服务(如果使用源码安装)

~~

创建服务文件

sudo tee /etc/systemd/system/matrix-synapse.service << 'EOF'

Unit

Description=Matrix Synapse Homeserver

After=network.target

Service

Type=simple

User=$USER

WorkingDirectory=/opt/matrix-synapse

Environment="PATH=/opt/matrix-synapse/synapse-env/bin:/usr/bin"

ExecStart=/opt/matrix-synapse/synapse-env/bin/python -m synapse.app.homeserver --config-path=/opt/matrix-synapse/homeserver.yaml

Restart=always

RestartSec=10

StandardOutput=journal

StandardError=journal

Install

WantedBy=multi-user.target

EOF

重新加载systemd

sudo systemctl daemon-reload

创建管理员用户

cd /opt/matrix-synapse

source synapse-env/bin/activate

register_new_matrix_user -c homeserver.yaml http://localhost:8008

按提示输入:

New user localpart: admin

Password: 设置强密码

Make admin [yes]: yes

~~

5. 启动Synapse服务

~~

启动服务

sudo systemctl start matrix-synapse

sudo systemctl enable matrix-synapse

查看状态

sudo systemctl status matrix-synapse

查看日志

sudo journalctl -u matrix-synapse -f

~~

🌐 第五步:配置Nginx反向代理和SSL

1. 安装Nginx和Certbot

~~

sudo apt install -y nginx certbot python3-certbot-nginx

~~

2. 配置Nginx站点

~~

sudo nano /etc/nginx/sites-available/matrix

~~

Nginx配置:

~~

HTTP重定向到HTTPS

server {

listen 80;

listen [::]:80;

server_name matrix.your-domain.com chat.your-domain.com;

复制代码
# ACME Challenge for Let's Encrypt
location /.well-known/acme-challenge/ {
    root /var/www/html;
}

# Matrix服务发现
location /.well-known/matrix {
    root /var/www/html;
    default_type application/json;
    add_header Access-Control-Allow-Origin *;
}

# 重定向到HTTPS
location / {
    return 301 https://$server_name$request_uri;
}

}

HTTPS服务器配置

server {

listen 443 ssl http2;

listen [::]:443 ssl http2;

server_name matrix.your-domain.com;

复制代码
# SSL证书路径(稍后生成)
ssl_certificate /etc/letsencrypt/live/matrix.your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/matrix.your-domain.com/privkey.pem;

# SSL优化配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;

# 根目录
root /var/www/html;
index index.html;

# 静态文件缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
}

# Matrix客户端API
location /_matrix/client {
    proxy_pass http://localhost:8008;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_read_timeout 600s;
}

# Matrix Federation API
location /_matrix/federation {
    proxy_pass http://localhost:8008;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

# 媒体文件
location /_matrix/media {
    proxy_pass http://localhost:8008;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

# Element Web客户端
location / {
    # 这里可以部署Element Web
    # 或者代理到Synapse的客户端接口
    proxy_pass http://localhost:8008;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

}

~~

3. 启用站点配置

~~

sudo ln -s /etc/nginx/sites-available/matrix /etc/nginx/sites-enabled/

sudo rm /etc/nginx/sites-enabled/default

测试Nginx配置

sudo nginx -t

重启Nginx

sudo systemctl restart nginx

~~

4. 创建服务发现文件

~~

sudo mkdir -p /var/www/html/.well-known/matrix

sudo nano /var/www/html/.well-known/matrix/server

~~

~~

{

"m.server": "matrix.your-domain.com:443"

}

~~

5. 获取SSL证书

~~

首先确保DNS解析已生效

然后获取证书

sudo certbot --nginx

-d matrix.your-domain.com

--agree-tos

--email your-email@example.com

--no-eff-email

--redirect

测试自动续期

sudo certbot renew --dry-run

~~

⚙️ 第六步:配置系统服务和监控

1. 创建DDNS系统服务

~~

sudo nano /etc/systemd/system/matrix-ddns.service

~~

~~

Unit

Description=Matrix DDNS Update Service

After=network-online.target

Wants=network-online.target

Service

Type=simple

User=ubuntu

WorkingDirectory=/opt/matrix-ddns

Environment="PATH=/usr/bin:/usr/local/bin"

ExecStart=/opt/matrix-ddns/scripts/ddns-update.sh

Restart=on-failure

RestartSec=30

StandardOutput=append:/opt/matrix-ddns/logs/service.log

StandardError=append:/opt/matrix-ddns/logs/error.log

Install

WantedBy=multi-user.target

~~

2. 创建定时器(每5分钟运行一次)

~~

sudo nano /etc/systemd/system/matrix-ddns.timer

~~

~~

Unit

Description=Run Matrix DDNS every 5 minutes

Requires=matrix-ddns.service

Timer

OnBootSec=1min

OnUnitActiveSec=5min

AccuracySec=1s

RandomizedDelaySec=30s

Persistent=true

Install

WantedBy=timers.target

~~

3. 启用服务

~~

sudo systemctl daemon-reload

sudo systemctl enable matrix-ddns.service matrix-ddns.timer

sudo systemctl start matrix-ddns.timer

查看服务状态

sudo systemctl status matrix-ddns.timer

sudo systemctl status matrix-ddns.service

查看日志

sudo journalctl -u matrix-ddns.service -f

~~

4. 创建监控脚本

~~

nano /opt/matrix-ddns/scripts/monitor.sh

~~

~~

#!/bin/bash

Matrix服务监控脚本

LOG_FILE="/opt/matrix-ddns/logs/monitor-$(date +%Y%m%d).log"

ALERT_EMAIL="your-email@example.com"

检查服务状态

check_service() {

local service=$1

if ! systemctl is-active --quiet service;thenecho"[service; then echo "[service;thenecho"[(date '+%Y-%m-%d %H:%M:%S')] 警告: 服务 service 未运行" \>\> LOG_FILE

systemctl restart $service

return 1

fi

return 0

}

检查端口

check_port() {

local port=$1

if ! nc -z localhost KaTeX parse error: Expected 'EOF', got '&' at position 19: ...t >/dev/null 2>&̲1; then ...(date '+%Y-%m-%d %H:%M:%S')] 警告: 端口 port 未监听" \>\> LOG_FILE

return 1

fi

return 0

}

检查DNS解析

check_dns() {

local domain="matrix.your-domain.com"

local resolved_ip=$(dig +short domain@8.8.8.8)localcurrentip=domain @8.8.8.8) local current_ip=domain@8.8.8.8)localcurrentip=(curl -s http://ip.3322.net)

复制代码
if [ "$resolved_ip" != "$current_ip" ]; then
    echo "[$(date '+%Y-%m-d %H:%M:%S')] 警告: DNS解析不匹配" >> $LOG_FILE
    echo "  解析IP: $resolved_ip" >> $LOG_FILE
    echo "  当前IP: $current_ip" >> $LOG_FILE
    return 1
fi
return 0

}

执行检查

echo "[(date '+%Y-%m-%d %H:%M:%S')\] 开始服务检查..." \>\> LOG_FILE

检查关键服务

check_service "matrix-synapse"

check_service "nginx"

check_service "matrix-ddns.service"

检查关键端口

check_port 443

check_port 8008

检查DNS

check_dns

echo "[(date '+%Y-%m-%d %H:%M:%S')\] 服务检查完成" \>\> LOG_FILE

~~

🔧 第七步:安装Element Web客户端

1. 下载Element Web

~~

创建Element目录

sudo mkdir -p /var/www/element

cd /var/www/element

下载最新版Element

sudo wget https://github.com/vector-im/element-web/releases/latest/download/element-v$(curl -s https://api.github.com/repos/vector-im/element-web/releases/latest | jq -r '.tag_name' | cut -c2-).tar.gz

解压

sudo tar -xzf element-v*.tar.gz

sudo mv element-/ .

sudo rm -rf element-* element-v*.tar.gz

~~

2. 配置Element

~~

复制配置文件

sudo cp config.sample.json config.json

编辑配置

sudo nano config.json

~~

修改配置:

~~

{

"default_server_config": {

"m.homeserver": {

"base_url": "https://matrix.your-domain.com",

"server_name": "your-domain.com"

},

"m.identity_server": {

"base_url": "https://vector.im"

}

},

"brand": "My Matrix Server",

"integrations_ui_url": "https://scalar.vector.im/",

"integrations_rest_url": "https://scalar.vector.im/api",

"default_country_code": "CN",

"show_labs_settings": true,

"features": {

"feature_pinning": true,

"feature_latex_maths": true

}

}

~~

3. 配置Nginx支持Element

~~

sudo nano /etc/nginx/sites-available/element

~~

~~

server {

listen 443 ssl http2;

server_name chat.your-domain.com;

复制代码
ssl_certificate /etc/letsencrypt/live/matrix.your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/matrix.your-domain.com/privkey.pem;

root /var/www/element;
index index.html;

location / {
    try_files $uri $uri/ =404;
}

# 禁用缓存index.html
location = /index.html {
    add_header Cache-Control "no-cache, no-store, must-revalidate";
}

}

~~

~~

启用配置

sudo ln -s /etc/nginx/sites-available/element /etc/nginx/sites-enabled/

sudo nginx -t

sudo systemctl reload nginx

~~

📊 第八步:测试和验证

1. 测试Matrix服务

~~

测试Synapse服务(如果使用源码安装,端口可能不同)

curl http://localhost:8008/_matrix/client/versions

测试Federation

curl https://matrix.your-domain.com/.well-known/matrix/server

测试SSL证书

curl -I https://matrix.your-domain.com

测试Element Web

curl -I https://chat.your-domain.com

~~

2. 测试DDNS功能

~~

手动运行DDNS脚本

/opt/matrix-ddns/scripts/ddns-update.sh

查看DNS解析

nslookup ddns.your-domain.com

nslookup matrix.your-domain.com

dig matrix.your-domain.com +short

从外部测试

nslookup matrix.your-domain.com 8.8.8.8

~~

3. 创建测试用户

~~

通过命令行创建测试用户(如果使用源码安装)

cd /opt/matrix-synapse

source synapse-env/bin/activate

register_new_matrix_user -c homeserver.yaml http://localhost:8008

或通过管理API

curl -X POST

-H "Authorization: Bearer YOUR_ADMIN_TOKEN"

-d '{"username":"testuser", "password":"StrongPass123", "admin":false}'

https://matrix.your-domain.com/_matrix/client/r0/register

~~

🛡️ 第九步:安全加固

1. 防火墙配置

~~

安装UFW

sudo apt install -y ufw

配置规则

sudo ufw default deny incoming

sudo ufw default allow outgoing

sudo ufw allow ssh

sudo ufw allow 80/tcp

sudo ufw allow 443/tcp

sudo ufw allow 8448/tcp # Matrix Federation端口

sudo ufw enable

查看状态

sudo ufw status verbose

~~

2. 更新和自动化安全

~~

创建自动更新脚本

sudo nano /etc/cron.weekly/auto-update.sh

~~

~~

#!/bin/bash

apt update

apt upgrade -y

apt autoremove -y

systemctl restart matrix-synapse nginx

~~

3. 备份脚本

~~

nano /opt/matrix-ddns/scripts/backup.sh

~~

~~

#!/bin/bash

Matrix服务器备份脚本

BACKUP_DIR="/opt/matrix-ddns/backup"

DATE=$(date +%Y%m%d_%H%M%S)

创建备份目录

mkdir -p BACKUPDIR/BACKUP_DIR/BACKUPDIR/DATE

备份Synapse配置和数据

sudo tar -czf BACKUPDIR/BACKUP_DIR/BACKUPDIR/DATE/matrix-synapse.tar.gz

/etc/matrix-synapse

/var/lib/matrix-synapse

备份Nginx配置

sudo tar -czf BACKUPDIR/BACKUP_DIR/BACKUPDIR/DATE/nginx.tar.gz /etc/nginx

备份DDNS配置

cp -r /opt/matrix-ddns/config BACKUPDIR/BACKUP_DIR/BACKUPDIR/DATE/

备份SSL证书

sudo tar -czf BACKUPDIR/BACKUP_DIR/BACKUPDIR/DATE/ssl.tar.gz /etc/letsencrypt

清理旧备份(保留最近30天)

find $BACKUP_DIR -type d -mtime +30 -exec rm -rf {} ;

echo "备份完成: BACKUPDIR/BACKUP_DIR/BACKUPDIR/DATE"

~~

📝 第十步:日常运维命令

服务管理命令

~~

Matrix服务

sudo systemctl status matrix-synapse

sudo systemctl restart matrix-synapse

sudo journalctl -u matrix-synapse -f

DDNS服务

sudo systemctl status matrix-ddns.service

sudo systemctl restart matrix-ddns.service

sudo journalctl -u matrix-ddns.service -f

Nginx服务

sudo systemctl status nginx

sudo nginx -t

sudo systemctl reload nginx

查看所有服务状态

sudo systemctl list-units --type=service | grep -E "(matrix|nginx)"

~~

日志查看

~~

Matrix日志

sudo tail -f /var/log/matrix-synapse/homeserver.log

DDNS日志

tail -f /opt/matrix-ddns/logs/ddns-$(date +%Y%m%d).log

Nginx日志

sudo tail -f /var/log/nginx/access.log

sudo tail -f /var/log/nginx/error.log

系统日志

sudo tail -f /var/log/syslog

~~

监控命令

~~

检查服务状态

/opt/matrix-ddns/scripts/monitor.sh

检查磁盘空间

df -h

检查内存使用

free -h

检查进程

htop

~~

🔄 第十一步:迁移到家庭宽带环境

迁移前准备

~~

1. 备份所有数据

/opt/matrix-ddns/scripts/backup.sh

2. TTL已经是600,无法再降低

3. 通知用户可能的短暂中断(最长10分钟)

4. 准备家庭宽带环境

- 申请动态公网IP(联系运营商)

- 配置路由器端口转发:

443 → 服务器内网IP:443

8448 → 服务器内网IP:8008

~~

迁移步骤

~~

1. 在新位置启动服务器

2. 恢复备份数据

sudo tar -xzf backup/matrix-synapse.tar.gz -C /

sudo tar -xzf backup/nginx.tar.gz -C /

3. 启动DDNS服务

sudo systemctl start matrix-ddns.timer

4. 验证DNS更新(由于TTL=600,可能需要等待)

watch -n 10 'dig matrix.your-domain.com +short'

5. 测试服务

curl https://matrix.your-domain.com/_matrix/client/versions

~~

📈 性能优化建议

1. 数据库优化(从SQLite迁移到PostgreSQL)

~~

安装PostgreSQL

sudo apt install -y postgresql postgresql-contrib

创建数据库和用户

sudo -u postgres psql

CREATE USER synapse WITH PASSWORD 'StrongPassword123';

CREATE DATABASE synapse OWNER synapse ENCODING 'UTF8' LC_COLLATE 'C' LC_CTYPE 'C' template=template0;

\q

修改Synapse配置

sudo nano /etc/matrix-synapse/homeserver.yaml

~~

~~

database:

name: psycopg2

args:

user: synapse

password: StrongPassword123

database: synapse

host: localhost

cp_min: 5

cp_max: 10

~~

~~

2. 启用媒体压缩

~~

在homeserver.yaml中添加

enable_media_repo: true

media_store_path: /var/lib/matrix-synapse/media

uploads_path: /var/lib/matrix-synapse/uploads

max_upload_size: "50M"

~~

3. 调整内存限制

~~

编辑Synapse服务文件

sudo nano /etc/systemd/system/matrix-synapse.service.d/override.conf

~~

~~

Service

LimitNOFILE=65535

LimitMEMLOCK=infinity

~~

~~

🚨 故障排除指南

常见问题1:DDNS不更新

~~

检查步骤:

  1. 查看日志:tail -f /opt/matrix-ddns/logs/ddns-*.log
  2. 手动运行:/opt/matrix-ddns/scripts/ddns-update.sh
  3. 检查API密钥:tccli dnspod DescribeDomainList
  4. 检查网络:curl http://ip.3322.net
  5. 检查DNS解析:dig ddns.your-domain.com
    ~~

常见问题2:Matrix服务无法连接

~~

检查步骤:

  1. 检查服务状态:sudo systemctl status matrix-synapse
  2. 检查端口监听:sudo netstat -tlnp | grep 8008
  3. 检查防火墙:sudo ufw status
  4. 检查Nginx:sudo nginx -t
  5. 查看错误日志:sudo journalctl -u matrix-synapse --no-pager | tail -50
  6. 检查report_stats配置:确保homeserver.yaml中有 report_stats: false 或 true
  7. 直接运行测试:cd /opt/matrix-synapse && source synapse-env/bin/activate && python -m synapse.app.homeserver --config-path homeserver.yaml
    ~~

常见问题3:SSL证书问题

~~

检查步骤:

  1. 证书是否过期:sudo certbot certificates
  2. 自动续期测试:sudo certbot renew --dry-run
  3. Nginx配置:检查ssl_certificate路径
  4. 证书权限:ls -la /etc/letsencrypt/live/
    ~~

📚 维护文档

定期维护任务

~~

每周任务:

  1. 检查服务状态:/opt/matrix-ddns/scripts/monitor.sh
  2. 清理日志:find /opt/matrix-synapse -name "*.log" -mtime +30 -delete
  3. 更新系统:sudo apt update && sudo apt upgrade -y
  4. 备份数据:/opt/matrix-ddns/scripts/backup.sh
  5. 更新Python包:cd /opt/matrix-synapse && source synapse-env/bin/activate && pip install --upgrade matrix-synapse

每月任务:

  1. 检查磁盘使用:df -h
  2. 检查证书有效期:sudo certbot certificates
  3. 重启服务:sudo systemctl restart matrix-synapse nginx
  4. 安全扫描:sudo apt install unattended-upgrades
  5. 清理Python缓存:pip cache purge
    ~~

应急响应流程

  1. 服务不可用

    • 检查DDNS日志
    • 重启相关服务:sudo systemctl restart matrix-synapse nginx
    • 检查网络连接
    • 查看Matrix日志:sudo journalctl -u matrix-synapse --no-pager | tail -100
  2. 数据丢失

    • 从备份恢复
    • 检查数据库状态
    • 联系技术支持
  3. 安全事件

    • 立即断开网络
    • 分析日志
    • 重置密码和密钥
    • 恢复干净备份
    • 更新所有软件包
      ~~

🎯 总结

已完成部署

  • ✅ 腾讯云域名 + DDNS动态解析(使用ddns二级域名)
相关推荐
k_cik_ci2 小时前
什么是负载均衡?
服务器·网络·负载均衡
m0_737302582 小时前
云服务器:从技术革新到产业重构的进化之路
服务器
铁蛋AI编程实战2 小时前
ClawdBot(Moltbot)腾讯云一键部署教程(新手零失败)
云计算·腾讯云
阿钱真强道2 小时前
10 jetlinks-mqtt-直连设备-属性-读取-返回
linux·服务器·网络·鸿蒙
AZ996ZA2 小时前
自学linux第十九天:Cron定时任务完全指南:从入门到排错
linux·运维·服务器
fiveym2 小时前
服务器硬件管控接口学习笔记:IPMI与Redfish深度解析+实操调研
服务器
夏旭泽2 小时前
计算机网络-网络层
服务器·网络·计算机网络
_周游2 小时前
Java8 API文档搜索引擎_优化构建索引速度
java·服务器·搜索引擎·intellij-idea
杜子不疼.2 小时前
内网监控工具翻身!Uptime Kuma+cpolar 实现远程运维自由
linux·运维·服务器