2025-12-18 12:04:23 +08:00
|
|
|
|
# Gitea CI/CD 部署指南
|
|
|
|
|
|
|
|
|
|
|
|
本文档描述了 `aiot-platform-ui` (Web Antd 端) 的自动化构建与部署流程。
|
|
|
|
|
|
|
|
|
|
|
|
## 1. 架构说明
|
|
|
|
|
|
|
|
|
|
|
|
项目采用 **Gitea Actions + Docker** 进行部署。
|
|
|
|
|
|
|
2025-12-18 15:45:59 +08:00
|
|
|
|
- **构建方式**:Docker 多阶段构建 (Multi-stage Build)。
|
|
|
|
|
|
- Stage 1: `node:20-alpine` -> 安装依赖 -> `pnpm build:web-antd` -> 生成 `dist`。
|
|
|
|
|
|
- Stage 2: `nginx:alpine` -> 复制 `dist` -> 启动 Web 服务。
|
|
|
|
|
|
- **运行环境**:目标服务器 (安装了 Gitea Runner 和 Docker)。
|
|
|
|
|
|
- **网络模式**:容器加入 `aiot-net` 网络,端口映射到宿主机。
|
2025-12-18 12:04:23 +08:00
|
|
|
|
|
|
|
|
|
|
## 2. 前置准备
|
|
|
|
|
|
|
|
|
|
|
|
在使用 CI/CD 前,请确保目标服务器满足以下条件:
|
|
|
|
|
|
|
|
|
|
|
|
1. **安装 Docker**: `docker -v` 可用。
|
2025-12-18 15:45:59 +08:00
|
|
|
|
2. **配置 Gitea Runner**:
|
|
|
|
|
|
- Runner 已注册到 Gitea。
|
|
|
|
|
|
- Runner 有权限访问 Docker Socket (`/var/run/docker.sock`)。
|
|
|
|
|
|
3. **Docker 网络**:
|
|
|
|
|
|
- 项目使用 1Panel 的默认网络 `1panel-network`
|
|
|
|
|
|
- CI/CD 会自动检查网络是否存在,如果不存在则创建
|
|
|
|
|
|
- 确保前端和后端容器都在同一个网络中
|
2025-12-18 12:04:23 +08:00
|
|
|
|
|
|
|
|
|
|
## 3. 端口规划
|
|
|
|
|
|
|
|
|
|
|
|
| 服务名称 | 容器端口 | 宿主机端口 (Host Port) | 说明 |
|
2025-12-18 15:45:59 +08:00
|
|
|
|
| :-- | :-- | :-- | :-- |
|
|
|
|
|
|
| **aiot-web-antd** | 80 | **9090** | 前端 Web 服务,请在 1Panel 中反代此端口 |
|
2025-12-18 12:04:23 +08:00
|
|
|
|
| aiot-server | 48080 | 48080 | 后端 API 服务 (参考) |
|
|
|
|
|
|
|
2025-12-18 15:45:59 +08:00
|
|
|
|
> **注意**:如果 9090 端口已被占用,请修改 `.gitea/workflows/deploy-web.yaml` 中的 `HOST_PORT` 变量。
|
|
|
|
|
|
|
|
|
|
|
|
### 部署失败:端口已被占用 (`port is already allocated`)
|
|
|
|
|
|
|
|
|
|
|
|
- **原因**:宿主机端口被其他容器或服务占用。
|
|
|
|
|
|
- **解法**:
|
|
|
|
|
|
1. 修改 workflow 中的 `HOST_PORT` 为其他端口(如 8082、8083)。
|
|
|
|
|
|
2. 或者手动停止占用端口的容器:`docker ps | grep <端口号>` 然后 `docker stop <容器名>`。
|
2025-12-18 12:04:23 +08:00
|
|
|
|
|
|
|
|
|
|
## 4. 1Panel 配置指南
|
|
|
|
|
|
|
|
|
|
|
|
由于容器运行在 `127.0.0.1:8080`,需要在 1Panel (或 Nginx) 中配置反向代理以通过域名访问。
|
|
|
|
|
|
|
|
|
|
|
|
1. **进入 1Panel** -> **网站** -> **创建网站**。
|
|
|
|
|
|
2. **域名**: 填写你的域名 (e.g., `admin.example.com`)。
|
|
|
|
|
|
3. **类型**: `反向代理`。
|
2025-12-18 15:45:59 +08:00
|
|
|
|
4. **代理地址**: `http://127.0.0.1:9090`。
|
2025-12-18 12:04:23 +08:00
|
|
|
|
5. **提交**。
|
|
|
|
|
|
|
|
|
|
|
|
## 5. 常见问题排查
|
|
|
|
|
|
|
|
|
|
|
|
### 构建失败:`pnpm install` 很慢或超时
|
2025-12-18 15:45:59 +08:00
|
|
|
|
|
|
|
|
|
|
- **原因**:网络问题。
|
|
|
|
|
|
- **解法**:Dockerfile 中已配置 npm 淘宝源。如果依然慢,考虑在 Runner 机器上配置透明代理。
|
2025-12-18 12:04:23 +08:00
|
|
|
|
|
|
|
|
|
|
### 部署失败:`Permission denied` 访问 Docker
|
2025-12-18 15:45:59 +08:00
|
|
|
|
|
|
|
|
|
|
- **原因**:Gitea Runner 用户没有 Docker 组权限。
|
|
|
|
|
|
- **解法**:
|
|
|
|
|
|
1. 在服务器执行:`sudo usermod -aG docker <runner-user>`。
|
|
|
|
|
|
2. 或者在 workflow yaml 中开启 `privileged: true` (不推荐)。
|
2025-12-18 12:04:23 +08:00
|
|
|
|
|
|
|
|
|
|
### 页面刷新 404
|
|
|
|
|
|
|
2025-12-18 15:45:59 +08:00
|
|
|
|
- **原因**:Nginx 未配置 SPA 重定向。
|
|
|
|
|
|
- **解法**:检查 `apps/web-antd/nginx.conf` 是否包含 `try_files $uri $uri/ /index.html;`。
|
2025-12-18 12:04:23 +08:00
|
|
|
|
|
2025-12-18 15:45:59 +08:00
|
|
|
|
## 6. 如何触发部署
|
2025-12-18 12:04:23 +08:00
|
|
|
|
|
2025-12-18 15:45:59 +08:00
|
|
|
|
- 修改代码后,推送到 `master` 分支:
|
|
|
|
|
|
```bash
|
|
|
|
|
|
git add .
|
|
|
|
|
|
git commit -m "feat: 更新功能"
|
|
|
|
|
|
git push origin master
|
|
|
|
|
|
```
|
|
|
|
|
|
- 前往 Gitea 仓库页面 -> **Actions** 查看构建进度。
|