# master 自动部署 GitHub Actions workflow 位于 `.github/workflows/deploy.yml`。每次 `master` 分支 push 后,Actions 会通过 SSH 登录服务器,在部署目录执行根目录 `deploy.sh`,拉取最新 `master`、安装依赖、执行阅读目标表迁移并重启服务。手动触发时也固定部署 `master`,不能选择其他分支发布。 ## GitHub 配置 已配置的仓库 Secrets: - `SERVER_HOST` - `SERVER_PORT` - `SERVER_SSH_KEY` - `SERVER_USER` 可选再配置两个仓库 Variables: - `DEPLOY_PATH`:服务器上的项目目录,例如 `/opt/WeReadBoard` - `SERVICE_NAME`:systemd 服务名,例如 `weread.service` 未配置 Variables 时,workflow 默认使用 `/opt/weread-board/WeReadBoard` 和 `weread.service`。 ## 服务器要求 服务器部署目录需要已经是本仓库的 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 <服务名>`。 `deploy.sh` 会执行: ```bash git fetch origin git checkout master git pull --ff-only origin master python3 -m venv .venv # 仅 .venv 不存在时执行 .venv/bin/python -m pip install -r requirements.txt # 读取 reading_api.MYSQL_CONFIG 后执行 migrations/001_reading_goals.sql sudo systemctl restart "$SERVICE_NAME" ``` 其中迁移实际通过 `reading_api.MYSQL_CONFIG` 读取数据库配置并执行 SQL 文件;SQL 使用 `CREATE TABLE IF NOT EXISTS`,可重复执行。 脚本默认部署 `master`,显式传入其他 `DEPLOY_BRANCH` 时会在拉取代码、安装依赖和重启服务之前退出。 ## systemd 示例 ```ini [Unit] Description=WeReadBoard After=network.target [Service] WorkingDirectory=/opt/weread-board/WeReadBoard Environment=WEREAD_API_KEY=wrk-xxxxxxxx Environment=WEREAD_DB_HOST=127.0.0.1 Environment=WEREAD_DB_PORT=3306 Environment=WEREAD_DB_USER=weread Environment=WEREAD_DB_PASSWORD=change-me Environment=WEREAD_DB_NAME=weread Environment=PORT=8770 ExecStart=/opt/weread-board/WeReadBoard/.venv/bin/python app.py Restart=always RestartSec=3 [Install] WantedBy=multi-user.target ``` 如果服务名或部署目录不同,在仓库 Variables 中调整 `SERVICE_NAME` 和 `DEPLOY_PATH`。