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

容器优先方向
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 - 注意:此方案会显著增大包体积,仅推荐轻量应用使用