feat: 更新管理后台部署工作流,优化文件上传和部署步骤
- 移除了压缩构建产物的步骤,直接上传构建文件夹到临时目录。 - 更新了部署步骤,清空旧文件并移动新文件到生产目录,增强了部署的可靠性。 - 新增了部署结果验证步骤,确保文件正确部署。 此更改提升了管理后台的部署效率和可维护性。
This commit is contained in:
@ -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 "✅ 管理后台部署完成!"
|
||||||
|
|
||||||
|
|||||||
@ -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
|
|
||||||
@ -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部分
|
return data // 返回data部分
|
||||||
}
|
|
||||||
// Mock API直接返回数据
|
|
||||||
return response.data
|
|
||||||
},
|
},
|
||||||
(error) => {
|
(error) => {
|
||||||
if (error.response?.status === 401) {
|
if (error.response?.status === 401) {
|
||||||
|
|||||||
Reference in New Issue
Block a user