feat: 更新管理后台部署工作流,优化文件上传和部署步骤
Some checks failed
部署管理后台 / 🧪 测试和构建 (push) Successful in 1m52s
部署前端网站 / 🧪 测试和构建 (push) Successful in 3m41s
部署管理后台 / 🔒 安全扫描 (push) Has been cancelled
部署管理后台 / 🚀 部署到生产环境 (push) Has been cancelled
部署前端网站 / 🚀 部署到生产环境 (push) Successful in 3m35s

- 移除了压缩构建产物的步骤,直接上传构建文件夹到临时目录。
- 更新了部署步骤,清空旧文件并移动新文件到生产目录,增强了部署的可靠性。
- 新增了部署结果验证步骤,确保文件正确部署。

此更改提升了管理后台的部署效率和可维护性。
This commit is contained in:
iriver
2025-07-16 20:05:55 +08:00
parent 9400889f29
commit 4ab2c167e5
3 changed files with 24 additions and 69 deletions

View File

@ -103,51 +103,18 @@ jobs:
VITE_UPLOAD_URL: https://api.photography.iriver.top/upload VITE_UPLOAD_URL: https://api.photography.iriver.top/upload
run: bun run build run: bun run build
- name: 📊 压缩构建产物 - name: 📤 上传文件到服务器
working-directory: ./admin
run: |
tar -czf admin-dist.tar.gz -C dist .
echo "压缩完成: $(ls -lh admin-dist.tar.gz)"
- name: 🚀 部署到服务器
run: |
# 设置 SSH 环境
export SSHPASS=${{ secrets.ALIYUN_PWD }}
# 设置变量
ADMIN_DIR="/home/gitea/www/photography-admin"
echo "🚀 开始部署管理后台..."
# 部署到服务器
sshpass -e ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 ${{ secrets.ALIYUN_USER_NAME }}@${{ secrets.ALIYUN_IP }} "
set -e
echo '🚀 开始部署管理后台...'
# 确保目录存在
mkdir -p $ADMIN_DIR
# 快速部署:清空旧文件
rm -rf $ADMIN_DIR/*
# 设置权限
chown -R gitea:gitea $ADMIN_DIR
chmod -R 755 $ADMIN_DIR
echo '✅ 管理后台部署完成!'
"
- name: 📤 上传构建产物到服务器
uses: appleboy/scp-action@v0.1.6 uses: appleboy/scp-action@v0.1.6
with: with:
host: ${{ secrets.ALIYUN_IP }} host: ${{ secrets.ALIYUN_IP }}
username: ${{ secrets.ALIYUN_USER_NAME }} username: ${{ secrets.ALIYUN_USER_NAME }}
password: ${{ secrets.ALIYUN_PWD }} password: ${{ secrets.ALIYUN_PWD }}
port: 22 port: 22
source: "admin/admin-dist.tar.gz" source: "admin/dist/"
target: "/tmp/" target: "/tmp/admin-build"
rm: true
- name: 🚀 解压并部署文件 - name: 🔄 部署文件到生产目录
uses: appleboy/ssh-action@v1.0.0 uses: appleboy/ssh-action@v1.0.0
with: with:
host: ${{ secrets.ALIYUN_IP }} host: ${{ secrets.ALIYUN_IP }}
@ -155,29 +122,29 @@ jobs:
password: ${{ secrets.ALIYUN_PWD }} password: ${{ secrets.ALIYUN_PWD }}
port: 22 port: 22
script: | script: |
echo "🚀 开始部署管理后台..." echo "🔄 部署管理后台到生产目录..."
ADMIN_DIR="/home/gitea/www/photography-admin" ADMIN_DIR="/home/gitea/www/photography-admin"
# 确保目录存在 # 创建目标目录
mkdir -p $ADMIN_DIR mkdir -p $ADMIN_DIR
# 解压文件 # 清空旧文件
echo "📦 正在解压文件..."
mkdir -p /tmp/admin-deploy
tar -xzf /tmp/admin-dist.tar.gz -C /tmp/admin-deploy/
# 清空旧文件并部署新文件
echo "🚀 正在部署文件..."
rm -rf $ADMIN_DIR/* rm -rf $ADMIN_DIR/*
cp -r /tmp/admin-deploy/* $ADMIN_DIR/
# 移动新文件到生产目录
cp -r /tmp/admin-build/admin/dist/* $ADMIN_DIR/ || exit 1
# 清理临时文件
rm -rf /tmp/admin-build
# 设置权限 # 设置权限
chown -R gitea:gitea $ADMIN_DIR chown -R gitea:gitea $ADMIN_DIR
chmod -R 755 $ADMIN_DIR chmod -R 755 $ADMIN_DIR
# 清理临时文件 # 验证部署结果
rm -rf /tmp/admin-deploy /tmp/admin-dist.tar.gz echo "📋 验证部署文件..."
ls -la $ADMIN_DIR/ | head -10
echo "✅ 管理后台部署完成!" echo "✅ 管理后台部署完成!"

View File

@ -1,11 +1,5 @@
# API配置 - 连接到后端 go-zero API # API配置 - 根据环境自动选择
NEXT_PUBLIC_API_URL=http://localhost:8080/api/v1 NEXT_PUBLIC_API_URL=http://localhost:8080/api/v1
# Mock API (仅开发时使用)
NEXT_PUBLIC_MOCK_API_URL=http://localhost:3001/api
# 开发环境配置 # 开发环境配置
NODE_ENV=development NODE_ENV=development
# 启用真实API (临时改为false以解决SSR问题)
NEXT_PUBLIC_USE_REAL_API=false

View File

@ -2,9 +2,7 @@ import axios from 'axios'
// 创建axios实例 // 创建axios实例
const api = axios.create({ const api = axios.create({
baseURL: process.env.NEXT_PUBLIC_USE_REAL_API === 'true' baseURL: process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3001/api',
? (process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8080/api/v1')
: (process.env.NEXT_PUBLIC_MOCK_API_URL || 'http://localhost:3001/api'),
timeout: 10000, timeout: 10000,
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
@ -33,15 +31,11 @@ api.interceptors.request.use(
api.interceptors.response.use( api.interceptors.response.use(
(response) => { (response) => {
// 处理后端API的响应格式: { code: number, message: string, data: any } // 处理后端API的响应格式: { code: number, message: string, data: any }
if (process.env.NEXT_PUBLIC_USE_REAL_API === 'true') { const { code, message, data } = response.data
const { code, message, data } = response.data if (code !== 200) {
if (code !== 200) { return Promise.reject(new Error(message || '请求失败'))
return Promise.reject(new Error(message || '请求失败'))
}
return data // 返回data部分
} }
// Mock API直接返回数据 return data // 返回data部分
return response.data
}, },
(error) => { (error) => {
if (error.response?.status === 401) { if (error.response?.status === 401) {