feat: add prefixed service initializer and packaged deployment

This commit is contained in:
shiran
2026-09-09 11:00:31 +08:00
parent 1e2366998e
commit 4da89b784e
9 changed files with 355 additions and 40 deletions
+23 -7
View File
@@ -52,6 +52,7 @@ go run ./cmd/scheduler # 定时任务调度器
go build -ldflags="-s -w" -o server ./cmd/main_program
go build -ldflags="-s -w" -o cli ./cmd/cli_control
go build -ldflags="-s -w" -o scheduler ./cmd/scheduler
go build -ldflags="-s -w" -o initializer .
```
## 模板使用步骤
@@ -269,9 +270,20 @@ go build -ldflags="-s -w" -o scheduler ./cmd/scheduler
### 首次安装(systemd 服务注册)
`initializer` 已内置 `.env.example``install.sh`、启停脚本和 `deploy/*.service`。将它与三个业务二进制放到部署目录后执行:
```bash
chmod +x install.sh start.sh stop.sh restart.sh server cli scheduler
sudo bash install.sh
chmod +x initializer server cli scheduler
sudo ./initializer
# 请输入项目前缀(例如 myapp
```
初始化工具会自动释放部署文件、添加执行权限、把前缀保存到 `.service-prefix`,并在 `.env` 不存在时根据 `.env.example` 自动创建它,随后执行 `install.sh`。已有 `.env` 会被保留,不会覆盖其中的密钥和环境配置。注册出的服务名为 `myapp-server``myapp-cli``myapp-scheduler`
无人值守初始化时可直接传入前缀:
```bash
sudo ./initializer -prefix myapp
```
### 日常运维
@@ -285,11 +297,11 @@ bash restart.sh # 重启全部
单独管理:
```bash
systemctl status server # 主服务状态
systemctl status scheduler # 调度器状态
systemctl restart scheduler # 只重启调度器
journalctl -u server -f # 主服务实时日志
journalctl -u scheduler -f # 调度器实时日志
systemctl status myapp-server # 主服务状态
systemctl status myapp-scheduler # 调度器状态
systemctl restart myapp-scheduler # 只重启调度器
journalctl -u myapp-server -f # 主服务实时日志
journalctl -u myapp-scheduler -f # 调度器实时日志
```
### systemd 服务特性
@@ -309,7 +321,9 @@ journalctl -u scheduler -f # 调度器实时日志
├── server # HTTP 主服务
├── cli # httplog 上报
├── scheduler # 定时任务调度器
├── initializer # 首次安装工具(内置部署资源)
├── .env # 环境配置
├── .service-prefix # 初始化时保存的 systemd 服务名前缀
├── deploy/
│ ├── server.service
│ ├── cli.service
@@ -322,6 +336,8 @@ journalctl -u scheduler -f # 调度器实时日志
└── cron_*.log # 定时任务专用日志
```
CI 会将 `server``cli``scheduler``initializer` 打包为 `deployment.tar.gz` 后上传。部署目录由工作流顶部的 `DEPLOY_DIR` 统一配置(默认 `/root`)。压缩包上传完成后,服务器依次执行 `stop.sh`、覆盖解压、添加执行权限和 `start.sh`;启停脚本会读取 `.service-prefix` 操作带项目前缀的三个服务。首次部署前需要先运行一次 `initializer`
## 内置功能清单
- Hertz HTTP 框架 + 路由分组