跳转至

部署手册(产品级交付文档,架构方案 4.4 质量标准)

配套:架构方案 velasim-architecture.md · 运维手册 ops-manual.md · 二次开发指南 developer-guide.md

1. 部署形态总览

形态 适用 说明
jar + systemd(默认) 私有化交付 一键 deploy/deploy.sh,在线/离线同脚本;完整形态默认(平台 + guacd/FFmpeg/Samba/NTP)
Docker 容器 接受容器化的客户 一键 deploy/deploy-docker.sh(web/server+FFmpeg/mysql/guacd 编排 + 主机级 Samba/NTP),与 jar 形态同一套语义,见 §3.4
部署位置 两种拓扑均支持 ① 集群控制/登录节点(local 直调调度器、网盘直连共享盘);② 独立服务器(agent/SSH 通道)

三个触点:平台服务器 = 一个命令(deploy.sh);集群登录节点 = 一个命令(install-agent-go.sh,可选);每台 Windows 桌面 = 一个命令(install-host-agent-cs.bat,可选)。

2. OS 支持矩阵

级别 OS 在线装法 离线装法
一等 AlmaLinux / Rocky 8、9(RHEL 同) 官方源 + EPEL(guacd)+ RPMFusion(FFmpeg) 打包机三源快照 + JDK/FFmpeg 二进制随包
一等 Ubuntu 22.04 / 24.04 LTS 官方源(universe) universe 快照 + 同上
二等 Ubuntu 20.04(ESM)、Debian、CentOS Stream 9 同各自一等 同上
尽力 CentOS 7(EOL 2024-06) yum + EPEL(无 guacd 包) guacd 预编译二进制随包 + JDK tarball 随包

信创(麒麟/UOS):待验证,后续按客户需求适配。

3. 一键部署(在线)

# 1) 上传 jar 到服务器
scp vela-boot/target/velasim.jar root@server:/opt/

# 2) 执行部署(常用场景只需 jar + 域名 + 邮箱)
sudo bash deploy/deploy.sh /opt/velasim.jar velasim.example.com admin@example.com
# 无域名(内网 IP): sudo bash deploy/deploy.sh /opt/velasim.jar --self-signed
# 纯内网 http:     sudo bash deploy/deploy.sh /opt/velasim.jar

脚本完成:内存探测与预算分配 → 平台依赖 → 功能组件(guacd/FFmpeg/Samba/NTP)→ MySQL 建库+加固+缓冲池预算 → 前端 dist 部署 → jar + systemd(动态 JVM)→ Nginx/TLS → 备份与日志归档 → 部署冒烟(纯 bash) → 部署报告 /opt/velasim/deploy-report.txt → 证书巡检 cron。

参数即查即用:bash deploy/deploy.sh --help(完整参数表);记不住参数用 --interactive 逐项引导;安装全程日志 /var/log/vela-install.log。

3.1 资源探测与预算(不写死、不糊弄)

探测内存 行为
<3G 拒绝部署(JVM+MySQL 无法同时运行)
3~8G 演示档:需显式确认(--accept-low-spec),报告写明能力边界(1-2 并发桌面会话)
≥8G 标准档

分配曲线(默认按机器;客户可用 --memory-budget 4G 指定预算,专用/共享机器都适用):

预算 JVM 堆(封顶 8G) MySQL pool(封顶 16G)
4G 1.5G 512M
8G 4G 2G
16G 8G 4G
32G+ 8G(建议拆角色) 8~16G

运维可用 VELA_JAVA_OPTS(vela-env)覆盖 JVM 参数。

3.2 升级 / 回滚 / 卸载 / 后期加域名

sudo bash deploy/deploy.sh --upgrade /opt/new/velasim.jar   # 自动备份 jar+DB 快照,冒烟失败自动回滚 jar
sudo bash deploy/deploy.sh --enable-tls new-domain.com admin@x.com  # 后期加域名/换证书(不重跑部署)
sudo bash deploy/deploy.sh --uninstall          # 卸载(保留数据)
sudo bash deploy/deploy.sh --uninstall --purge  # 卸载并清数据

