升鮮寶 SCM 一體化自動化部署體系説明
🚀 升鮮寶 SCM 一體化自動化部署體系説明
作者:杭州升鮮寶科技有限公司
版本:v1.0
日期:2025-11-09
🧱 一、部署體系總覽
本部署體系用於在服務器上一鍵完成:
• ✅ 前端自動構建與發佈(admin / cus)
• ✅ 後端 JAR 自動部署與重啓(admin-api / cus-api)
• ✅ 自動註冊 systemd 服務
• ✅ 自動檢測 Nginx 配置與重載
• ✅ 全流程日誌記錄與自動備份
📂 二、目錄結構説明
/opt/deploy/ # 部署腳本主目錄
│
├── setup_all.sh # 一鍵全站自動化部署腳本
├── setup_systemd_services.sh # 自動創建並註冊後端 systemd 服務
├── auto_build_frontend.sh # 前端打包 + 部署腳本
├── auto_deploy_all.sh # 前後端一體化部署腳本
├── reload_nginx_env.sh # Nginx 環境切換與重載腳本
└── README_DEPLOY.md # 本文檔
前端、後端與網站目錄結構如下:
/opt/projects/
├── frontend/
│ ├── admin/ # 管理端 Vue 項目
│ └── cus/ # 客户端 Vue 項目
└── backend/
├── admin-api/ # 管理端 Spring Boot 項目
└── cus-api/ # 客户端 Spring Boot 項目
/website/
└── sxbscm.sxbscm.com/
├── admin/ # 管理端前端部署目錄
├── cus/ # 客户端前端部署目錄
└── backup_YYYYMMDD_HHMMSS/ # 自動備份文件夾
⚙️ 三、腳本功能説明
文件名 説明
setup_systemd_services.sh 自動檢測後端 JAR 路徑和端口,生成並註冊 systemd 服務(sxb-admin-api / sxb-cus-api)
auto_build_frontend.sh 構建並部署前端 Vue 項目,支持多環境(dev/test/prod),自動備份舊版本
auto_deploy_all.sh 自動完成前端部署 + 後端 JAR 更新 + 服務重啓 + Nginx 檢查重載
reload_nginx_env.sh 按環境(dev/test/prod)切換到對應 Nginx 配置並 reload
setup_all.sh 主控腳本,按順序執行上述四個腳本,實現整站一鍵上線
🪜 四、執行順序
步驟 腳本 功能描述
① setup_systemd_services.sh 註冊並啓動後端 systemd 服務
② auto_build_frontend.sh 構建 & 部署前端靜態文件
③ auto_deploy_all.sh 一體化部署後端 JAR、重啓服務、刷新 Nginx
④ reload_nginx_env.sh 切換當前環境配置並 reload Nginx
🌟 setup_all.sh 一鍵執行所有流程(推薦使用)
🌍 五、常用命令
1️⃣ 一鍵全站部署
sudo bash /opt/deploy/setup_all.sh prod
2️⃣ 單獨構建前端
sudo bash /opt/deploy/auto_build_frontend.sh prod
3️⃣ 單獨更新後端
sudo bash /opt/deploy/auto_deploy_all.sh prod
4️⃣ 重新註冊 systemd 服務
sudo bash /opt/deploy/setup_systemd_services.sh
5️⃣ 切換 Nginx 環境(dev/test/prod)
sudo bash /opt/deploy/reload_nginx_env.sh test
🧩 六、systemd 服務説明
服務名 端口 文件路徑 啓動命令
sxb-admin-api 8754 /etc/systemd/system/sxb-admin-api.service systemctl restart sxb-admin-api
sxb-cus-api 8766 /etc/systemd/system/sxb-cus-api.service systemctl restart sxb-cus-api
日誌目錄:
/var/log/sxbscm/
├── sxb-admin-api.out.log
├── sxb-admin-api.err.log
├── sxb-cus-api.out.log
└── sxb-cus-api.err.log
查看日誌:
tail -f /var/log/sxbscm/sxb-admin-api.out.log
🔧 七、Nginx 環境配置
環境文件:
/etc/nginx/conf.d/
├── sxbscm.sxbscm.com.conf # 生產環境
├── sxbscm.sxbscm.com.dev.conf # 開發環境
├── sxbscm.sxbscm.com.test.conf # 測試環境
└── include/ # 公共配置片段 (gzip、cache、cors、proxy_headers)
切換環境命令:
sudo bash /opt/deploy/reload_nginx_env.sh prod
🔁 八、恢復與回滾
前端回滾:
- 查看備份目錄:
ls /website/backup_*/ - 恢復舊版本:
cp -r /website/backup_20251109_101200/admin_old/* /website/sxbscm.sxbscm.com/admin/
systemctl reload nginx
後端回滾: - 找到備份的舊 JAR:
/opt/projects/backend/admin-api/target/admin-api.jar.20251109_101200.bak - 恢復命令:
mv admin-api.jar.20251109_101200.bak admin-api.jar
systemctl restart sxb-admin-api
🧾 九、自動化與持續集成建議
可將 setup_all.sh 集成到 Jenkins / GitLab CI / Cron:
每天凌晨3點自動全站部署
0 3 * * * /opt/deploy/setup_all.sh prod >> /var/log/nginx/deploy_cron.log 2>&1
🧠 十、部署常見問題(FAQ)
問題 原因 解決方案
前端訪問 404 Vue history 模式未重定向 確保 Nginx 配置中 try_files $uri /index.html;
JAR 啓動失敗 Java 環境異常或端口占用 java -version 檢查環境;ss -lntp | grep 8754 檢查端口
Nginx reload 失敗 配置語法錯誤 nginx -t 檢查錯誤行
無法訪問 HTTPS 證書路徑錯誤 核對 /mnt/ssl/sxbscm.sxbscm.com/ 證書文件
🧾 十一、版本與維護
日期 更新內容 維護人
2025-11-09 初始化自動化部署體系 (v1.0) 杭州升鮮寶科技有限公司 DevOps 組
✅ 十二、總結
本自動化體系實現: - 一條命令完成全站部署
- 自動備份 & 日誌追蹤
- 前後端統一管理
- 多環境切換與安全隔離
- 適用於多租户 SaaS / SCM / OMS 平台
💡 推薦部署入口:
sudo bash /opt/deploy/setup_all.sh prod
自動完成:註冊 → 構建 → 部署 → 切換 → 上線。
✅ 主配置:/etc/nginx/conf.d/sxbscm.sxbscm.com.conf
sxbscm.sxbscm.com - 生產環境 Nginx 配置
HTTP 自動跳轉到 HTTPS
server {
listen 80;
server_name sxbscm.sxbscm.com;
return 301 https://\(host\)request_uri;
}
HTTPS 主站配置
server {
listen 443 ssl http2;
server_name sxbscm.sxbscm.com;
# ===== SSL證書 =====
ssl_certificate /mnt/ssl/sxbscm.sxbscm.com/sxbscm.sxbscm.com.crt;
ssl_certificate_key /mnt/ssl/sxbscm.sxbscm.com/sxbscm.sxbscm.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_session_cache shared:SSL:10m;
ssl_prefer_server_ciphers on;
# ===== 日誌 =====
access_log /var/log/nginx/sxbscm.sxbscm.com.access.log;
error_log /var/log/nginx/sxbscm.sxbscm.com.error.log;
# ===== 公共引入文件 =====
include /etc/nginx/conf.d/include/gzip.conf;
include /etc/nginx/conf.d/include/cache_static.conf;
# ===== 管理端前端頁面 =====
location /admin {
root /website/sxbscm.sxbscm.com;
index index.html;
try_files $uri $uri/ /admin/index.html;
}
# ===== 客户端前端頁面 =====
location /cus {
root /website/sxbscm.sxbscm.com;
index index.html;
try_files $uri $uri/ /cus/index.html;
}
# ===== 管理端 API =====
location /api/admin/ {
proxy_pass http://127.0.0.1:8754/;
include /etc/nginx/conf.d/include/proxy_headers.conf;
include /etc/nginx/conf.d/include/cors.conf;
}
# ===== 客户端 API =====
location /api/cus/ {
proxy_pass http://127.0.0.1:8766/;
include /etc/nginx/conf.d/include/proxy_headers.conf;
include /etc/nginx/conf.d/include/cors.conf;
}
# ===== 默認跳轉 =====
location / {
return 301 https://$host/admin;
}
}
🧩 公共引入文件
gzip on;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss image/svg+xml;
gzip_vary on;
gzip_disable "MSIE [1-6].";
/etc/nginx/conf.d/include/cache_static.conf
location ~* .(js|css|png|jpg|jpeg|gif|ico|svg|woff2?|ttf|eot|mp4)$ {
expires 30d;
access_log off;
add_header Cache-Control "public, max-age=2592000";
}
/etc/nginx/conf.d/include/proxy_headers.conf
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 60s;
proxy_read_timeout 120s;
/etc/nginx/conf.d/include/cors.conf
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, PUT, DELETE, OPTIONS';
add_header Access-Control-Allow-Headers 'Authorization,Content-Type';
if ($request_method = OPTIONS) {
return 204;
}
🧭 前端部署路徑
/website/sxbscm.sxbscm.com/
├── admin/ ← Vue 管理端構建輸出
└── cus/ ← Vue 客户端構建輸出
🔧 啓動命令
sudo nginx -t # 檢查語法
sudo systemctl reload nginx # 平滑重載配置
sudo systemctl restart nginx # 重啓服務
🌍 驗證訪問
| 地址 | 功能 |
|---|---|
| https://sxbscm.sxbscm.com/admin | 管理端前端頁面 |
| https://sxbscm.sxbscm.com/api/admin/** | 管理端後端 API |
| https://sxbscm.sxbscm.com/cus | 客户端訂貨端頁面 |
| https://sxbscm.sxbscm.com/api/cus/** | 客户端後端 API |