节点在线、应用在线、配置在线使用令牌查询
|
# PUB 远程å‘布 - 架构设计
> **版本**:v3.8 | **æ›´æ–°æ—¶é—´**:2026-07-29 | **文档状æ€**:最新
> 对应模å—:PUB 远程å‘布
> æ•°æ®æ¨¡åž‹å®šä¹‰ï¼š[`Stardust.Data/Deployment/Model.xml`](/NewLife/Stardust/Blob/master/Doc/../Stardust.Data/Deployment/Model.xml)
---
## ä¸€ã€æ¦‚è¿°
星尘å‘布系统是分布å¼åº”用部署管ç†å¹³å°ï¼Œé‡‡ç”¨**é›†ä¸æŽ§åˆ¶ã€åˆ†å¸ƒå¼æ‰§è¡Œ**æž¶æž„ã€‚ç”¨æˆ·åœ¨ç®¡ç†æŽ§åˆ¶å°é…置部署集ã€ä¸Šä¼ 版本ã€å…³è”节点,点击å‘å¸ƒåŽ StarAgent åœ¨ç›®æ ‡èŠ‚ç‚¹ä¸Šæ‰§è¡Œä¸‹è½½ã€è§£åŽ‹ã€å¯åœå’Œå®ˆæŠ¤ã€‚
### æ ¸å¿ƒç‰¹æ€§
| 特性 | 说明 |
|------|------|
| å¤šç‰ˆæœ¬ç®¡ç† | 支æŒå¤šå¹³å°ï¼ˆOS/Arch/TFM)自动匹é…,一键回滚 |
| 分布å¼éƒ¨ç½² | å•应用多节点部署,滚动å‘布 |
| å››ç§éƒ¨ç½²æ¨¡å¼ | Standard / Shadow / Hosted / Task |
| 进程守护 | 崩溃自动é‡å¯ï¼Œå†…å˜è¶…é™é‡å¯ï¼Œæ–‡ä»¶å˜åŒ–é‡å¯ |
| SSL è¯ä¹¦ç®¡ç† | 按域å自动匹é…,支æŒå¤šæ ¼å¼ï¼Œè‡ªåŠ¨ç»æœŸ |
| CI/CD æµæ°´çº¿ | Webhook è§¦å‘ â†’ 编译 → 打包 → ä¸Šä¼ â†’ 部署 |
### 设计原则
1. **ç®€æ´æ€§** — å—æ®µå’Œå…³è”最å°åŒ–,æ“作路径最çŸ
2. **自动化** — è¯ä¹¦è‡ªåŠ¨åŒ¹é…ã€ç‰ˆæœ¬è‡ªåŠ¨é€‰æ‹©ã€æµæ°´çº¿è‡ªåŠ¨è§¦å‘
3. **çµæ´»æ€§** — 节点级é…ç½®å¯è¦†ç›–部署集é…ç½®
4. **å¯é 性** — 进程守护ã€å†…å˜é™åˆ¶ã€æ–‡ä»¶ç›‘控ã€å›žæ»šæœºåˆ¶
---
## 二ã€ç³»ç»Ÿæ‹“扑
```
┌──────────────────────────────────────────────────────────────â”
│ Stardust.Webï¼ˆç®¡ç†æŽ§åˆ¶å°ï¼‰ │
│ AppDeploy │ AppDeployNode │ AppDeployVersion │ Pipeline │
└──────────────────────────┬───────────────────────────────────┘
│ HTTP API (6600)
┌──────────────────────────┴───────────────────────────────────â”
│ Stardust.Server(æœåŠ¡ç«¯ï¼‰ │
│ │
│ ┌─ 接å£å±‚ ──────────────────────────────────────────────┠│
│ │ DeployController │ NodeController │ WebSocket │ │
│ └───────────────────────────────────────────────────────┘ │
│ ┌─ æœåС层 ──────────────────────────────────────────────┠│
│ │ DeployService(版本匹é…/è¯ä¹¦åŒ¹é…/指令下å‘) │ │
│ │ NodeService(节点管ç†/心跳监控) │ │
│ │ CertRenewJob(è¯ä¹¦è‡ªåŠ¨ç»æœŸï¼‰ │ │
│ └───────────────────────────────────────────────────────┘ │
│ ┌─ æ•°æ®å±‚ ──────────────────────────────────────────────┠│
│ │ 10 å¼ è¡¨ï¼Œå…¨éƒ¨å®šä¹‰åœ¨ Model.xml ä¸ â”‚ │
│ │ æ ¸å¿ƒï¼šAppDeploy / AppDeployNode / AppDeployVersion │ │
│ └───────────────────────────────────────────────────────┘ │
└──────────────────────────┬───────────────────────────────────┘
│ HTTP + WebSocket
┌──────────────────┼──────────────────â”
â–¼ â–¼ â–¼
┌─────────┠┌─────────┠┌─────────â”
│StarAgent│ │StarAgent│ │StarAgent│
│ Node A │ │ Node B │ │ Node C │
│x64/net8 │ │ARM/net10│ │x64/net10│
└────┬────┘ └────┬────┘ └────┬────┘
│ │ │
┌────┴────┠┌────┴────┠┌────┴────â”
│ MyApp │ │ MyApp │ │ MyApp │
│ (SDK) │ │ (SDK) │ │ (SDK) │
└─────────┘ └─────────┘ └─────────┘
```
### å·¥ç¨‹æ˜ å°„
| 工程 | 角色 |
|------|------|
| `Stardust.Data` | æ•°æ®å±‚,Model.xml 统一定义表结构 |
| `Stardust.Server` | æœåŠ¡ç«¯ API,版本匹é…ã€è¯ä¹¦åŒ¹é…ã€æŒ‡ä»¤ä¸‹å‘ |
| `Stardust.Web` | Cube 管ç†ç•Œé¢ï¼ŒCRUD 控制器 + 视图 |
| `Stardust`ï¼ˆæ ¸å¿ƒåº“ï¼‰ | `ServiceManager` + 部署ç–ç•¥ + `DeployInfo` 模型 |
| `StarAgent` | Windows æœåŠ¡ / Linux systemd,执行部署 |
| `DeployAgent` | 编译节点,拉代ç → 编译 → 打包 → ä¸Šä¼ |
---
## ä¸‰ã€æ ¸å¿ƒæ¦‚念
### 3.1 实体关系
```
AppDeploy(部署集) SslCertificate(è¯ä¹¦ï¼‰
├── AppDeployNode(1:N) └── 通过 Domain åŒ¹é… AppDeploy.Urls
│ └── Nodeï¼ˆç›®æ ‡æœºå™¨ï¼‰
├── AppDeployVersion(1:N) AppPipelineï¼ˆæµæ°´çº¿ï¼‰
│ └── Attachment(zip包) ├── AppPipelineRun(1:N)
├── AppDeployHistory(1:N) │ └── AppPipelineStep(1:N)
└── AppBuildNode(1:N) └── BuildNode → DeployNodes
└── Node(编译机器)
```
> è¡¨ç»“æž„å®šä¹‰è§ [`Model.xml`](/NewLife/Stardust/Blob/master/Doc/../Stardust.Data/Deployment/Model.xml),执行 `xcode` 命令生æˆå®žä½“类。
### 3.2 部署集(AppDeploy)
应用的å¯éƒ¨ç½²å•å…ƒã€‚ä¸€ä¸ªåº”ç”¨å¯æœ‰å¤šä¸ªéƒ¨ç½²é›†ï¼ˆå¦‚ arm 版和 x64 版),æ¯ä¸ªéƒ¨ç½²é›†å…³è”一组节点和多个版本。
æ ¸å¿ƒé…置:å¯åŠ¨æ–‡ä»¶åã€å‚æ•°ã€å·¥ä½œç›®å½•ã€çŽ¯å¢ƒå˜é‡ã€æœ€å¤§å†…å˜ã€éƒ¨ç½²æ¨¡å¼ã€‚
### 3.3 部署版本(AppDeployVersion)
æ¯ä¸ªéƒ¨ç½²é›†å¯ä¸Šä¼ 多个版本(zip åŒ…ï¼‰ã€‚ç‰ˆæœ¬æ ‡æ³¨ OS / Arch / TargetFramework,æœåŠ¡ç«¯æ ¹æ®ç›®æ ‡èŠ‚ç‚¹å¹³å°è‡ªåŠ¨é€‰æ‹©æœ€ä½³åŒ¹é…版本。
### 3.4 部署节点(AppDeployNode)
éƒ¨ç½²é›†ä¸Žç›®æ ‡æœºå™¨çš„å…³è”。节点级å¯è¦†ç›–部署集的å¯åЍé…置(FileName / Arguments / WorkingDirectory ç‰ï¼‰ã€‚`Delay` å—æ®µæ”¯æŒæ»šåЍå‘布。
### 3.5 SSL è¯ä¹¦ï¼ˆSslCertificate)
按域å管ç†è¯ä¹¦ã€‚部署时通过 `AppDeploy.Urls` 自动æå–域åï¼ŒåŒ¹é…æœ‰æ•ˆæœŸå†…çš„è¯ä¹¦ï¼Œæ ¹æ®èŠ‚ç‚¹ OS 选择 Pfx(Windows)或 Pem(Linuxï¼‰æ ¼å¼ã€‚
### 3.6 æµæ°´çº¿ï¼ˆAppPipeline)
CI/CD 自动化:Webhook è§¦å‘ â†’ 编译节点拉代ç 编译打包 → ä¸Šä¼ ç‰ˆæœ¬ → 自动å‘å¸ƒåˆ°ç›®æ ‡èŠ‚ç‚¹ã€‚
---
## å››ã€éƒ¨ç½²æ¨¡å¼
| æ¨¡å¼ | 值 | 行为 | 适用场景 |
|------|-----|------|---------|
| **Standard** | 10 | 解压到工作目录,直接è¿è¡Œ | 大多数应用(推è) |
| **Shadow** | 11 | 解压到影å目录,é…ç½®ä¿ç•™åœ¨å·¥ä½œç›®å½• | çƒæ›´æ–°ã€é¢‘ç¹å‘布 |
| **Hosted** | 12 | 仅解压,ä¸å¯åŠ¨è¿›ç¨‹ | IIS / Nginx 托管 |
| **Task** | 13 | è¿è¡Œä¸€æ¬¡åŽå®Œæˆï¼Œä¸å®ˆæŠ¤ | è„šæœ¬ã€æ•°æ®åº“è¿ç§» |
**兼容性**:旧版模å¼å€¼ 0-4 è¢«æ–°ç‰ˆå®¢æˆ·ç«¯è‡ªåŠ¨æ˜ å°„ä¸º 10-13,新旧客户端共å˜å¹³æ»‘过渡。
ç–略实现:
- `StandardDeployStrategy` / `ShadowDeployStrategy` / `HostedStrategy` / `TaskStrategy`
- ç»Ÿä¸€æŽ¥å£ `IDeployStrategy`,`ServiceController` 通过工厂创建
---
## 五ã€ç‰ˆæœ¬åŒ¹é…机制
`DeployService.GetDeployVersion()` æ ¹æ®èŠ‚ç‚¹å¹³å°ä»Žç‰ˆæœ¬åˆ—表ä¸ç›é€‰ï¼š
```
1. å– Enable=true 的版本,按 ID 倒åºï¼ˆæœ€æ–°ä¼˜å…ˆï¼‰
2. 便¬¡åŒ¹é…:OS → Arch → TargetFramework
3. OS/Arch=0 或 TFM ä¸ºç©ºè¡¨ç¤ºé€šç”¨ï¼ŒåŒ¹é…æ‰€æœ‰èŠ‚ç‚¹
4. TFM å‘上兼容:net8.0 å¯è¿è¡Œåœ¨ net9.0/net10.0 节点
```
**回滚**:ç¦ç”¨é—®é¢˜ç‰ˆæœ¬ → å‘布 → ç³»ç»Ÿè‡ªåŠ¨é€‰å–æ¬¡æ–°çš„匹é…版本。
---
## å…ã€å‘布æµç¨‹
```
用户在 AppDeployNode 列表点击"å‘布"
│
â–¼
Web DeployService.Control("install")
├── 设置 deployNode.Enable = true
└── SendNodeCommandAsync("deploy/install", {Id, DeployName, AppName})
│
â–¼ WebSocket 实时推é€ï¼ŒHTTP 轮询兜底
│
StarAgent.ServiceManager.OnInstall()
├── PullService() → GET /node/getDeploy → èŽ·å– DeployInfo
│ └── Server DeployService.BuildDeployInfo()
│ ├── GetDeployVersion() å¹³å°åŒ¹é…
│ ├── 查找 SSL è¯ä¹¦ï¼ˆDomain 匹é…)
│ └── 构建 DeployInfo {Url, Hash, Service, ...}
│
├── Download(info, svc) → 下载 zip → MD5 æ ¡éªŒ → 覆盖原文件
├── ServiceController.Start()
│ └── IDeployStrategy.Extract() → 解压到工作目录/å½±å目录
│ └── IDeployStrategy.Execute() → å¯åŠ¨è¿›ç¨‹
│
└── 守护:ServiceManager.DoWork() 定时(30s)
├── è¿›ç¨‹å˜æ´»æ£€æŸ¥
├── 内å˜è¶…陿£€æŸ¥
├── 文件å˜åŒ–检查(ReloadOnChange)
└── 上报心跳
```
---
## 七ã€å®¢æˆ·ç«¯æž¶æž„(StarAgent)
### 组件关系
```
ServiceManager(总管)
├── 注册指令:"deploy/install" "deploy/start" "deploy/stop" ...
├── 定时器 DoWork():å¥åº·æ£€æŸ¥ + é…置拉å–
└── 管ç†å¤šä¸ª ServiceController(æ¯ä¸ªåº”用一个)
│
└── ServiceController
├── IDeployStrategy(解压 + å¯åŠ¨ï¼‰
├── è¿›ç¨‹ç›‘æŽ§ï¼ˆå˜æ´»/内å˜/文件å˜åŒ–)
└── 事件上报(EventProvider)
```
### 指令处ç†
| 指令 | å¤„ç† |
|------|------|
| `deploy/install` | PullService → Download → Strategy.Extract → Strategy.Execute |
| `deploy/start` | 设置 Enable=true → å¯åŠ¨è¿›ç¨‹ |
| `deploy/stop` | 终æ¢è¿›ç¨‹ |
| `deploy/restart` | Stop + Start |
| `deploy/uninstall` | 终æ¢è¿›ç¨‹ → 设置 Enable=false |
| `deploy/compile` | 仅编译节点:拉代ç → 编译 → 打包 → ä¸Šä¼ |
---
## å…«ã€å…³é”®è®¾è®¡å†³ç–
| å†³ç– | 选择 | ç†ç”± |
|------|------|------|
| ç‰ˆæœ¬åŒ¹é… | OS → Arch → TFM é€å±‚ç›é€‰ | 一个版本包åªä¸ºä¸€ä¸ªå¹³å°ç¼–译,精确匹é…ç¡®ä¿å…¼å®¹ |
| MultiVersion | 开关控制,开å¯åŽè‡ªåŠ¨é€‰æœ€æ–°åŒ¹é…版本 | 新应用默认开å¯ï¼Œè€åº”ç”¨ä¿æŒå•版本行为 |
| 节点级é…置覆盖 | AppDeployNode å¯è¦†ç›– FileName/Arguments ç‰ | åŒä¸€åº”用ä¸åŒèŠ‚ç‚¹å¯èƒ½éœ€è¦ä¸åŒå‚æ•° |
| 部署模å¼å…¼å®¹ | 旧版 0-4 æ˜ å°„ä¸ºæ–°ç‰ˆ 10-13 | 平滑å‡çº§ï¼Œæ— éœ€åŒæ—¶å‡çº§æ‰€æœ‰ Agent |
| è¯ä¹¦æ ¼å¼é€‰æ‹© | Windows → Pfx,Linux → Pem | 自动适é…,å‡å°‘人工é…ç½® |
| æ•°æ®æ¸…ç† | Truncate / Delete åŒæ¨¡å¼ | çµæ´»é€‚é…ä¸åŒæ•°æ®åº“æƒé™ |
| 通信åŒé€šé“ | HTTP 心跳 + WebSocket 指令 | 实时性 + å¯é 性 |
| æµæ°´çº¿çŠ¶æ€ | Pending → Building → UploadSucceeded → Deploying → Success/Failed | 细粒度追踪,快速定ä½å¤±è´¥çŽ¯èŠ‚ |
---
## ä¹ã€æœ€ä½³å®žè·µ
| 场景 | 建议 |
|------|------|
| 版本命å | `{主}.{次}.{å¹´}.{月日}`,如 `1.0.2025.0701` |
| éƒ¨ç½²æ¨¡å¼ | ç»å¤§å¤šæ•°åº”用用 Standardï¼›é¢‘ç¹æ›´æ–°ç”¨ Shadow |
| 滚动å‘布 | ç»™ä¸åŒèŠ‚ç‚¹è®¾ç½®ä¸åŒçš„ Delay(0/60/120 秒) |
| 回滚 | ç¦ç”¨é—®é¢˜ç‰ˆæœ¬ → 釿–°å‘布(自动选次新版) |
| ç°åº¦å‘布 | å…ˆå‘布少数节点观察,确认åŽå…¨é‡ |
---
## åã€æ•…障排查
| 现象 | å¯èƒ½åŽŸå› | 排查 |
|------|----------|------|
| å‘布åŽèŠ‚ç‚¹æœªæ›´æ–° | WebSocket æ–å¼€ | 检查 LastActiveã€StarAgent 日志 |
| 进程å¯åŠ¨å¤±è´¥ | 文件æƒé™ / ä¾èµ–缺失 | 检查 StarAgent 日志,手动è¿è¡Œ |
| è¯ä¹¦æœªåŒ¹é… | Domain ä¸ä¸€è‡´ / è¯ä¹¦è¿‡æœŸ | 检查 Urls å’Œè¯ä¹¦æœ‰æ•ˆæœŸ |
| 版本选错 | OS/Arch/TFM è®¾ç½®ä¸æ£ç¡® | 检查版本平å°å—段 |
### 日志ä½ç½®
| 组件 | 路径 |
|------|------|
| Web / Server | `Logs/*.log` |
| StarAgent | `Logs/staragent.log` |
| 应用 | `<工作目录>/logs/*.log` |
|