所有安装步骤幂等:重跑 = 收敛到期望状态(cron 查重、已装跳过、配置刷新)。

3.4 容器部署形态(Docker,一键)

sudo bash deploy/deploy-docker.sh /opt/velasim.jar domain.com admin@example.com
# 离线: sudo bash deploy/deploy-docker.sh /opt/velasim.jar --offline /opt/offline --self-signed
  • 编排(deploy/docker/docker-compose.yml):web(Nginx+前端)/ server(后端+FFmpeg)/ mysql / guacd——完整形态齐;guacd 仅 compose 内网可达(不暴露宿主端口)
  • 主机级组件:Samba/NTP 为系统服务,脚本在宿主机安装并开机自启(容器外的共享盘挂载依赖)
  • SMB 挂载闭环前置(2026-09-13,V49):部署脚本自动装入 deploy/scripts/cluster/*.sh 至 $APP_DIR/scripts/cluster 并写 /etc/sudoers.d/velasim-samba(非 root 服务用户调用 samba_account.sh 的最小授权,argv 字符类钉死);开箱为人工模式——vela-env 配置 VELA_DESKTOP_SAMBA_SERVER 后自动闭环生效;Samba 非共址改走 SSH 通道(VELA_DESKTOP_SAMBA_TRANSPORT=ssh + 私钥与指纹,fail closed)。盘符对交互用户会话的可见性依赖 host-agent 运行形态(会话 0 限制),见 ops-manual 6.5
  • 与 jar 形态同一套语义:内存探测/预算曲线(.env 注入 JVM 参数 + mysql-vela.cnf)、证书三态、部署冒烟、部署报告、升级(镜像备份+冒烟回滚)、卸载(只删自建镜像与数据卷,基础镜像不动)、幂等收敛
  • 离线:打包机 build-offline-package.sh --docker 产出镜像包(docker save);目标机 docker load 后同一条命令部署
  • 前提:目标机已装 Docker + compose 插件(镜像包不含 Docker 本体;内网无 Docker 请用 jar 形态)

4. 离线部署(内网断网交付)

4.1 打包(开发侧,一条命令 → 一个文件)

入口(三平台统一,built/ 目录):built/build-package.bat(Windows)/ built/build-package.command(macOS 双击)/ built/build-package.sh(Linux/macOS)。无参数运行 = 交互问答(逐项显式选择,无默认值):

[1/5] 目标机器 OS(Alma/Rocky 9|8 · Ubuntu 24.04|22.04|20.04/Debian · CentOS Stream 9 · CentOS 7 · Docker 形态)
[2/5] 构建方式(显示本机 java21/mvn/node/docker 检测结果,仅供参考、不推荐不默认):
        已有产物 / 本机构建(缺工具链时询问绿色安装:官方压缩包解压到 ~/.vela-tools,
        目录可配、构建完询问保留或删除)/ Docker 构建(maven/node 镜像,本机零工具链)
[3/5] 交付形态:自解压单文件 / 压缩包 / 目录 / 全部
[4/5] Agent 形态:不打包 / Java 变体 / 原生变体 / 两者都要
[5/5] 产物前门禁:full 全量 / release 终检 / quick 语法 / none 跳过
  • Docker 永不隐式使用:仅当用户显式选择——--build docker / Docker 形态 / 跨 OS 打包时交互确认(或 --use-docker 显式启用)。本机有 Docker 也不替用户决定(运维可能不想用)
  • 环境自适应(本机与目标不一致时四路显式选择,无默认):① 容器重入(仅当有 Docker 且确认)② 两段式:阶段B 在目标 OS 机器上 --stage snapshot --os <目标> 只生成依赖快照(rpm/deb + CentOS 7 guacd 编译),回传后阶段A 本机 --snapshot-dir <目录> 合成离线包(零 Docker)③ 部分包(--partial):跳过 rpm/deb 快照与 guacd 编译(OS 绑定件),JDK 21 tarball / FFmpeg 静态等 OS 无关件照常进包,部署机部署时由 deploy.sh 自动逐组件降级(包内优先、缺件联网)④ 退出。入口脚本零依赖;Windows 入口自动探测 WSL → Git Bash 作为执行宿主,均无时给出安装指引(不要求装 Docker)
  • CentOS 7 EOL 自动处理:快照/在线装包时检测到官方源不可用(mirror.centos.org 已关停),自动切换 vault.centos.org + EPEL archive 并补装 epel-release;依赖快照中 CentOS 7 用 mariadb-server(无 mysql-server 包)
  • CI/无人值守:全部必要参数显式指定,缺失即报错(无默认值),--os rocky9 --build docker --bundle all --gate full --agents none --use-docker --version 1.2.0 等;跨 OS 且无 Docker 时须显式 --snapshot-dir 或 --partial(--help 全表)
  • 产物前门禁:由用户显式选择(交互第 5 问 / --gate 参数);在宿主机执行一次(容器重入实例自动跳过)。正式交付选 full(全量测试+构建零警告,测试不过不打产物)
  • 站点定制配置(改配置不改脚本):目标机 deploy.sh 自动加载同目录 deploy.conf(或 VELA_DEPLOY_CONF 指定),可覆盖端口(后端/guacd/MySQL)、安装与存储路径、内存预算曲线、备份 cron 与保留天数、logrotate 份数、证书策略、Nginx 上传体与代理超时——键名与默认值见 built/deploy.conf.example(优先级:命令行 > 环境变量 > deploy.conf > 脚本默认)。打包机可用 --deploy-conf <文件> 把按客户定制的配置随包交付(deploy.sh 同目录,自动加载)
  • 完整性与 SBOM:包内 offline/SHA256SUMS.txt 覆盖 jar/安装器/配置/前端/agent 全部交付件(rpm/deb 由 MANIFEST 逐包覆盖),部署端启动时自动校验、损坏即拒装;offline/SBOM-cyclonedx.json(CycloneDX 1.4 组件级清单:版本/目标 OS/打包方式/快照包/组件;后端 Maven 传递依赖 deep SBOM 可用 cyclonedx-maven-plugin 生成);--sign-key <gpg密钥ID> 为交付物生成 GPG 分离签名(.asc,来源证明+防篡改),公钥经线下渠道分发,目标机 gpg --verify 通过后再运行
  • Agent 交付(主流分离形态):--agents none|java|native|both 显式选择(原生变体检测并提示 Go/.NET 工具链,Java 变体复用 Maven 零配置);--agents-only 独立产出 agent 交付包(升级/补发)——产物含三触点安装脚本与说明
  • 自解压包解包位置三层可配:目标机 --extract-dir <目录> > 环境变量 VELA_EXTRACT_DIR > 默认 /opt/vela-delivery

产物在 delivery/builds/<目标OS>/<版本>-<时间戳>/(gitignore,按目标 OS 分类 + 每次构建独立目录,历史构建物不被覆盖):velasim-<目标>-v<版本>.sh(自解压单文件,默认交付物)、.tar.gz(压缩包)、offline/(目录,自测/排障)、SHA256SUMS.txt + build-report.txt。预构建制品:prebuilt/(仓库根,随 git 入库)放 guacd-centos7.tar.gz / ffmpeg-static.tar.gz 等小件(JDK 太大不进 git)——拾取优先级 --snapshot-dir > prebuilt/ > delivery/cache/(OS 无关件缓存,跨构建复用)> 现场生成/下载。体积 ≈1~1.2GB:依赖 rpm/deb 快照(完整依赖闭包:apt 由 apt 自身解析依赖树 / dnf --alldeps / CentOS 7 yum install --downloadonly --resolve 完整事务闭包;关键包缺失即报错不静默)+ 包级 MANIFEST(每包 sha256,部署端装前校验防拷贝损坏)+ JDK 21 tarball + CentOS 7 专属 guacd 预编译二进制 + FFmpeg 静态(CentOS 7)+ 前端 dist。

4.2 部署(目标机,探测离线包优先 + 逐组件降级)

sudo bash deploy/deploy.sh /opt/velasim.jar --offline /opt/offline --self-signed   # 显式强离线

离线判定(无显式参数时自动):探测本项目离线包(脚本旁 offline/ → 上级 offline/(自解压布局)→ /opt/offline → $VELA_OFFLINE_DIR):

  • 发现离线包 → 混合模式(包优先):每个组件独立判断——包内有(平台依赖 rpm/deb 快照、JDK 21 tarball、guacd 预编译、FFmpeg 静态、前端 dist)就用包内件;包内缺就联网补齐(如部分包缺依赖快照 → 目标机 yum/apt 在线装)。部分离线包因此可在联网目标机上直接部署
  • 未发现 → 纯在线;--online 强制在线(忽略包);--offline <目录> 强制离线——缺组件直接报错并点名缺哪个,给出补齐指引
  • 自解压单文件自动走此探测(无需再传 --offline);CentOS 7 目标机在线装包时同样自动切换 vault 源

4.3 证书三态

场景 方式
公网域名 acme.sh 自动签发 + 每日 3:17 续期 + 证书巡检 cron(<30 天日志警告、<7 天告警)
内网有 CA --cert <crt> <key>(CA 给 IP 或域名签的证书)
纯内网无 CA --self-signed(IP SAN 自签 10 年,客户浏览器导入一次信任)

5. 硬件配置

档位 配置 适用
POC 4C/8G/500GB SSD ≤10 并发或纯超算
标准 8C/16G/1TB 数据盘 + 1.5TB 备份盘 几十并发全功能
大规模 16C/32G+,拆角色(独立 MySQL/转码机/guacd 网关) 百级并发/重度转码

磁盘公式:系统 50G + MySQL(数据×1.2) + 存储(网盘配额+视频×2) + 备份(数据×1.5,保留 30 天)。 端口:80/443 对外;8080/3306/4822 仅本机;8085/8086 仅平台可达。

6. 环境变量清单(/opt/velasim/bin/vela-env,脚本自动生成)

变量 说明
VELA_DB_HOST/PORT/NAME/USER/PASSWORD MySQL 连接(密码部署时随机生成)
VELA_JWT_SECRET ≥32 字节随机生成,变更即全员下线
VELA_STORAGE_ROOT 存储根(网盘/视频/备份,指向数据盘)
VELA_AGENT_TOKEN 集群 agent 通道令牌(生产必须注入,与 vela-agent 端一致;缺失后端拒绝启动)
VELA_HOST_AGENT_TOKEN 桌面 host-agent 令牌(生产必须注入,与 host-agent 端一致)
VELA_MAIL_* 邮件通知(客户内网邮件系统)
VELA_CLOUD_PROVIDER / VELA_SMS_PROVIDER 云厂商/短信,none 即纯私有化
VELA_CLOUD_HUAWEI_AK/SK / VELA_CLOUD_ALIYUN_AK/SK 云桌面开通才需要
VELA_JAVA_OPTS 运维覆盖 JVM 参数

7. 部署后必做(验证清单)

  1. 管理员登录改密(初始密码仅首次启动日志输出一次:journalctl -u velasim | grep 初始密码;首次登录强制改密)
  2. 后台「参数配置」:注册开关、备案号、站点标题
  3. 集群台账(调度器 × 执行通道)+ 求解器关联 + 命令模板(未配置提交被拒)
  4. 注入 VELA_AGENT_TOKEN / VELA_HOST_AGENT_TOKEN 并重启
  5. 组件自检:systemctl status guacd smbd chronyd、ffmpeg -version、chronyc sources
  6. 阅读 /opt/velasim/deploy-report.txt(冒烟结果与能力边界)
  7. 功能验收:agent 通道 node devtools/verify-agent-native.mjs(开发侧全链路)等 verify 套件

8. 原生 agent 变体部署

见 10 节(构建/安装/升级)。

9. 云超算相关配置与开放 API 部署

配置 默认 说明
vela.job.polling-delay-ms 10000 轮询周期
vela.job.dispatch-batch / sync-batch 50 / 200 批次大小
vela.job.dispatch-max-attempts 3 派发重试上限
vela.job.sync-fail-threshold 5 状态查询失败升级阈值
vela.job.workspace-retention-days 30 工作区保留天数
vela.job.sweep-max-jobs 100 参数扫描组合数上限
vela.agent.token 空=启动失败 agent 通道令牌(生产必须注入 VELA_AGENT_TOKEN)
vela.cloud.order.max-active-per-user 5 单用户未释放订单上限
vela.cloud.order.allowed-instance-types 空=云下单关闭 实例规格白名单(fail-closed)
vela.open.enabled / vela.open.tokens false / 空 开放 API;启用时必须配置租户化 token(空租户列表拒绝启动);平台管理员账号提交被拒

升级本版本后需重启后端以执行 V39 迁移(命令模板/两阶段派发列/集群密钥/账号映射/分布式锁); 求解器命令模板未配置的求解器提交将被拒绝(管理后台-求解器管理配置)。

10. Agent 原生二进制变体(可选,替代 Java 版本)

变体 语言/运行时 产物与体积(实测) 安装脚本
vela-agent-go Go 1.23 单静态二进制,零运行时依赖 linux/amd64 ≈ 5.5 MB;windows/amd64 验证版 ≈ 8.2 MB deploy/scripts/agent-go/install-agent-go.sh(systemd 单元 vela-agent-go)
vela-host-agent-cs .NET 10 自包含单文件,目标机零运行时 win-x64 ≈ 48 MB(压缩后单文件) deploy/scripts/host-agent/install-host-agent-cs.bat(服务 vela-host-agent-cs)

HTTP 契约与 Java 版本完全一致(同一验收脚本 devtools/verify-agent-native.mjs 验证),平台侧零改动; Java 版本保留为默认实现,与原生变体同端口(8085/8086)二选一部署。

10.1 vela-agent-go(集群登录节点)

  • 构建:velasim-agent-go/ 下执行 build.sh(或 build.bat),产出 dist/vela-agent-go-linux-amd64(生产)与 dist/vela-agent-go.exe(本机验证)
  • 安装/升级:bash deploy/scripts/agent-go/install-agent-go.sh <二进制>(root 执行;幂等重跑=升级,即替换二进制+重启服务)
  • 环境变量:AGENT_PORT(默认 8085)、VELA_AGENT_TOKEN(必须与平台 vela.agent.token 一致;安装脚本空令牌拒绝启动)
  • 探活:curl http://agent:8085/actuator/health(与 Java 版一致,免鉴权)

10.2 vela-host-agent-cs(Windows 桌面/应用主机)

  • 构建:velasim-host-agent-cs/ 下执行 build.bat(dotnet publish 自包含单文件),产物 publish/vela-host-agent-cs.exe
  • 安装/升级:管理员执行 deploy/scripts/host-agent/install-host-agent-cs.bat <publish 目录>;卸载 sc stop vela-host-agent-cs && sc delete vela-host-agent-cs
  • 环境变量:HOST_AGENT_PORT(默认 8086)、VELA_HOST_AGENT_TOKEN(必须与平台 vela.host-agent.token 一致,否则全 401)
  • 排障:sc stop vela-host-agent-cs 后前台直接运行 exe 查看日志(Windows 服务下无控制台输出)

10.3 验证

node devtools/verify-agent-native.mjs(需 8081 dev 后端 + 两个产物已构建): Go 直连矩阵 / 经平台 agent 通道派发 / C# 直连+平台转发+黑名单实测 / Java↔Go 一致性语料比对。 第 8 节升级注意事项(区间读取 + size 能力位、sudo 账号包装)对原生变体同样适用。