mirror of
https://github.com/KingHWJ/WeReadBoard.git
synced 2026-11-03 18:24:58 +08:00
ci(deploy): 改为 GitHub Webhook 触发部署
This commit is contained in:
1 parent
69bfe3ce0e
commit
469630e7da
11 files changed
+267
-78
No files matched your search
+28
-13
@@ -1,28 +1,37 @@
|
||||
# master 自动部署
|
||||
# master Webhook 自动部署
|
||||
|
||||
GitHub Actions workflow 位于 `.github/workflows/deploy.yml`。每次 `master` 分支 push 后,Actions 会通过 SSH 登录服务器,在部署目录执行根目录 `deploy.sh`,拉取最新 `master`、安装依赖、执行全部数据库迁移并重启服务。手动触发时也固定部署 `master`,不能选择其他分支发布。
|
||||
部署链路是:GitHub `master` push → GitHub Webhook → 服务器签名校验 → 服务器本地执行 `deploy.sh`。GitHub Actions 文件 `.github/workflows/deploy.yml` 现在只负责验证,不再通过 SSH 登录服务器。
|
||||
|
||||
## GitHub 配置
|
||||
## GitHub Webhook 配置
|
||||
|
||||
已配置的仓库 Secrets:
|
||||
进入仓库 `Settings -> Webhooks -> Add webhook`,配置 Payload URL `https://laohang.space/github/webhook`、Content type `application/json`、Secret(与服务器 `GITHUB_WEBHOOK_SECRET` 完全一致),事件选择 `Just the push event` 并勾选 `Active`。只允许 `KingHWJ/WeReadBoard` 的 `master` push 触发部署。
|
||||
|
||||
- `SERVER_HOST`
|
||||
- `SERVER_PORT`
|
||||
- `SERVER_SSH_KEY`
|
||||
- `SERVER_USER`
|
||||
Webhook 服务配置文件 `/etc/weread-webhook.env`:
|
||||
|
||||
可选再配置两个仓库 Variables:
|
||||
```ini
|
||||
GITHUB_WEBHOOK_SECRET=服务器生成的随机密钥
|
||||
GITHUB_REPOSITORY=KingHWJ/WeReadBoard
|
||||
DEPLOY_PROJECT_DIR=/opt/weread-board/WeReadBoard
|
||||
DEPLOY_SCRIPT=/opt/weread-board/WeReadBoard/deploy.sh
|
||||
WEBHOOK_HOST=127.0.0.1
|
||||
WEBHOOK_PORT=9001
|
||||
```
|
||||
|
||||
- `DEPLOY_PATH`:服务器上的项目目录,例如 `/opt/WeReadBoard`
|
||||
- `SERVICE_NAME`:systemd 服务名,例如 `weread.service`
|
||||
复制 `deploy/weread-webhook.service` 到 `/etc/systemd/system/`,并执行:
|
||||
|
||||
未配置 Variables 时,workflow 默认使用 `/opt/weread-board/WeReadBoard` 和 `weread.service`。
|
||||
```bash
|
||||
python3 -c 'import secrets; print(secrets.token_urlsafe(48))'
|
||||
sudo chmod 600 /etc/weread-webhook.env
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable --now weread-webhook.service
|
||||
sudo journalctl -u weread-webhook.service -f
|
||||
```
|
||||
|
||||
## 服务器要求
|
||||
|
||||
服务器部署目录需要已经是本仓库的 Git checkout,并且能访问 `origin/master`。运行服务的环境变量仍按现有应用配置,例如 `WEREAD_API_KEY`、`WEREAD_DB_HOST`、`WEREAD_DB_PORT`、`WEREAD_DB_USER`、`WEREAD_DB_PASSWORD` 和 `WEREAD_DB_NAME`。
|
||||
|
||||
如果这些变量放在项目目录的 `.env` 文件中,部署脚本会先加载 `.env`,再执行数据库迁移。SSH 用户需要能执行 `systemctl restart <服务名>`;非 root 用户需要配置免密 `sudo systemctl restart/status <服务名>`。
|
||||
如果这些变量放在项目目录的 `.env` 文件中,部署脚本会先加载 `.env`,再执行数据库迁移。Webhook 运行用户需要能执行 `systemctl restart <服务名>`;非 root 用户需要配置免密 `sudo systemctl restart/status <服务名>`。
|
||||
|
||||
`deploy.sh` 会执行:
|
||||
|
||||
@@ -72,3 +81,9 @@ WantedBy=multi-user.target
|
||||
登录认证还需配置 `WEREAD_SESSION_SECRET` 和首次使用的 `WEREAD_AUTH_SETUP_TOKEN`。在服务器分别运行两次 `python3 -c 'import secrets; print(secrets.token_urlsafe(48))'` 生成不同的值。迁移自动创建 `weread_auth` 表;首次访问 `/login` 时输入初始化口令、管理员账号和至少 12 位密码。初始化成功后,从 systemd 配置中删除 `WEREAD_AUTH_SETUP_TOKEN` 并重启服务。数据库中的密码只保存哈希。
|
||||
|
||||
`WEREAD_SESSION_COOKIE_SECURE=1` 要求浏览器通过 HTTPS 访问。仅本机 HTTP 验收可临时设为 `0`,不要在公网 HTTP 下传输登录密码。
|
||||
|
||||
## Nginx HTTPS 转发
|
||||
|
||||
将 `deploy/nginx-github-webhook.conf` 的 `location` 放入 `laohang.space` 的 HTTPS server 块,然后执行 `sudo nginx -t && sudo systemctl reload nginx`。Webhook 服务只监听 `127.0.0.1:9001`,不要对公网开放 9001 端口。
|
||||
|
||||
`.github/workflows/deploy.yml` 只执行 Python、前端和部署脚本检查。Webhook 模式不再需要 `SERVER_HOST`、`SERVER_PORT`、`SERVER_USER`、`SERVER_SSH_KEY` 这些 Actions Secrets。
|
||||
Reference in new issue
Block a user