Skip to main content

应用架构策略

官方架构推荐

TOS 7 采用 容器优先(Container-first) 策略,同时保持对原生 Deb 应用的完整支持。平台推荐以下决策框架:

Developer_architecture_strategy_001cn.png

容器优先方向

TOS 7 应用生态正在向 容器优先 模型演进:

  • Docker 应用 是大多数第三方服务的首选路径
  • 提供更好的隔离性、更简单的依赖管理、跨平台一致性
  • TOS 7 支持 Docker 容器化部署。使用前,需在应用中心安装 DockerEngine 应用,该应用为 TOS 7 提供完整的 Docker Compose 运行环境。
  • 未来平台功能(沙箱、资源限制、自动更新)将优先支持 Docker 应用

特殊应用类型选择规则:

  • 无 UI 后台服务: 轻量级守护进程使用 Deb(无 UI) 子类型(亦称为 headless 服务);具有复杂运行时依赖或需要容器隔离的服务使用 Docker

对于 Deb 应用,TOS 7 提供完整支持,但开发者应:

  • 尽量减少系统级依赖
  • 使用 systemd 管理生命周期
  • 遵循最小权限原则
  • 为未来容器化部署做好准备
建议使用 Docker 的场景

以下场景必须使用 Docker,禁止使用 Deb:

  • 需要特定操作系统环境或与宿主机冲突的库版本
  • 需要网络隔离(独立命名空间)的应用
  • 多容器架构应用(如 Web 服务 + 数据库)

Deb 应用路线图: Deb 应用在 TOS 7.x 中保持完整支持。平台可能在未来的 TOS 主版本中逐步引入向容器优先架构的过渡路径。开发者将在任何格式弃用前收到至少 12 个月的提前通知。

TOS 系统预装依赖说明

TOS 7 采用与 Ubuntu 22.04 兼容的根文件系统。系统默认预装以下核心依赖:

  • bash / dash
  • Python 3.10
  • systemd
  • nginx
  • curl / wget
  • Docker 运行时(Docker 应用专用)
重要提示

Node.js、Java、Go 等语言运行时,TOS 系统默认不预装,请勿在 Deb 应用中直接依赖这些环境。

非预装依赖处理规范

若你的应用依赖 TOS 未预装的运行时环境(如 Node.js、Java、Go 等语言运行时),必须采用以下合规方案,禁止直接声明依赖或运行时下载

禁止方案
  • DEBIAN/control 中声明 Depends: nodejs(系统无预装,会导致安装失败)
  • 在脚本中通过 apt install nodejs 安装依赖(会触发权限问题,且破坏系统环境)
  • 使用 Node.js 脚本作为应用入口(会报 node: command not found
推荐替代方案(按优先级排序)
方案 1:使用 Go 编译静态二进制(推荐)

将核心逻辑用 Go 重写,编译为静态链接的独立二进制文件,不依赖任何系统动态库:

# 编译 x86_64 架构静态二进制
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o appname-x86_64 main.go

# 编译 aarch64 架构静态二进制
GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o appname-aarch64 main.go
  • 将编译好的二进制放入 Deb 包的 /usr/local/<appid>/ 目录
  • 通过 systemd 服务文件直接启动,无需额外依赖
方案 2:使用 Python 实现(TOS 已预装 Python 3.10,可直接使用)

将核心逻辑改用 Python 实现,TOS 已预装 Python 3.10,可直接使用:

  • DEBIAN/control 中声明依赖:Depends: python3
  • 如需第三方库,需将依赖包随 Deb 包一起打包,或使用 pip install --target 安装到应用私有目录
方案 3:打包静态依赖(仅特殊场景)

若必须使用 Node.js 等非预装环境,可将对应架构的静态二进制随 Deb 包一起打包:

  • 将 Node.js 静态二进制放入 /usr/local/<appid>/node/ 目录
  • 脚本中使用绝对路径调用:/usr/local/<appid>/node/bin/node /usr/local/<appid>/app.js
  • 注意:此方案会显著增大包体积,仅推荐轻量应用使用