多服务器部署
跨多台服务器部署服务,轻松实现弹性扩展
多服务器部署
把服务分布到多台服务器上,让你的应用更强大、更可靠。这篇指南会告诉你怎么添加远程服务器、合理分配负载,以及一些多服务器架构的实用技巧。
为什么要多服务器?
Senate 支持部署到:
- 本地服务器:运行 Senate 的那台服务器
- 远程服务器:任何能通过 SSH 连接的服务器
多服务器架构能带来这些好处:
- 弹性扩展:流量大了就加服务器分担压力
- 环境隔离:开发、测试、生产各用各的服务器,互不干扰
- 高可用:一台挂了,其他的还能顶上
- 就近部署:把服务部署在离用户更近的地方,访问更快
准备工作
添加远程服务器之前,先确认以下几点:
每台远程服务器都需要配置好 SSH 访问权限,Docker 可以稍后通过 Senate 安装。
远程服务器要求
- Linux 服务器(Ubuntu、Debian、CentOS 等主流发行版都行)
- SSH 可访问(默认 22 端口,或者你自己配的端口)
- 有 Docker 权限的用户账号
安装 Docker
添加远程服务器时,如果 Senate 检测到该服务器还没装 Docker,会在控制台提示你一键安装。点一下按钮,Senate 就会自动帮你搞定 Docker 的安装,省心省力。
添加远程服务器
进入服务器管理页面
在 Senate 控制台侧边栏点击 Machines。
点击添加服务器
填写连接信息:
| 字段 | 说明 |
|---|---|
| Name | 给服务器起个好记的名字(比如 生产服务器-1) |
| Host | IP 地址或域名 |
| Port | SSH 端口(默认 22) |
| User | SSH 登录用户名 |

选择认证方式
推荐用 SSH 密钥,比密码更安全。也可以用密码认证,看你方便。
生成 SSH 密钥(如果用密钥认证)
点击「生成密钥」,Senate 会帮你创建一对密钥。把公钥复制下来。
把公钥添加到远程服务器
# 登录到远程服务器执行
mkdir -p ~/.ssh
echo "ssh-ed25519 AAAA... senate-generated" >> ~/.ssh/authorized_keys测试连接并保存
点击「添加服务器」,Senate 会测试连接,成功后自动保存。
常见架构模式
模式一:单应用水平扩展
同一个应用部署到多台服务器,用负载均衡分发流量:
┌─────────────────────────────────────────┐
│ 负载均衡器 │
└─────────────────┬───────────────────────┘
│
┌─────────────┼─────────────┐
▼ ▼ ▼
┌────────┐ ┌────────┐ ┌────────┐
│服务器 1│ │服务器 2│ │服务器 3│
│ App │ │ App │ │ App │
└────────┘ └────────┘ └────────┘模式二:微服务分层部署
不同类型的服务放到不同服务器上,各司其职:
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 服务器 1 │ │ 服务器 2 │ │ 服务器 3 │
│ 前端服务 │ │ 后端 API │ │ 数据库 │
│ 网关 │ │ 后台任务 │ │ 缓存 │
└──────────────┘ └──────────────┘ └──────────────┘模式三:按环境分服务器
开发、测试、生产环境各用独立的服务器,互不影响:
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 开发服务器 │ │ 测试服务器 │ │ 生产服务器 │
│ 全套服务 │ │ 全套服务 │ │ 全套服务 │
│ (develop) │ │ (staging) │ │ (main) │
└──────────────┘ └──────────────┘ └──────────────┘部署服务到指定服务器
创建服务时选择
- 在控制台点击目标服务器
- 点击侧边栏的「添加服务」
- 创建服务时就会自动绑定到这台服务器
服务会专门部署到你选的那台服务器上。
服务间通信
通过公网域名
最简单的方式,服务之间通过各自的域名互相调用:
// 服务器 1 上的前端调用服务器 2 上的 API
const response = await fetch('https://api.example.com/data');私有网络
即将推出:内置 WireGuard 支持,让你的服务器之间建立安全的私有网络。到时候服务之间可以通过内网 IP 直接通信,既安全又快速,不用暴露到公网。
常见问题排查
连不上远程服务器
- 先手动试试能不能 SSH 上去:
ssh user@host - 检查防火墙有没有放行 22 端口
- 确认公钥已经加到 authorized_keys 里了
- 看看远程服务器上 Docker 是不是在正常运行