Linux软件部署规范的核心是可重复、可追溯、可回滚、安全可控,要求统一目录结构、权限隔离、配置加密解耦、GitOps流程、声明式部署、健康检查与自动回滚、标准化日志监控。

Linux软件部署规范的核心是可重复、可追溯、可回滚、安全可控。不是写一堆文档应付检查,而是让每次上线不踩坑、出问题秒定位、回退不抓瞎。
目录结构与权限隔离要刚性约束
所有生产环境软件必须统一部署在/opt/{app-name}或/srv/{app-name}下,禁止混用/usr/local或用户家目录。主程序、配置、日志、数据必须物理分离:
- /opt/myapp/bin/ —— 可执行文件(仅owner可写)
- /opt/myapp/etc/ —— 配置文件(644,属组可读)
- /opt/myapp/log/ —— 日志目录(属组可写,logrotate接管)
- /var/lib/myapp/ —— 运行时数据(如数据库文件、缓存,严格限制访问权限)
用专用系统用户运行服务(如myapp:myapp),禁止root直接启停。sudo权限只开放指定脚本,禁用NOPASSWD全命令。
配置管理必须和代码解耦且加密敏感项
配置文件不能硬编码进二进制或打包镜像。采用“环境变量 + 配置模板”双机制:
- 基础配置(如端口、超时)放etc/app.conf.tpl,启动时用envsubst渲染
- 密码、密钥、API Token等敏感项,统一从/run/secrets/或HashiCorp Vault拉取,绝不落地明文
- 不同环境(staging/prod)使用独立配置分支或命名空间,CI流水线按环境注入对应变量
配置变更走GitOps:修改→MR审核→自动校验语法(如nginx -t、jq .config.json)→灰度发布。
部署流程必须原子化、带验证、留痕迹
拒绝手动scp + ./start.sh。强制使用声明式部署工具链:
- 轻量级场景:Ansible Playbook + tag控制阶段(install/config/start/healthcheck)
- 容器化场景:Helm Chart + pre-install/post-upgrade hooks + readiness probe自检
- 每次部署生成唯一release ID(如rel-20240520-1428-8a3f),记录在/opt/myapp/RELEASE中
- 部署后自动执行健康检查(curl -f http://localhost:8080/health || exit 1),失败立即回滚至上一release
日志、监控、回滚要有默认能力
不依赖人盯屏幕。所有服务默认集成标准输出+结构化日志:
- 进程日志必须重定向到stdout/stderr,由systemd/journald或容器运行时统一收集
- 每个服务暴露/metrics端点(Prometheus格式),关键指标(QPS、延迟、错误率)告警阈值写入Ansible变量
- 回滚不是“找旧包再传一遍”。部署脚本内置rollback-to {release-id}命令,自动切软链接、重启、验证
- 所有操作日志记入/var/log/deploy/,含操作人、时间、commit hash、机器列表
不复杂但容易忽略。规范不是捆住手脚的绳子,是防止深夜被电话叫醒的护栏。










