feat: Add Gitea Actions workflows and setup documentation for deployment
This commit is contained in:
18
.gitea/workflows/README.md
Normal file
18
.gitea/workflows/README.md
Normal file
@@ -0,0 +1,18 @@
|
||||
# Gitea Actions 工作流
|
||||
|
||||
本目录包含 Gitea Actions 工作流配置文件。
|
||||
|
||||
## 文件说明
|
||||
|
||||
- `deploy.yml` - 基础部署工作流
|
||||
- `deploy-simple.yml` - 简化版部署工作流(推荐使用)
|
||||
|
||||
## 使用说明
|
||||
|
||||
1. 确保已安装并运行 Act Runner
|
||||
2. 在 Gitea 仓库中配置 Secrets
|
||||
3. 更新工作流中的项目路径
|
||||
4. 推送代码或手动触发工作流
|
||||
|
||||
详细配置请参考 `GITEA_ACTIONS_SETUP.md`
|
||||
|
||||
62
.gitea/workflows/deploy-simple.yml
Normal file
62
.gitea/workflows/deploy-simple.yml
Normal file
@@ -0,0 +1,62 @@
|
||||
name: Deploy to Server (Simple)
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- master
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Deploy to server via SSH
|
||||
env:
|
||||
SSH_KEY: ${{ secrets.SERVER_SSH_KEY }}
|
||||
SSH_USER: ${{ secrets.SERVER_USERNAME }}
|
||||
SSH_HOST: ${{ secrets.SERVER_HOST }}
|
||||
run: |
|
||||
# Setup SSH
|
||||
mkdir -p ~/.ssh
|
||||
echo "$SSH_KEY" > ~/.ssh/deploy_key
|
||||
chmod 600 ~/.ssh/deploy_key
|
||||
|
||||
# Add host to known_hosts (optional, for security)
|
||||
ssh-keyscan -H "$SSH_HOST" >> ~/.ssh/known_hosts 2>/dev/null || true
|
||||
|
||||
# Deploy
|
||||
ssh -i ~/.ssh/deploy_key \
|
||||
-o StrictHostKeyChecking=no \
|
||||
-o UserKnownHostsFile=~/.ssh/known_hosts \
|
||||
"$SSH_USER@$SSH_HOST" << 'ENDSSH'
|
||||
set -e
|
||||
echo "Starting deployment..."
|
||||
|
||||
# Navigate to project directory (update this path)
|
||||
cd /opt/cloud-mcp || {
|
||||
echo "Error: Project directory not found"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Pull latest code
|
||||
echo "Pulling latest code..."
|
||||
git fetch origin
|
||||
git checkout main || git checkout master
|
||||
git pull origin main || git pull origin master
|
||||
|
||||
# Run deployment script
|
||||
echo "Running deployment script..."
|
||||
chmod +x deploy-gitea.sh
|
||||
./deploy-gitea.sh
|
||||
|
||||
echo "Deployment completed!"
|
||||
ENDSSH
|
||||
|
||||
# Cleanup
|
||||
rm -f ~/.ssh/deploy_key
|
||||
|
||||
41
.gitea/workflows/deploy.yml
Normal file
41
.gitea/workflows/deploy.yml
Normal file
@@ -0,0 +1,41 @@
|
||||
name: Deploy to Server
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- master
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Setup SSH
|
||||
run: |
|
||||
mkdir -p ~/.ssh
|
||||
echo "${{ secrets.SERVER_SSH_KEY }}" > ~/.ssh/deploy_key
|
||||
chmod 600 ~/.ssh/deploy_key
|
||||
ssh-keyscan -H ${{ secrets.SERVER_HOST }} >> ~/.ssh/known_hosts 2>/dev/null || true
|
||||
|
||||
- name: Deploy to server
|
||||
run: |
|
||||
ssh -i ~/.ssh/deploy_key \
|
||||
-o StrictHostKeyChecking=no \
|
||||
-o UserKnownHostsFile=~/.ssh/known_hosts \
|
||||
${{ secrets.SERVER_USERNAME }}@${{ secrets.SERVER_HOST }} << 'ENDSSH'
|
||||
set -e
|
||||
cd /opt/cloud-mcp || cd /path/to/cloud-mcp
|
||||
git pull origin main || git pull origin master
|
||||
./deploy-gitea.sh
|
||||
ENDSSH
|
||||
|
||||
- name: Cleanup
|
||||
if: always()
|
||||
run: |
|
||||
rm -f ~/.ssh/deploy_key
|
||||
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -13,3 +13,6 @@ data/
|
||||
deploy.log
|
||||
*.log
|
||||
|
||||
# Gitea Actions
|
||||
.gitea/workflows/*.yml.bak
|
||||
|
||||
|
||||
237
GITEA_ACTIONS_SETUP.md
Normal file
237
GITEA_ACTIONS_SETUP.md
Normal file
@@ -0,0 +1,237 @@
|
||||
# Gitea Actions 部署配置指南
|
||||
|
||||
## 前置要求
|
||||
|
||||
### 1. 确保 Gitea Actions 已启用
|
||||
|
||||
在 Gitea 管理员设置中:
|
||||
- 进入 **Site Administration** → **Actions**
|
||||
- 确保 **Actions** 功能已启用
|
||||
- 检查 `app.ini` 配置:
|
||||
|
||||
```ini
|
||||
[actions]
|
||||
ENABLED = true
|
||||
```
|
||||
|
||||
### 2. 安装并运行 Act Runner
|
||||
|
||||
Act Runner 是 Gitea Actions 的执行器,需要在服务器上运行。
|
||||
|
||||
#### 下载 Act Runner
|
||||
|
||||
```bash
|
||||
# 在服务器上执行
|
||||
cd /tmp
|
||||
wget https://gitea.com/gitea/act_runner/releases/download/v0.2.6/act_runner-linux-amd64
|
||||
chmod +x act_runner-linux-amd64
|
||||
sudo mv act_runner-linux-amd64 /usr/local/bin/act_runner
|
||||
```
|
||||
|
||||
#### 注册 Runner
|
||||
|
||||
```bash
|
||||
# 在服务器上执行
|
||||
act_runner register \
|
||||
--instance <your-gitea-url> \
|
||||
--token <runner-token> \
|
||||
--name my-runner \
|
||||
--labels ubuntu-latest:docker://node:20-bullseye
|
||||
```
|
||||
|
||||
**获取 Runner Token**:
|
||||
1. 进入 Gitea:**Site Administration** → **Actions** → **Runners**
|
||||
2. 点击 **New Runner**
|
||||
3. 复制显示的 Token
|
||||
|
||||
#### 运行 Runner
|
||||
|
||||
```bash
|
||||
# 作为服务运行(推荐)
|
||||
sudo tee /etc/systemd/system/gitea-act-runner.service > /dev/null <<EOF
|
||||
[Unit]
|
||||
Description=Gitea Act Runner
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
WorkingDirectory=/opt/cloud-mcp
|
||||
ExecStart=/usr/local/bin/act_runner daemon
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable gitea-act-runner
|
||||
sudo systemctl start gitea-act-runner
|
||||
sudo systemctl status gitea-act-runner
|
||||
```
|
||||
|
||||
或者直接运行:
|
||||
|
||||
```bash
|
||||
act_runner daemon
|
||||
```
|
||||
|
||||
### 3. 配置 GitHub Secrets(在 Gitea 中)
|
||||
|
||||
在 Gitea 仓库中设置 Secrets:
|
||||
|
||||
1. 进入仓库:**Settings** → **Secrets** → **Actions**
|
||||
2. 添加以下 Secrets:
|
||||
|
||||
```
|
||||
SERVER_HOST=你的服务器IP或域名
|
||||
SERVER_USERNAME=部署用户名(如 root 或 deployer)
|
||||
SERVER_SSH_KEY=你的SSH私钥(完整内容,包括 -----BEGIN 和 -----END)
|
||||
```
|
||||
|
||||
**生成 SSH 密钥对**(如果还没有):
|
||||
|
||||
```bash
|
||||
# 在本地或服务器上
|
||||
ssh-keygen -t ed25519 -C "gitea-actions-deploy" -f ~/.ssh/gitea_deploy
|
||||
|
||||
# 将公钥添加到服务器的 authorized_keys
|
||||
ssh-copy-id -i ~/.ssh/gitea_deploy.pub user@your-server
|
||||
|
||||
# 复制私钥内容作为 SERVER_SSH_KEY secret
|
||||
cat ~/.ssh/gitea_deploy
|
||||
```
|
||||
|
||||
### 4. 更新部署脚本路径
|
||||
|
||||
编辑 `.gitea/workflows/deploy.yml` 或 `deploy-simple.yml`,更新项目路径:
|
||||
|
||||
```yaml
|
||||
cd /opt/cloud-mcp # 改为你的实际项目路径
|
||||
```
|
||||
|
||||
## 工作流文件说明
|
||||
|
||||
项目包含两个工作流文件:
|
||||
|
||||
### deploy.yml
|
||||
- 使用 SSH 密钥文件方式
|
||||
- 包含清理步骤
|
||||
|
||||
### deploy-simple.yml(推荐)
|
||||
- 使用环境变量方式
|
||||
- 更详细的日志输出
|
||||
- 更好的错误处理
|
||||
|
||||
## 测试部署
|
||||
|
||||
### 1. 手动触发
|
||||
|
||||
在 Gitea 仓库中:
|
||||
- 进入 **Actions** 标签页
|
||||
- 选择 **Deploy to Server** 工作流
|
||||
- 点击 **Run workflow**
|
||||
|
||||
### 2. 推送代码触发
|
||||
|
||||
```bash
|
||||
git add .
|
||||
git commit -m "Test deployment"
|
||||
git push origin main
|
||||
```
|
||||
|
||||
### 3. 查看日志
|
||||
|
||||
在 Gitea 仓库的 **Actions** 页面查看工作流执行日志。
|
||||
|
||||
## 故障排查
|
||||
|
||||
### 工作流一直显示"等待中"
|
||||
|
||||
1. **检查 Runner 是否运行**:
|
||||
```bash
|
||||
sudo systemctl status gitea-act-runner
|
||||
# 或
|
||||
ps aux | grep act_runner
|
||||
```
|
||||
|
||||
2. **检查 Runner 标签匹配**:
|
||||
- 工作流中 `runs-on: ubuntu-latest`
|
||||
- Runner 注册时需要包含 `ubuntu-latest` 标签
|
||||
|
||||
3. **查看 Runner 日志**:
|
||||
```bash
|
||||
sudo journalctl -u gitea-act-runner -f
|
||||
```
|
||||
|
||||
### SSH 连接失败
|
||||
|
||||
1. **测试 SSH 连接**:
|
||||
```bash
|
||||
ssh -i ~/.ssh/deploy_key user@server
|
||||
```
|
||||
|
||||
2. **检查 SSH 密钥格式**:
|
||||
- 确保私钥包含完整的 `-----BEGIN` 和 `-----END` 行
|
||||
- 确保没有多余的空格或换行
|
||||
|
||||
3. **检查服务器防火墙**:
|
||||
```bash
|
||||
# 确保 SSH 端口开放
|
||||
sudo ufw allow 22
|
||||
```
|
||||
|
||||
### 部署脚本执行失败
|
||||
|
||||
1. **检查脚本权限**:
|
||||
```bash
|
||||
chmod +x /opt/cloud-mcp/deploy-gitea.sh
|
||||
```
|
||||
|
||||
2. **检查项目路径**:
|
||||
- 确保工作流中的路径与实际路径一致
|
||||
|
||||
3. **查看服务器日志**:
|
||||
```bash
|
||||
tail -f /opt/cloud-mcp/deploy.log
|
||||
```
|
||||
|
||||
## 安全建议
|
||||
|
||||
1. **使用专用部署用户**:
|
||||
```bash
|
||||
sudo adduser deployer
|
||||
sudo usermod -aG docker deployer
|
||||
```
|
||||
|
||||
2. **限制 SSH 密钥权限**:
|
||||
- 使用 `command=` 限制 SSH 密钥只能执行特定命令
|
||||
- 在 `~/.ssh/authorized_keys` 中:
|
||||
```
|
||||
command="/opt/cloud-mcp/deploy-gitea.sh" ssh-ed25519 AAAAC3...
|
||||
```
|
||||
|
||||
3. **使用 SSH 密钥而非密码**:
|
||||
- 禁用密码登录
|
||||
- 只使用密钥认证
|
||||
|
||||
4. **定期轮换密钥**:
|
||||
- 定期更新 SSH 密钥
|
||||
- 更新 Gitea Secrets
|
||||
|
||||
## 验证部署
|
||||
|
||||
部署成功后,检查:
|
||||
|
||||
```bash
|
||||
# 在服务器上
|
||||
docker ps | grep cloud-mcp
|
||||
docker logs cloud-mcp
|
||||
```
|
||||
|
||||
## 下一步
|
||||
|
||||
- 配置自动部署触发条件
|
||||
- 添加部署通知(邮件、Slack 等)
|
||||
- 设置部署回滚机制
|
||||
|
||||
Reference in New Issue
Block a user