Files
photography/.gitea/workflows/deploy-frontend.yml
xujiang 72414d0979 feat: 完成后端-管理后台集成及部署配置
🚀 主要功能:
- 完善后端API服务层,实现完整的CRUD操作
- 开发管理后台所有核心页面 (仪表板、照片、分类、标签、用户、设置)
- 完成前后端完全集成,所有API接口正常对接
- 配置完整的CI/CD流水线,支持自动化部署

🎯 后端完善:
- 实现PhotoService, CategoryService, TagService, UserService
- 添加完整的API处理器和路由配置
- 支持Docker容器化部署
- 添加数据库迁移和健康检查

🎨 管理后台完成:
- 仪表板: 实时统计数据展示
- 照片管理: 完整的CRUD操作,支持批量处理
- 分类管理: 树形结构展示和管理
- 标签管理: 颜色标签和统计信息
- 用户管理: 角色权限控制
- 系统设置: 多标签配置界面
- 添加pre-commit代码质量检查

🔧 部署配置:
- Docker Compose完整配置
- 后端CI/CD流水线 (Docker部署)
- 管理后台CI/CD流水线 (静态文件部署)
- 前端CI/CD流水线优化
- 自动化脚本: 部署、备份、监控
- 完整的部署文档和运维指南

 集成完成:
- 所有API接口正常连接
- 认证系统完整集成
- 数据获取和状态管理
- 错误处理和用户反馈
- 响应式设计优化
2025-07-09 16:23:18 +08:00

142 lines
4.9 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

name: 部署前端网站
on:
push:
branches: [ main ]
paths:
- 'frontend/**'
- '.gitea/workflows/deploy-frontend.yml'
workflow_dispatch:
jobs:
test-and-build:
name: 🧪 测试和构建
runs-on: ubuntu-latest
steps:
- name: 📥 检出代码
uses: actions/checkout@v4
- name: 🦀 设置 Bun 环境
uses: oven-sh/setup-bun@v1
with:
bun-version: latest
- name: 📦 安装依赖
working-directory: ./frontend
run: bun install
- name: 🔍 代码检查
working-directory: ./frontend
run: |
bun run lint
bun run type-check
- name: 🧪 运行测试
working-directory: ./frontend
run: bun run test
- name: 🏗️ 构建生产版本
working-directory: ./frontend
env:
NEXT_PUBLIC_API_URL: https://api.photography.iriver.top
NEXT_PUBLIC_SITE_URL: https://photography.iriver.top
NEXT_PUBLIC_SITE_NAME: 摄影作品集
run: bun run build
- name: 📦 打包构建产物
uses: actions/upload-artifact@v3
with:
name: frontend-dist
path: frontend/out/
retention-days: 7
deploy:
name: 🚀 部署到生产环境
runs-on: ubuntu-latest
needs: test-and-build
if: github.ref == 'refs/heads/main'
steps:
- name: 📥 检出代码
uses: actions/checkout@v4
- name: 🦀 设置 Bun 环境
uses: oven-sh/setup-bun@v1
with:
bun-version: latest
- name: 📦 安装依赖
working-directory: ./frontend
run: bun install
- name: 🏗️ 构建生产版本
working-directory: ./frontend
env:
NEXT_PUBLIC_API_URL: https://api.photography.iriver.top
NEXT_PUBLIC_SITE_URL: https://photography.iriver.top
NEXT_PUBLIC_SITE_NAME: 摄影作品集
run: bun run build
- name: 🚀 部署到服务器
run: |
# 安装部署工具
sudo apt-get update && sudo apt-get install -y openssh-client rsync sshpass
# 设置 SSH 环境
export SSHPASS=${{ secrets.ALIYUN_PWD }}
echo "🔗 测试 SSH 连接..."
sshpass -e ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 ${{ secrets.ALIYUN_USER_NAME }}@${{ secrets.ALIYUN_IP }} "echo 'SSH 连接成功'"
echo "📁 创建部署目录..."
sshpass -e ssh -o StrictHostKeyChecking=no ${{ secrets.ALIYUN_USER_NAME }}@${{ secrets.ALIYUN_IP }} "mkdir -p /home/gitea/www/photography"
echo "📦 备份当前版本..."
sshpass -e ssh -o StrictHostKeyChecking=no ${{ secrets.ALIYUN_USER_NAME }}@${{ secrets.ALIYUN_IP }} "
if [ -d '/home/gitea/www/photography' ] && [ \"\$(ls -A /home/gitea/www/photography)\" ]; then
mkdir -p /home/gitea/backups/photography-frontend
tar -czf /home/gitea/backups/photography-frontend/frontend-\$(date +%Y%m%d-%H%M%S).tar.gz -C /home/gitea/www/photography .
echo '✅ 备份完成'
fi
"
echo "🚀 部署新版本..."
sshpass -e rsync -avz --delete --progress -e "ssh -o StrictHostKeyChecking=no" frontend/out/ ${{ secrets.ALIYUN_USER_NAME }}@${{ secrets.ALIYUN_IP }}:/home/gitea/www/photography/
echo "🔐 设置文件权限..."
sshpass -e ssh -o StrictHostKeyChecking=no ${{ secrets.ALIYUN_USER_NAME }}@${{ secrets.ALIYUN_IP }} "
chown -R gitea:gitea /home/gitea/www/photography
chmod -R 755 /home/gitea/www/photography
find /home/gitea/www/photography -type f -name '*.html' -o -name '*.js' -o -name '*.css' -o -name '*.json' | xargs chmod 644
"
echo "🔄 重新加载 Web 服务器..."
sshpass -e ssh -o StrictHostKeyChecking=no ${{ secrets.ALIYUN_USER_NAME }}@${{ secrets.ALIYUN_IP }} "sudo systemctl reload caddy"
echo "✅ 前端部署完成!"
echo "📁 部署路径:/home/gitea/www/photography/"
echo "🌐 访问地址https://photography.iriver.top"
- name: 🔍 健康检查
run: |
echo "🔍 执行健康检查..."
sleep 10
# 检查网站是否可访问
if curl -f -s -o /dev/null https://photography.iriver.top; then
echo "✅ 前端网站访问正常"
else
echo "⚠️ 前端网站访问异常"
exit 1
fi
- name: 📧 发送部署通知
if: always()
run: |
if [ "${{ job.status }}" = "success" ]; then
echo "✅ 摄影作品集前端部署成功!"
echo "🌐 访问地址: https://photography.iriver.top"
else
echo "❌ 摄影作品集前端部署失败!"
fi