afcd18c54f
Backend: - Add NotFoundException + BusinessException, return correct HTTP status (404/400) - Add @Index on reports.project_id and reports.upload_time - Add fileSize column to reports, populate on upload, return in DTO - Cascade delete: deleting project now removes all reports (DB + files + PDFs) - Delete report: also clean up pre-rendered PDF - File upload MIME validation (extension + Content-Type) - Remove duplicate @ExceptionHandler from ReportController - Switch from System.err to SLF4J logger - Handle MethodArgumentNotValid, MissingServletRequestPart, etc. Frontend: - Remove all Docker files (project uses 宝塔 panel deployment) - Upgrade axios 1.6.8 -> 1.7.7 (CVE-2024-39338) - Remove unused @vue-office/pptx + vue-demi (see CHANGELOG for rationale) - Fix vite proxy port 37821 -> 30081 - Remove mock data fallback in production - Add upload report UI (button + modal in ProjectDetail) - Add create project UI (button + modal in ProjectList) - Add filename search box in ProjectDetail - New useApi methods: createProject, uploadReport, deleteProject, deleteReport - FilePreview/ReportCard: show fileSize (was undefined before) Docs: - Add README.md (overview, quick start, structure) - Add CHANGELOG.md (full change log + pptx removal rationale) - Include EVALUATION_REPORT.md and blog-vibe-coding.md Tests: - All 73 backend tests pass - All 43 frontend tests pass - Updated test fixtures for new API contract
AI 发布平台 - 部署说明
快速打包
# 方式一:双击运行
deploy\build.bat
# 方式二:PowerShell
powershell -File deploy\package.ps1
输出:deploy/publish_deploy.zip
服务器目录结构
解压 publish_deploy.zip 到 /usr/local/publish_dishboard/,得到:
/usr/local/publish_dishboard/
frontend/
index.html ← 前端入口
server.js ← Node.js 静态服务(端口 30080)
assets/ ← JS / CSS 静态资源
app.jar ← Spring Boot 后端(端口 30081)
database.db ← SQLite 数据库
宝塔面板部署步骤
1. 后端(Java)
- 项目名称:
publish_backend - 项目端口:30081
- 启动文件:
/usr/local/publish_dishboard/app.jar - 运行目录:
/usr/local/publish_dishboard/ - 启动命令:
java -jar app.jar
2. 前端(Node.js)
- 项目名称:
publish_dishboard - 项目端口:30080
- 启动文件:
/usr/local/publish_dishboard/frontend/server.js - 运行目录:
/usr/local/publish_dishboard/frontend/ - 环境变量:
STATIC_DIR=/usr/local/publish_dishboard/frontendUPLOADS_DIR=/usr/local/publish_dishboard/frontend/uploads
3. Nginx 反向代理
# 前端(静态文件 + Vue Router)
location /publish_dishboard/ {
rewrite ^/publish_dishboard(/.*)$ $1 break;
proxy_pass http://127.0.0.1:30080;
}
# 后端 API
location /publish_server/ {
rewrite ^/publish_server(/.*)$ $1 break;
proxy_pass http://127.0.0.1:30081;
}
# API 代理(前端 useApi.js 的 baseURL: '/api')
location /api/ {
rewrite ^/api/(.*) /api/$1 break;
proxy_pass http://127.0.0.1:30081;
}
# 静态资源(前端 assets)
location /assets/ {
alias /usr/local/publish_dishboard/frontend/assets/;
expires 30d;
add_header Cache-Control "public, immutable";
}
# 上传文件(后端存储的封面图等)
location /uploads/ {
proxy_pass http://127.0.0.1:30081/uploads/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
域名访问
- 前端:
https://www.1415243231.top/publish_dishboard - 后端:
https://www.1415243231.top/publish_server
数据库权限
如果遇到 Permission denied on database.db:
chown -R www:www /usr/local/publish_dishboard
chmod -R 755 /usr/local/publish_dishboard
然后重启 Java 项目。
完整部署流程
- 本地运行
deploy\build.bat,生成deploy\publish_deploy.zip - 上传 zip 到 NAS:
/usr/local/publish_dishboard/ - 解压覆盖
- 重启前后端两个项目(宝塔面板操作)
- 访问
https://www.1415243231.top/publish_dishboard