保姆级教程:从零开始自建 SimpleX Chat SMP 服务器

前言:为什么要自建 SimpleX 服务?

SimpleX Chat 是目前世界上唯一一款没有用户 ID(User IDs)的聊天软件。它通过临时、单向的加密队列传输消息,彻底消除了元数据泄露的风险。

虽然官方提供了免费的公共服务器,但对于追求极致隐私的用户、技术极客或希望拥有完全数据掌控权的团队来说,自建 SMP (SimpleX Messaging Protocol) 服务器是最佳选择。

自建的好处:

  1. 数据主权:消息队列存储在自己的服务器上(虽然是加密的)。
  2. 网络抗性:在特定网络环境下,自建节点往往比公共节点连接更稳定。
  3. 社区贡献:为去中心化网络增加一个节点,提升整体健壮性。

本教程将手把手教你使用 Docker Compose 快速部署一个支持自动 HTTPS 的 SimpleX SMP 服务器。


一、 准备工作

在开始之前,你需要准备:

  1. 一台 Linux VPS
    • 推荐配置:1核 CPU,1GB 内存即可(SimpleX 非常轻量)。
    • 系统:Debian 11/12 或 Ubuntu 20.04+。
  2. 一个域名
    • 解析(A记录)指向你的 VPS IP 地址。
    • 例如:smp.yourdomain.com
  3. 基础知识
    • 会使用 SSH 连接服务器。
    • 了解基本的 Linux 命令。

二、 环境搭建

为了简化管理,我们采用 Docker + Docker Compose 的部署方式。

1. 安装 Docker 和 Docker Compose

如果你已经是 Docker 用户,请跳过此步。如果不是,可以使用官方的一键安装脚本(适用于 Debian/Ubuntu):

1
curl -fsSL https://get.docker.com | bash

安装完成后,启动 Docker 并设置开机自启:

1
systemctl enable --now docker

三、 部署 SMP 服务器

我们将部署一套包含 Caddy(用于自动申请 SSL 证书)和 SMP Server 的组合。

1. 创建工作目录

1
2
mkdir -p ~/simplex-smp
cd ~/simplex-smp

2. 创建配置文件 (docker-compose.yml)

使用你喜欢的编辑器(如 nanovim)创建 docker-compose.yml 文件:

1
nano docker-compose.yml

填入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
name: simplex-smp
services:
# Caddy 用于自动管理 HTTPS 证书并反向代理流量
caddy:
image: caddy:2.7.6-alpine
hostname: caddy
cap_add:
- NET_ADMIN
environment:
# 这里引用 .env 文件中的 ADDR 变量
ADDR: ${ADDR:?Please specify the domain}
volumes:
- ./caddy_conf:/etc/caddy
- caddy_data:/data
- caddy_config:/config
ports:
- 80:80 # HTTP 端口,用于 ACME 验证
restart: unless-stopped
healthcheck:
test: "test -d /data/caddy/certificates/${CERT_PATH:-acme-v02.api.letsencrypt.org-directory}/${ADDR} || exit 1"
interval: 5s
retries: 60

# SimpleX SMP 核心服务
smp-server:
image: simplexchat/smp-server:latest
depends_on:
caddy:
condition: service_healthy
environment:
ADDR: ${ADDR:?Please specify the domain}
# 设置连接密码,留空则允许任何人连接
PASS: ${PASS:-}
volumes:
- ./smp_configs:/etc/opt/simplex
- ./smp_state:/var/opt/simplex
# 挂载 Caddy 的证书卷,以便 SMP 服务使用
- type: volume
source: caddy_data
target: /certificates
volume:
subpath: "caddy/certificates/${CERT_PATH:-acme-v02.api.letsencrypt.org-directory}/${ADDR}"
ports:
- 443:443 # WSS 协议端口
- 5223:5223 # SMP 协议端口 (必须开放)
restart: unless-stopped

volumes:
caddy_data:
caddy_config:

3. 配置环境变量 (.env)

创建 .env 文件来存储你的配置信息:

1
nano .env

填入以下内容(请修改为你的实际信息):

1
2
3
4
5
# 将此处替换为你解析好的域名
ADDR=smp.yourdomain.com

# (可选) 设置连接密码,增加安全性。如果不设置,请删除此行或留空
# PASS=MySecretPassword123

注意

  1. 端口 80, 443, 5223 必须在服务器防火墙/安全组中放行。
  2. 5223 是 SimpleX 核心协议端口,必须暴露。

四、 启动与验证

1. 启动服务

~/simplex-smp 目录下执行:

1
docker compose up -d

2. 检查运行状态

查看容器日志,确认服务是否正常启动,并获取服务器指纹 (Fingerprint)

1
docker compose logs -f smp-server

如果一切正常,你不会看到明显的错误(Error)。Caddy 会自动为你申请 SSL 证书。

3. 获取服务器地址

你的服务器地址格式如下:

  • 无密码模式smp://<指纹>@<域名>
  • 有密码模式smp://<指纹>:<密码>@<域名>

如何查找指纹?
指纹通常位于容器内的配置文件中。你可以通过以下命令直接查看:

1
docker compose exec smp-server cat /etc/opt/simplex/fingerprint

假设输出的指纹是 8kOh...5A,域名是 smp.example.com,密码是 123,那么你在客户端填写的地址就是:
smp://8kOh...5A:123@smp.example.com


五、 客户端配置

现在拿出你的手机(Android 或 iOS),打开 SimpleX Chat

  1. 进入 Settings (设置) -> Network & Servers (网络与服务器)
  2. 点击 SMP servers (SMP 服务器)
  3. 点击右上角的菜单或“Add server”按钮,选择 Add server address (添加服务器地址)
  4. 输入上一步获得的完整 smp:// 地址。
  5. 开启该服务器的开关。

进阶技巧:
如果你希望完全通过自己的服务器传输消息,可以在 SMP 服务器列表中,关闭其他官方默认服务器,仅保留你自建的节点。


六、 维护与更新

备份

重要数据存储在 smp_configssmp_state 目录中。建议定期备份整个 ~/simplex-smp 目录。

更新

SimpleX 开发活跃,更新命令如下:

1
2
3
cd ~/simplex-smp
docker compose pull
docker compose up -d

推荐阅读与资源

为了保持技术敏感度,推荐关注以下领域的博客和资源(排名不分先后):

  1. SimpleX Chat 官方博客 (simplex.chat/blog):一手掌握协议更新和隐私技术动态。
  2. Privacy Guides (privacyguides.org):权威的隐私工具推荐和科普,适合入门到进阶。
  3. The New Oil:通俗易懂的隐私保护指南,适合普通用户。
  4. Self-Hosted (Reddit/Lemmy):全球最大的自建服务社区,可以发现更多好玩的 Docker 项目。

结语:
自建 SimpleX 服务是迈向数字主权的重要一步。虽然过程涉及命令行,但一旦部署成功,你就拥有了一个完全属于自己、无法被审查的通信基站。

祝你部署顺利,享受真正的隐私通信!