diff --git a/.gitea/workflows/README.md b/.gitea/workflows/README.md new file mode 100644 index 0000000..b574c20 --- /dev/null +++ b/.gitea/workflows/README.md @@ -0,0 +1,47 @@ +# Gitea Actions 部署配置说明 + +## 前提条件 + +- Gitea Runner 已配置为 `self-hosted` 模式,直接在宿主机上运行 +- 宿主机上已安装 `bun` 和 `pm2` +- Runner 用户有权限访问 `/home/score-backend` 目录 + +## 工作流说明 + +- **触发条件**: + - 推送到 `dev` 或 `main` 分支时自动触发 + - 也可以手动触发(workflow_dispatch) + +- **部署步骤**: + 1. 检出代码到 runner 工作目录 + 2. 使用 rsync 同步文件到 `/home/score-backend`(排除不需要的文件) + 3. 在目标目录执行 `bun install` 安装依赖 + 4. 使用 `pm2 restart media-backend` 重启应用(如果应用不存在则启动) + +## 文件排除规则 + +以下文件/目录不会被同步到服务器: +- `.git` - Git 仓库文件 +- `node_modules` - 依赖包(会在服务器上重新安装) +- `.DS_Store` - macOS 系统文件 +- `*.db` - 数据库文件 +- `bun.lockb` - Bun 锁文件 +- `.env` / `.env.local` - 环境变量文件(保留服务器上的配置) +- `.gitea` - Gitea 工作流文件 + +## PM2 配置 + +如果 PM2 中还没有 `media-backend` 应用,工作流会自动创建。你也可以手动配置: + +```bash +cd /home/score-backend +pm2 start main.ts --name media-backend +pm2 save +pm2 startup # 设置开机自启 +``` + +## 注意事项 + +- 确保 Runner 用户有写入 `/home/score-backend` 的权限 +- 确保环境变量在服务器上已正确配置(不会覆盖 `.env` 文件) +- 数据库文件不会被覆盖,确保数据安全 diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml new file mode 100644 index 0000000..4dc4298 --- /dev/null +++ b/.gitea/workflows/deploy.yml @@ -0,0 +1,42 @@ +name: Deploy to Server + +on: + push: + branches: + - dev + - main + workflow_dispatch: + +jobs: + deploy: + runs-on: host + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Copy files to deployment directory + run: | + # 创建目标目录(如果不存在) + mkdir -p /home/score-backend + + # 使用 rsync 同步文件(排除不需要的文件) + rsync -av \ + --exclude='.git' \ + --exclude='node_modules' \ + --exclude='.DS_Store' \ + --exclude='*.db' \ + --exclude='bun.lockb' \ + --exclude='.env' \ + --exclude='.env.local' \ + --exclude='.gitea' \ + ./ /home/score-backend/ + + - name: Install dependencies + working-directory: /home/score-backend + run: | + bun install + + - name: Restart PM2 application + run: | + cd /home/score-backend + pm2 restart media-backend || pm2 start main.ts --name media-backend