# offline-dev-deploy **Repository Path**: csc105/offline-dev-deploy ## Basic Information - **Project Name**: offline-dev-deploy - **Description**: 内部开发环境初始化与部署自动化仓库 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-07 - **Last Updated**: 2026-10-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # offline-dev-deploy 内部离线开发环境的部署与运维工具包:提供可重建的 Docker Compose 模板、主机部署脚本、服务专属部署资产、systemd 单元占位镜像、脱敏配置示例和按 Diátaxis 组织的文档,用于环境的部署、验证、日常维护和故障恢复。仓库服务于一套内网开发环境,不承担生产配置管理、凭证保管或备份存储职责。 大模型网关(LLM Gateway)的源码是上游独立仓库 [fuselia-llm-gateway](https://gitee.com/gitee-lsvvy/fuselia-llm-gateway);本仓库负责把它部署到 汇聚节点(小主机)并维护接入约束,见 [准备本地大模型网关](docs/how-to/prepare-llm-gateway.md)。 ## 系统总览 环境由接入终端、汇聚节点(小主机)、算力节点(DGX ×2)和供电保护(UPS)组成,网络按用途划分为业务、算力、设备管理、控制四类网段:业务数据从业务网段的各服务进出,控制数据收敛于控制网段,跨段访问一律经小主机上的应用入口完成。详细说明见[内部开发环境架构](docs/explanations/architecture.md)。 ```mermaid flowchart TB UPS["UPS"] subgraph TERM["接入终端(电脑)"] DEV["开发终端"] ADMIN["管理终端"] end subgraph MINHOST["小主机:设备接入与数据汇聚"] BUSINESS["业务服务
代码 / 文档 / 镜像 / 远程协作"] GATEWAY["LLM Gateway
业务网统一模型入口"] PRIMARY["NUT Primary
读取 UPS 状态并发布 FSD"] MONITOR["监控与日志"] end subgraph DGX["DGX 算力节点"] DGX1["DGX1 head
分布式模型入口 + NUT Secondary"] DGX2["DGX2 worker
分布式计算 + NUT Secondary"] end DEV -->|"业务网"| BUSINESS DEV -->|"模型请求"| GATEWAY GATEWAY -->|"算力网:head API"| DGX1 DGX1 <--> DGX2 UPS -->|"UPS 网:SNMP"| PRIMARY PRIMARY -->|"控制网:NUT / FSD"| DGX1 PRIMARY -->|"控制网:NUT / FSD"| DGX2 DGX1 -->|"控制网:日志 / 指标"| MONITOR DGX2 -->|"控制网:日志 / 指标"| MONITOR ADMIN -->|"控制网"| MONITOR linkStyle 0,1 stroke:#0369A1,stroke-width:3.5px linkStyle 2,3 stroke:#7C3AED,stroke-width:2px linkStyle 4 stroke:#C2410C,stroke-width:2px linkStyle 5,6,7,8,9 stroke:#16A34A,stroke-width:3.5px ``` 小主机是设备接入、协议适配和数据汇聚节点,不是通用 IP 路由器。图中以物理主机为框,连线颜色对应所走网段:蓝=业务网段、紫=算力网段、橙=UPS 网(设备管理段)、绿=控制网段,网段名同时标注在连线上;业务网段与控制网段加粗突出。各网段地址、端口与隔离矩阵统一见[网络地址、端口与隔离矩阵](docs/reference/network-address-port-matrix.md)。 ## 快速开始(部署) 完整流程见[部署总览](docs/tutorials/deployment-overview.md);逐项手动方式见[分步部署](docs/tutorials/manual-deployment.md)。下面是一键路径的执行顺序(所有命令从仓库根目录执行): ```bash git clone https://gitee.com/gitee-lsvvy/offline-dev-deploy.git cd offline-dev-deploy ``` **第 0 步:准备 profile(各目标机共用一份)** ```bash cp configs/offline-dev.env.example /etc/offline-dev/offline-dev.env # 编辑:各网段 IP、网卡名、NUT 密码、各 *_BIND_IP/*_PORT、模型脚本路径等 ``` 如果不想自己编辑,可以使用如下方法进行一键到位: ```bash sudo bash scripts/deploy/coldstart-minhost.sh ``` 详见[准备部署配置](docs/how-to/prepare-deployment-configuration.md)。整机 重装后的新机还需三项冷启动预备(上传仓库到目标机、预写 Docker 镜像加速、 预建 docker 组),见[一键部署](docs/tutorials/one-click-deployment.md)的 "新机冷启动预备"。 **第 1 步:一键部署小主机**(业务 12 容器 + LLM Gateway + NUT Primary) ```bash sudo OFFLINE_DEV_CONFIG=/etc/offline-dev/offline-dev.env \ bash scripts/deploy/bootstrap-minhost.sh --dry-run # 预演 sudo OFFLINE_DEV_CONFIG=/etc/offline-dev/offline-dev.env \ bash scripts/deploy/bootstrap-minhost.sh --apply-network # 正式(维护窗口) ``` **第 2 步:一键部署 DGX1 / DGX2**(`DGX_ROLE` 区分角色,dgx1 = head) ```bash sudo OFFLINE_DEV_CONFIG=/etc/offline-dev/offline-dev.env DGX_ROLE="dgx1" \ bash scripts/deploy/bootstrap-dgx.sh --apply-network # DGX2 用 DGX_ROLE="dgx2" 执行相同命令 ``` DGX1 会额外安装 `dgx-model-ensure.service`(模型开机自启,见 [模型开机、关机与日常管理](docs/how-to/model-power-and-lifecycle.md))。 **第 3 步:配置自愈免密 SSH(各一条)** ```bash # 小主机 → DGX1:开机自愈 check-dgx-model 需要 ssh-copy-id nvidia@${DGX1_CONTROL_IP} # DGX1 → DGX2:模型自启 / start.sh 远程拉起 worker 需要 ssh-copy-id nvidia@${DGX2_COMPUTE_IP} ``` **第 4 步:放置模型(DGX1,一次性)** 把模型目录(含官方 `start.sh` / `stop.sh` 与 `.env`)放到 profile 中 `DGX1_MODEL_START_SCRIPT` 声明的路径,并手动启动一次确认健康。 **第 5 步:端到端验收** ```bash bash scripts/verify/verify-all.sh # 小主机汇总检查,应 FAIL=0 curl http://192.168.90.200:8000/v1/models # 网关 OK(地址以 profile 为准) curl http://192.168.90.200:8001/v1/models # nginx 透传 OK ``` 部署后的接入对象还包括开发机和管理机(各有接入与自检入口,见下表)。验收清单与断电联动演练见[服务验证清单](docs/reference/service-verification-checklist.md)和[断电联动测试与复位](docs/how-to/power-failure-test-and-reset.md)。 ## 日常使用入口 > 服务地址已支持内网域名(`*.off.internal`,与 IP 等价)。**要用域名的每台机器(开发机/管理机)都需手动配置一次 DNS:把网卡的 DNS 服务器指向小主机 `192.168.90.200`**(各系统具体步骤见[内网 DNS 使用指南](docs/how-to/internal-dns.md)第 3 节);未配置的机器功能不受影响,继续走 IP 即可。域名表、代理绕过与排障见同一指南。 | 你是谁 | 想做什么 | 入口 | | --- | --- | --- | | 管理员 | 部署/重建环境 | [部署总览](docs/tutorials/deployment-overview.md)、[一键部署](docs/tutorials/one-click-deployment.md) | | 管理员 | 启停/排查大模型 | [模型开机、关机与日常管理](docs/how-to/model-power-and-lifecycle.md) | | 管理员 | 监控、SSH 巡检、断电演练 | [管理机部署](docs/tutorials/administrator-workstation-deployment.md)、[Grafana 监控使用指南](docs/how-to/grafana-monitoring-usage.md) | | 管理员 | 数据备份与恢复 | [Borg 备份与恢复](docs/how-to/borg-backup-and-restore.md)、[备份与恢复策略](docs/explanations/backup-strategy.md) | | 开发成员 | 第一次接入环境 | [新成员入职第一天](docs/tutorials/new-member-day-one.md) | | 开发成员 | 使用代码/文档/镜像/模型/远程协助/内网源 | [开发机服务](docs/how-to/development-services.md) | | 开发成员 | 代码托管(账号、建仓、克隆与协作) | [Gitea 代码托管](docs/how-to/gitea-code-hosting.md) | | 任何人 | 排查故障 | [常见问题排查](docs/reference/troubleshooting.md) | | 任何人 | 理解架构与设计 | [文档索引](docs/README.md) | ## 仓库结构 | 路径 | 内容 | | --- | --- | | [`configs/`](configs/) | 主机 profile 模板等脱敏配置示例 | | [`services/`](services/README.md) | 服务专属资产:`minhost/`(小主机业务与监控 Compose 源模板、监控配置、开机单元占位镜像)、`dgx/`(`model/` 模型自启/自愈脚本与占位 unit、`obs/` 观测栈模板与占位 unit)、`nut/`(NUT 模板与部署脚本)、`llm-gateway/`(网关部署与运行脚本)、`borg-backup/`(borgmatic 增量备份到外接备用盘:Compose 模板与运维脚本) | | [`scripts/`](scripts/) | 主机级编排:网络、引导部署、运行时同步和验证脚本 | | [`docs/`](docs/README.md) | 按 Diátaxis 组织的教程、操作指南、参考和架构解释 | | [`docs/diagrams/`](docs/diagrams/README.md) | Mermaid 图风格档案(网段语义色等) | | [`.repository/`](.repository/standards/) | 外部规范源完整快照(fuselia-infra-repository,见[仓库规范来源](docs/repository-standards.md)) | | [`skills/`](skills/) | 随仓库交付的 Agent Skill(`repo-standards` 规范检查、`documentation`、`mermaid-diagrams`) | | [`LICENSE`](LICENSE) | 本仓库自身 MIT 许可证(内嵌规范源快照与第三方 Skill 按各自许可分发) | Git 中仅跟踪配置示例。实际配置按用途放在 `/etc/offline-dev/offline-dev.env`、Compose 运行目录 `.env` 或 `/etc/nut/`,由部署脚本、Compose 或 NUT 服务加载;不要把运行时文件复制回仓库维护。服务监听地址和端口使用各服务独立的 `*_BIND_IP`、`*_PORT` 参数,示例中的地址只是默认 profile。 仓库不包含:生产密码、私钥、Token、完整 `.env`;运行数据、Clonezilla 镜像、Docker 镜像包和模型权重。事故与迁移过程记录放 `docs/reference/` 并标注是否仍然有效。 ## 已知缺口 - **DGX 自动化范围**:模型权重的分发与放置仍在 DGX1 手工执行;如需小主机统一编排,必须先定义受限 SSH 部署凭证、回退策略和禁止远程电源操作的边界; - **网关接口契约**:流式超时与并发上限边界值仍需压测(版本谱系警示见[网关准备指南](docs/how-to/prepare-llm-gateway.md)); - **head/worker 生命周期**:待补异常中断后的自动重试策略与仅 DGX2 单机重启的重建自动化; - **网络强制隔离**:完成并记录 `ip_forward=0` 的实际验证;需要强隔离时将逻辑分区升级为 VLAN/ACL 或防火墙策略; - **最终验收记录**:"两台 DGX 通过 NUT Secondary 各自完成本机关机"的断电演练仍待维护窗口执行; - **自动化资源基线**:补充实际采用的 APT 源、镜像归档、Compose 插件下载地址、Gateway 源码提交和各资源 SHA256。 ## 维护与贡献 修改 `scripts/`、`services/` 或 `configs/` 后,同步检查相关教程、操作指南、参考表和索引。提交前运行适用检查: ```bash git diff --check find scripts services -type f -name '*.sh' -print0 | xargs -0 -n1 bash -n docker compose --env-file services/minhost/.env.example \ -f services/minhost/docker-compose.yml config -q ``` 上述检查只验证模板和语法,不代表真实设备已经部署成功。分支、提交约定和评审流程见[贡献指南](CONTRIBUTING.md);Agent 维护边界与规范检查入口见 [`AGENTS.md`](AGENTS.md);采用的规范来源与版本记录见[仓库规范来源](docs/repository-standards.md)。