694 lines
16 KiB
Markdown
694 lines
16 KiB
Markdown
# 前端分离部署
|
||
|
||
本指南将帮助您独立部署 PPanel 前端应用,连接到已部署的后端服务。
|
||
|
||
## 概述
|
||
|
||
前端分离部署允许您将 PPanel 前端应用部署在独立的服务器或 CDN 上,通过 API 与后端服务通信。
|
||
|
||
PPanel 前端包含两个独立应用:
|
||
- **用户端** (`ppanel-user-web`): 面向最终用户的界面
|
||
- **管理端** (`ppanel-admin-web`): 面向管理员的后台管理界面
|
||
|
||
### 优势
|
||
|
||
- 🚀 利用 CDN 加速静态资源访问
|
||
- 🌍 支持多地域分发
|
||
- 📦 前端独立部署,不影响后端服务
|
||
- 🔄 便于前端快速迭代和更新
|
||
- 🎨 使用现代技术栈 (React 19, TypeScript, TailwindCSS 4)
|
||
|
||
## 前提条件
|
||
|
||
- 已完成[后端部署](./backend.md)
|
||
- 后端 API 地址(如 `https://api.your-domain.com`)
|
||
- 前端域名:
|
||
- 用户端:`https://user.your-domain.com`
|
||
- 管理端:`https://admin.your-domain.com`
|
||
|
||
## 技术栈
|
||
|
||
- **运行时**: Bun (推荐) / Node.js 20+
|
||
- **构建工具**: Vite 6
|
||
- **框架**: React 19 + TypeScript
|
||
- **路由**: TanStack Router
|
||
- **样式**: TailwindCSS 4
|
||
- **状态管理**: Zustand
|
||
- **国际化**: i18next
|
||
- **Monorepo**: Turborepo
|
||
|
||
## 部署方式
|
||
|
||
### 方式一:从源码构建(推荐)
|
||
|
||
#### 1. 环境准备
|
||
|
||
安装 Bun(推荐):
|
||
|
||
```bash
|
||
# Linux/macOS
|
||
curl -fsSL https://bun.sh/install | bash
|
||
|
||
# Windows (WSL2)
|
||
curl -fsSL https://bun.sh/install | bash
|
||
|
||
# 验证安装
|
||
bun --version
|
||
```
|
||
|
||
或使用 Node.js (需要 20+):
|
||
|
||
```bash
|
||
# 检查 Node.js 版本
|
||
node --version # 应该是 v20 或更高
|
||
```
|
||
|
||
#### 2. 克隆代码仓库
|
||
|
||
```bash
|
||
git clone https://github.com/perfect-panel/frontend.git
|
||
cd frontend
|
||
```
|
||
|
||
#### 3. 安装依赖
|
||
|
||
```bash
|
||
# 使用 Bun(推荐,更快)
|
||
bun install
|
||
|
||
# 或使用 npm
|
||
npm install
|
||
|
||
# 或使用 pnpm
|
||
pnpm install
|
||
```
|
||
|
||
#### 4. 配置环境变量
|
||
|
||
在应用目录下创建环境配置文件。
|
||
|
||
**管理端配置** (`apps/admin/.env.production`):
|
||
|
||
```bash
|
||
# 后端 API 地址(必需)
|
||
VITE_API_BASE_URL=https://api.your-domain.com
|
||
|
||
# CDN 地址(可选,用于加速静态资源)
|
||
VITE_CDN_URL=https://cdn.jsdmirror.com
|
||
|
||
# 启用教程文档(可选)
|
||
VITE_TUTORIAL_DOCUMENT=true
|
||
|
||
# 开发环境默认登录凭证(生产环境请留空)
|
||
VITE_USER_EMAIL=
|
||
VITE_USER_PASSWORD=
|
||
```
|
||
|
||
**用户端配置** (`apps/user/.env.production`):
|
||
|
||
```bash
|
||
# 后端 API 地址(必需)
|
||
VITE_API_BASE_URL=https://api.your-domain.com
|
||
|
||
# CDN 地址(可选)
|
||
VITE_CDN_URL=https://cdn.jsdmirror.com
|
||
|
||
# 启用教程文档(可选)
|
||
VITE_TUTORIAL_DOCUMENT=true
|
||
|
||
# 显示落地页(可选,设为 false 则直接跳转登录页)
|
||
VITE_SHOW_LANDING_PAGE=true
|
||
|
||
# 开发环境默认登录凭证(生产环境请留空)
|
||
VITE_USER_EMAIL=
|
||
VITE_USER_PASSWORD=
|
||
```
|
||
|
||
#### 5. 构建应用
|
||
|
||
构建所有应用:
|
||
|
||
```bash
|
||
# 使用 Bun
|
||
bun run build
|
||
|
||
# 或使用 npm
|
||
npm run build
|
||
```
|
||
|
||
构建特定应用:
|
||
|
||
```bash
|
||
# 进入应用目录
|
||
cd apps/admin # 或 apps/user
|
||
|
||
# 构建
|
||
bun run build # 或 npm run build
|
||
```
|
||
|
||
构建完成后,静态文件将输出到:
|
||
- 管理端:`apps/admin/dist/`
|
||
- 用户端:`apps/user/dist/`
|
||
|
||
#### 6. 预览构建结果
|
||
|
||
```bash
|
||
# 在应用目录下
|
||
bun run serve # 或 npm run serve
|
||
|
||
# 默认访问地址:
|
||
# 管理端:http://localhost:4173
|
||
# 用户端:http://localhost:4173
|
||
```
|
||
|
||
### 方式二:使用 Vercel 一键部署
|
||
|
||
#### 管理端部署
|
||
|
||
点击下方按钮一键部署到 Vercel:
|
||
|
||
[](https://vercel.com/new/clone?demo-description=PPanel%20is%20a%20pure%2C%20professional%2C%20and%20perfect%20open-source%20proxy%20panel%20tool&demo-image=https%3A%2F%2Furlscan.io%2Fliveshot%2F%3Fwidth%3D1920%26height%3D1080%26url%3Dhttps%3A%2F%2Fadmin.ppanel.dev&demo-title=PPanel%20Admin%20Web&repository-url=https%3A%2F%2Fgithub.com%2Fperfect-panel%2Ffrontend&root-directory=apps%2Fadmin)
|
||
|
||
#### 用户端部署
|
||
|
||
[](https://vercel.com/new/clone?demo-description=PPanel%20is%20a%20pure%2C%20professional%2C%20and%20perfect%20open-source%20proxy%20panel%20tool&demo-image=https%3A%2F%2Furlscan.io%2Fliveshot%2F%3Fwidth%3D1920%26height%3D1080%26url%3Dhttps%3A%2F%2Fuser.ppanel.dev&demo-title=PPanel%20User%20Web&repository-url=https%3A%2F%2Fgithub.com%2Fperfect-panel%2Ffrontend&root-directory=apps%2Fuser)
|
||
|
||
部署后在 Vercel 控制台配置环境变量:
|
||
- `VITE_API_BASE_URL`: 你的后端 API 地址
|
||
- `VITE_CDN_URL`: CDN 地址(可选)
|
||
|
||
### 方式三:使用 Netlify 部署
|
||
|
||
#### 1. 安装 Netlify CLI
|
||
|
||
```bash
|
||
npm install -g netlify-cli
|
||
```
|
||
|
||
#### 2. 登录 Netlify
|
||
|
||
```bash
|
||
netlify login
|
||
```
|
||
|
||
#### 3. 部署应用
|
||
|
||
```bash
|
||
# 管理端
|
||
cd apps/admin
|
||
bun run build
|
||
netlify deploy --prod --dir=dist
|
||
|
||
# 用户端
|
||
cd apps/user
|
||
bun run build
|
||
netlify deploy --prod --dir=dist
|
||
```
|
||
|
||
#### 4. 配置环境变量
|
||
|
||
在 Netlify 控制台的 Site settings → Build & deploy → Environment 中添加:
|
||
- `VITE_API_BASE_URL`
|
||
- `VITE_CDN_URL`
|
||
|
||
### 方式四:使用 Cloudflare Pages
|
||
|
||
#### 1. 连接 GitHub 仓库
|
||
|
||
登录 Cloudflare Dashboard → Workers & Pages → Create application → Pages → Connect to Git
|
||
|
||
#### 2. 配置构建设置
|
||
|
||
**管理端**:
|
||
- **Framework preset**: None
|
||
- **Build command**: `cd .. && bun install && cd apps/admin && bun run build`
|
||
- **Build output directory**: `apps/admin/dist`
|
||
- **Root directory**: `apps/admin`
|
||
|
||
**用户端**:
|
||
- **Framework preset**: None
|
||
- **Build command**: `cd .. && bun install && cd apps/user && bun run build`
|
||
- **Build output directory**: `apps/user/dist`
|
||
- **Root directory**: `apps/user`
|
||
|
||
#### 3. 配置环境变量
|
||
|
||
在 Settings → Environment variables 中添加:
|
||
- `VITE_API_BASE_URL`
|
||
- `VITE_CDN_URL`
|
||
|
||
## 自建服务器部署
|
||
|
||
### 使用 Nginx
|
||
|
||
#### 1. 安装 Nginx
|
||
|
||
```bash
|
||
# Ubuntu/Debian
|
||
sudo apt update
|
||
sudo apt install nginx -y
|
||
|
||
# CentOS/RHEL
|
||
sudo yum install nginx -y
|
||
```
|
||
|
||
#### 2. 上传构建文件
|
||
|
||
```bash
|
||
# 创建目录
|
||
sudo mkdir -p /var/www/ppanel/{admin,user}
|
||
|
||
# 上传构建文件
|
||
sudo cp -r apps/admin/dist/* /var/www/ppanel/admin/
|
||
sudo cp -r apps/user/dist/* /var/www/ppanel/user/
|
||
|
||
# 设置权限
|
||
sudo chown -R www-data:www-data /var/www/ppanel
|
||
```
|
||
|
||
#### 3. 配置 Nginx
|
||
|
||
**管理端配置** (`/etc/nginx/sites-available/ppanel-admin`):
|
||
|
||
```nginx
|
||
server {
|
||
listen 80;
|
||
server_name admin.your-domain.com;
|
||
|
||
root /var/www/ppanel/admin;
|
||
index index.html;
|
||
|
||
# Gzip 压缩
|
||
gzip on;
|
||
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
|
||
gzip_vary on;
|
||
gzip_min_length 1024;
|
||
|
||
# 静态资源缓存
|
||
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
|
||
expires 1y;
|
||
add_header Cache-Control "public, immutable";
|
||
}
|
||
|
||
# SPA 路由支持
|
||
location / {
|
||
try_files $uri $uri/ /index.html;
|
||
}
|
||
|
||
# 安全头
|
||
add_header X-Frame-Options "SAMEORIGIN" always;
|
||
add_header X-Content-Type-Options "nosniff" always;
|
||
add_header X-XSS-Protection "1; mode=block" always;
|
||
add_header Referrer-Policy "no-referrer-when-downgrade" always;
|
||
}
|
||
```
|
||
|
||
**用户端配置** (`/etc/nginx/sites-available/ppanel-user`):
|
||
|
||
```nginx
|
||
server {
|
||
listen 80;
|
||
server_name user.your-domain.com;
|
||
|
||
root /var/www/ppanel/user;
|
||
index index.html;
|
||
|
||
# 其他配置同管理端
|
||
gzip on;
|
||
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
|
||
|
||
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
|
||
expires 1y;
|
||
add_header Cache-Control "public, immutable";
|
||
}
|
||
|
||
location / {
|
||
try_files $uri $uri/ /index.html;
|
||
}
|
||
|
||
add_header X-Frame-Options "SAMEORIGIN" always;
|
||
add_header X-Content-Type-Options "nosniff" always;
|
||
add_header X-XSS-Protection "1; mode=block" always;
|
||
}
|
||
```
|
||
|
||
#### 4. 启用站点
|
||
|
||
```bash
|
||
# 启用站点
|
||
sudo ln -s /etc/nginx/sites-available/ppanel-admin /etc/nginx/sites-enabled/
|
||
sudo ln -s /etc/nginx/sites-available/ppanel-user /etc/nginx/sites-enabled/
|
||
|
||
# 测试配置
|
||
sudo nginx -t
|
||
|
||
# 重载 Nginx
|
||
sudo systemctl reload nginx
|
||
```
|
||
|
||
#### 5. 配置 HTTPS(推荐)
|
||
|
||
使用 Certbot 自动配置 SSL 证书:
|
||
|
||
```bash
|
||
# 安装 Certbot
|
||
sudo apt install certbot python3-certbot-nginx -y
|
||
|
||
# 获取证书
|
||
sudo certbot --nginx -d admin.your-domain.com
|
||
sudo certbot --nginx -d user.your-domain.com
|
||
|
||
# 自动续期
|
||
sudo certbot renew --dry-run
|
||
```
|
||
|
||
### 使用 Caddy
|
||
|
||
Caddy 自动处理 HTTPS,配置更简单。
|
||
|
||
#### 1. 安装 Caddy
|
||
|
||
```bash
|
||
# Ubuntu/Debian
|
||
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
|
||
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
|
||
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
|
||
sudo apt update
|
||
sudo apt install caddy
|
||
```
|
||
|
||
#### 2. 配置 Caddyfile
|
||
|
||
创建 `/etc/caddy/Caddyfile`:
|
||
|
||
```caddy
|
||
admin.your-domain.com {
|
||
root * /var/www/ppanel/admin
|
||
encode gzip
|
||
file_server
|
||
|
||
try_files {path} /index.html
|
||
|
||
@static {
|
||
path *.js *.css *.png *.jpg *.jpeg *.gif *.ico *.svg *.woff *.woff2 *.ttf *.eot
|
||
}
|
||
header @static Cache-Control "public, max-age=31536000, immutable"
|
||
|
||
header {
|
||
X-Frame-Options "SAMEORIGIN"
|
||
X-Content-Type-Options "nosniff"
|
||
X-XSS-Protection "1; mode=block"
|
||
}
|
||
}
|
||
|
||
user.your-domain.com {
|
||
root * /var/www/ppanel/user
|
||
encode gzip
|
||
file_server
|
||
|
||
try_files {path} /index.html
|
||
|
||
@static {
|
||
path *.js *.css *.png *.jpg *.jpeg *.gif *.ico *.svg *.woff *.woff2 *.ttf *.eot
|
||
}
|
||
header @static Cache-Control "public, max-age=31536000, immutable"
|
||
|
||
header {
|
||
X-Frame-Options "SAMEORIGIN"
|
||
X-Content-Type-Options "nosniff"
|
||
X-XSS-Protection "1; mode=block"
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 3. 启动 Caddy
|
||
|
||
```bash
|
||
sudo systemctl restart caddy
|
||
sudo systemctl enable caddy
|
||
```
|
||
|
||
## 配置 CDN
|
||
|
||
### Cloudflare 配置
|
||
|
||
1. 添加域名到 Cloudflare
|
||
2. 配置 DNS 记录指向源服务器
|
||
3. 启用以下优化选项:
|
||
- **Auto Minify**: 启用 JavaScript、CSS、HTML 压缩
|
||
- **Brotli**: 启用 Brotli 压缩
|
||
- **Rocket Loader**: 启用 JS 异步加载(可选)
|
||
- **Caching Level**: 设置为 Standard
|
||
|
||
4. 配置页面规则:
|
||
```
|
||
*your-domain.com/*
|
||
- Cache Level: Cache Everything
|
||
- Edge Cache TTL: 1 month
|
||
- Browser Cache TTL: Respect Existing Headers
|
||
```
|
||
|
||
### 阿里云 CDN
|
||
|
||
1. 创建 CDN 加速域名
|
||
2. 配置源站:指向前端服务器
|
||
3. 配置缓存规则:
|
||
- 静态文件(js, css, 图片):缓存 1 年
|
||
- HTML 文件:缓存 5 分钟或不缓存
|
||
4. 启用 HTTPS 和 HTTP/2
|
||
|
||
## 环境变量说明
|
||
|
||
| 变量名 | 说明 | 必需 | 默认值 | 示例 |
|
||
|--------|------|------|--------|------|
|
||
| `VITE_API_BASE_URL` | 后端 API 地址 | ✅ | - | `https://api.your-domain.com` |
|
||
| `VITE_CDN_URL` | CDN 地址 | ❌ | `https://cdn.jsdmirror.com` | `https://cdn.your-domain.com` |
|
||
| `VITE_TUTORIAL_DOCUMENT` | 启用教程文档 | ❌ | `true` | `true` / `false` |
|
||
| `VITE_SHOW_LANDING_PAGE` | 显示落地页 | ❌ | `true` | `true` / `false` |
|
||
| `VITE_USER_EMAIL` | 默认登录邮箱(仅开发) | ❌ | - | - |
|
||
| `VITE_USER_PASSWORD` | 默认登录密码(仅开发) | ❌ | - | - |
|
||
|
||
## 验证部署
|
||
|
||
### 检查前端服务
|
||
|
||
```bash
|
||
# 访问前端地址
|
||
curl -I https://admin.your-domain.com
|
||
curl -I https://user.your-domain.com
|
||
|
||
# 预期输出
|
||
# HTTP/2 200
|
||
# content-type: text/html
|
||
```
|
||
|
||
### 检查 API 连接
|
||
|
||
在浏览器中打开前端地址,打开开发者工具:
|
||
|
||
1. 查看 Network 标签
|
||
2. 检查到 API 的请求是否成功
|
||
3. 确认请求地址正确(`https://api.your-domain.com`)
|
||
4. 查看响应数据是否正常
|
||
|
||
### 检查构建版本
|
||
|
||
访问 `/version.lock` 文件查看当前部署的版本:
|
||
|
||
```bash
|
||
curl https://admin.your-domain.com/version.lock
|
||
# 输出示例: 1.2.0
|
||
```
|
||
|
||
## 性能优化
|
||
|
||
### 1. 启用 HTTP/2
|
||
|
||
在 Nginx 中:
|
||
|
||
```nginx
|
||
listen 443 ssl http2;
|
||
```
|
||
|
||
### 2. 启用 Brotli 压缩
|
||
|
||
```bash
|
||
# 安装 Nginx Brotli 模块
|
||
sudo apt install libnginx-mod-http-brotli-filter libnginx-mod-http-brotli-static -y
|
||
```
|
||
|
||
在 Nginx 配置中:
|
||
|
||
```nginx
|
||
brotli on;
|
||
brotli_types text/plain text/css application/json application/javascript text/xml application/xml;
|
||
brotli_comp_level 6;
|
||
```
|
||
|
||
### 3. 预加载关键资源
|
||
|
||
构建时 Vite 已自动处理,会在 `index.html` 中添加 `<link rel="modulepreload">`。
|
||
|
||
### 4. 启用 Service Worker
|
||
|
||
前端已内置 PWA 支持,构建后自动启用 Service Worker 缓存。
|
||
|
||
### 5. 使用 CDN 加速
|
||
|
||
配置 `VITE_CDN_URL` 环境变量,将静态资源加载从 CDN 获取。
|
||
|
||
## 故障排查
|
||
|
||
### API 请求失败
|
||
|
||
**问题**: 前端无法连接到后端 API
|
||
|
||
**解决方案**:
|
||
1. 检查 `VITE_API_BASE_URL` 是否正确配置
|
||
2. 检查后端 CORS 配置是否允许前端域名
|
||
3. 打开浏览器控制台查看具体错误信息
|
||
4. 使用 `curl` 测试后端 API 是否可访问
|
||
|
||
```bash
|
||
curl https://api.your-domain.com/api/health
|
||
```
|
||
|
||
### 页面路由 404
|
||
|
||
**问题**: 刷新页面或直接访问子路由返回 404
|
||
|
||
**解决方案**: 确保 Web 服务器配置了 SPA 回退
|
||
|
||
```nginx
|
||
# Nginx
|
||
try_files $uri $uri/ /index.html;
|
||
|
||
# Apache (.htaccess)
|
||
RewriteEngine On
|
||
RewriteBase /
|
||
RewriteRule ^index\.html$ - [L]
|
||
RewriteCond %{REQUEST_FILENAME} !-f
|
||
RewriteCond %{REQUEST_FILENAME} !-d
|
||
RewriteRule . /index.html [L]
|
||
```
|
||
|
||
### 静态资源加载失败
|
||
|
||
**问题**: JS/CSS 文件 404 或无法加载
|
||
|
||
**解决方案**:
|
||
1. 检查文件权限
|
||
2. 检查 Nginx `root` 路径是否正确
|
||
3. 清除浏览器缓存
|
||
4. 检查 CDN 配置
|
||
|
||
### 构建失败
|
||
|
||
**问题**: `bun run build` 或 `npm run build` 失败
|
||
|
||
**解决方案**:
|
||
1. 确保 Node.js 版本 >= 20
|
||
2. 删除 `node_modules` 和锁文件,重新安装
|
||
```bash
|
||
rm -rf node_modules bun.lockb
|
||
bun install
|
||
```
|
||
3. 检查是否有语法错误或类型错误
|
||
```bash
|
||
bun run check
|
||
```
|
||
|
||
## 更新部署
|
||
|
||
### 从源码更新
|
||
|
||
```bash
|
||
# 拉取最新代码
|
||
git pull origin main
|
||
|
||
# 重新安装依赖
|
||
bun install
|
||
|
||
# 重新构建
|
||
bun run build
|
||
|
||
# 更新文件
|
||
sudo rm -rf /var/www/ppanel/admin
|
||
sudo rm -rf /var/www/ppanel/user
|
||
sudo cp -r apps/admin/dist /var/www/ppanel/admin
|
||
sudo cp -r apps/user/dist /var/www/ppanel/user
|
||
|
||
# 清除 CDN 缓存(如使用 CDN)
|
||
```
|
||
|
||
### Vercel 更新
|
||
|
||
Vercel 会自动监听 GitHub 仓库变动并自动部署。也可以手动触发:
|
||
|
||
```bash
|
||
vercel --prod
|
||
```
|
||
|
||
### Netlify 更新
|
||
|
||
```bash
|
||
cd apps/admin # 或 apps/user
|
||
bun run build
|
||
netlify deploy --prod
|
||
```
|
||
|
||
## 安全建议
|
||
|
||
1. **启用 HTTPS**: 必须使用 SSL/TLS 证书
|
||
2. **配置 CSP**: 内容安全策略
|
||
```nginx
|
||
add_header Content-Security-Policy "default-src 'self'; connect-src 'self' https://api.your-domain.com; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval';";
|
||
```
|
||
3. **设置安全头**: 已在 Nginx 配置中包含
|
||
4. **禁用目录浏览**: `Options -Indexes` (Apache) 或 `autoindex off;` (Nginx)
|
||
5. **限制文件上传大小**:
|
||
```nginx
|
||
client_max_body_size 10M;
|
||
```
|
||
|
||
## 监控和分析
|
||
|
||
### 添加网站分析
|
||
|
||
支持 Google Analytics、Umami、Plausible 等。
|
||
|
||
配置方式:在 `index.html` 中添加追踪代码,或使用环境变量配置。
|
||
|
||
### 错误追踪
|
||
|
||
前端支持集成 Sentry 进行错误追踪(需要在代码中配置)。
|
||
|
||
## 开发和生产环境
|
||
|
||
### 本地开发
|
||
|
||
```bash
|
||
# 使用开发服务器
|
||
cd apps/admin # 或 apps/user
|
||
bun run dev
|
||
|
||
# 管理端默认运行在 http://localhost:3001
|
||
# 用户端默认运行在 http://localhost:3000
|
||
```
|
||
|
||
开发环境会使用 Vite 的代理功能,将 API 请求代理到后端。
|
||
|
||
### 预览生产构建
|
||
|
||
```bash
|
||
# 构建后预览
|
||
bun run build
|
||
bun run serve
|
||
```
|
||
|
||
## 下一步
|
||
|
||
- [后端分离部署](./backend.md) - 如果还未部署后端
|
||
- [节点端安装](../node/installation.md) - 部署节点服务
|
||
- [功能文档](/zh/admin/dashboard) - 了解功能使用
|