Files
WeReadBoard/docs/deploy-master.md
T

2.5 KiB
Raw Blame History

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 会执行:

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 示例

[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。