跳到主要内容

构建与部署

参考工程支持的生产路径是:

预构建 monolith 二进制 + Linux 用户级 systemd + 外部 MySQL + 真实 SMTP

不是「在服务器上 git pull && go run」。

详细步骤以仓库为准:

  • docs/deployment.md
  • docs/release.md
  • scripts/release.sh
  • scripts/deploy-binary.sh
  • .env.production.example

1. 发布包

在构建机:

sh scripts/release.sh

得到可上传的 release 归档(含二进制、迁移、必要资源)。
版本与校验以脚本输出为准。

2. 部署流程(概览)

  1. 将归档上传到 Linux 主机
  2. 解压到 versions 目录
  3. 配置/更新 user-level systemd 单元
  4. 在解压目录执行 migrate
  5. 切换 current 符号链接
  6. systemctl --user restart <service>

助手脚本可串联部分步骤:

sh scripts/deploy-binary.sh

部署参数常来自 .env.deploy.devDEPLOY_ENV_FILE

典型路径变量

变量含义示例
REMOTE_RELEASE_DIR发布根
REMOTE_VERSIONS_DIR各版本目录
REMOTE_CURRENT_LINK当前版本软链
REMOTE_SHARED_DIR共享数据/配置
REMOTE_ENV_FILE服务环境文件

常用运维命令

systemctl --user status <service-name>.service
systemctl --user restart <service-name>.service
journalctl --user -u <service-name>.service -f

开机无登录也要跑服务时:

sudo loginctl enable-linger <user>

3. 生产配置底线

.env.production.example 出发:

  • 替换所有 REPLACE_WITH_*
  • DATABASE_URL 指向外部
  • EMAIL_DRIVER=smtp 且 SMTP 真实可用
  • 显式设置唯一的 SNOWFLAKE_WORKER_ID(多实例不冲突)
  • 独立的 DATA_ENCRYPTION_ACTIVE_KEY不要JWT_SECRET 混用
  • ADMIN_API_ENABLED=false,除非明确暴露并配齐鉴权

4. 迁移与回滚意识

  • 迁移在切换流量前/约定窗口执行
  • 大表变更评估锁表与耗时
  • 二进制回滚 ≠ 数据回滚;涉及破坏性迁移要有数据方案

更通用的发布纪律见本站 发布与部署规范

5. 部署检查清单

  • release 在干净环境构建
  • 生产 env 无 dev 占位密钥
  • migrate 成功且可核对版本
  • readyz / 主路径冒烟通过
  • systemd 用户服务、linger(如需)已配置
  • 日志与告警可观察
  • 回滚步骤已知

6. 和本地开发的差异

本地生产(本仓库约定)
启动make run-monolith预构建二进制 + systemd
数据库SQLite 或本地 MySQL外部 MySQL
邮件dev driver真实 SMTP
配置.envshared env 文件

下一步:回到 项目概览 查漏补缺,或深入仓库 docs/ 领域文档(设备、遥测、命令、孪生等)。