Archived
refactor: streaming download, Git LFS templates, deploy workflow
- Replace base64 JSON response with StreamingResponseBody (zero-buffer) - Error responses return JSON via GlobalExceptionHandler (400/404) - Add git-lfs track for *.docx to keep repo lean - Add deploy/deploy.sh: one-click build + restart - Add deploy/clean-lfs.sh: periodic LFS cache cleanup - Add deploy/gmp-service.service: systemd service unit - Remove unused ApiResponse and DocxExportData DTOs - Fix build.sh/run.sh jar name (gmp-mock-service -> gmp-service) - Add TemplateNotFoundException for missing templates
This commit is contained in:
+1
-1
@@ -8,7 +8,7 @@ mvn clean package -DskipTests
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "===== 构建成功 ====="
|
||||
JAR_PATH="target/gmp-mock-service.jar"
|
||||
JAR_PATH="target/gmp-service.jar"
|
||||
if [ -f "$JAR_PATH" ]; then
|
||||
SIZE=$(du -h "$JAR_PATH" | cut -f1)
|
||||
echo "JAR 文件: $JAR_PATH ($SIZE)"
|
||||
|
||||
Executable
+74
@@ -0,0 +1,74 @@
|
||||
#!/bin/bash
|
||||
# Git LFS 缓存清理脚本
|
||||
#
|
||||
# 用法:
|
||||
# ./deploy/clean-lfs.sh # 交互式预览
|
||||
# ./deploy/clean-lfs.sh --prune # 执行清理
|
||||
# ./deploy/clean-lfs.sh --force # 强制清理所有缓存
|
||||
#
|
||||
# Git LFS 会把所有历史版本的二进制文件缓存在 .git/lfs/objects/ 下。
|
||||
# 这些缓存不会自动删除,时间久了会占用大量磁盘空间。
|
||||
# 此脚本用于安全地清理不再需要的 LFS 缓存对象。
|
||||
|
||||
set -e
|
||||
|
||||
LFS_DIR="$(git rev-parse --git-dir 2>/dev/null || echo ".git")/lfs/objects"
|
||||
cd "$(git rev-parse --show-toplevel 2>/dev/null || echo ".")"
|
||||
|
||||
echo "===== Git LFS 缓存分析 ====="
|
||||
echo "仓库: $(pwd)"
|
||||
|
||||
# 统计当前缓存大小
|
||||
if [ -d "$LFS_DIR" ]; then
|
||||
CACHE_SIZE=$(du -sh "$LFS_DIR" 2>/dev/null | cut -f1)
|
||||
CACHE_FILES=$(find "$LFS_DIR" -type f 2>/dev/null | wc -l)
|
||||
echo "LFS 缓存目录: .git/lfs/objects/"
|
||||
echo "缓存文件数: ${CACHE_FILES:-0}"
|
||||
echo "缓存总大小: ${CACHE_SIZE:-0}"
|
||||
else
|
||||
echo "LFS 缓存目录不存在,尚无缓存文件。"
|
||||
CACHE_SIZE="0B"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# 检查 git lfs 是否可用
|
||||
if ! git lfs version &>/dev/null; then
|
||||
echo "错误: git lfs 未安装。"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 分析可清理的空间
|
||||
echo "===== 可清理空间分析 ====="
|
||||
git lfs prune --dry-run 2>&1 | head -20
|
||||
|
||||
echo ""
|
||||
|
||||
case "${1:-}" in
|
||||
--prune)
|
||||
echo "===== 执行清理 ====="
|
||||
git lfs prune
|
||||
echo ""
|
||||
# 统计清理后
|
||||
if [ -d "$LFS_DIR" ]; then
|
||||
NEW_SIZE=$(du -sh "$LFS_DIR" 2>/dev/null | cut -f1)
|
||||
echo "清理完成: ${CACHE_SIZE} -> ${NEW_SIZE}"
|
||||
fi
|
||||
;;
|
||||
--force)
|
||||
echo "===== 强制清理所有 LFS 缓存 ====="
|
||||
echo "注意: 这将删除所有不在当前 checkout 中的 LFS 对象。"
|
||||
echo "如果你需要切换回旧版本,LFS 对象会被重新下载。"
|
||||
echo ""
|
||||
git lfs prune --force 2>&1 | tail -5
|
||||
;;
|
||||
*)
|
||||
echo "这是预览模式,未执行任何操作。"
|
||||
echo ""
|
||||
echo "执行清理: bash $0 --prune"
|
||||
echo "强制清理: bash $0 --force"
|
||||
echo ""
|
||||
echo "提示: 定期执行 'git lfs prune' 可以删除旧版本 LFS 缓存。"
|
||||
echo " Git LFS 的默认保留策略是最近 3 天的对象 + 当前 HEAD 可达的对象。"
|
||||
;;
|
||||
esac
|
||||
Executable
+59
@@ -0,0 +1,59 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# gmp-service 一键部署脚本
|
||||
# 用法: ./deploy/deploy.sh
|
||||
#
|
||||
# 它会: 构建 -> 停止旧服务 -> 替换jar -> 启动新服务
|
||||
|
||||
set -e
|
||||
|
||||
PROJECT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
SERVICE_NAME="gmp-service"
|
||||
JAR_SRC="$PROJECT_DIR/target/gmp-service.jar"
|
||||
JAR_DST="/opt/$SERVICE_NAME/gmp-service.jar"
|
||||
LOG_DIR="/var/log/$SERVICE_NAME"
|
||||
|
||||
echo "===== 1. Maven 构建 ====="
|
||||
cd "$PROJECT_DIR"
|
||||
mvn clean package -DskipTests
|
||||
|
||||
if [ ! -f "$JAR_SRC" ]; then
|
||||
echo "构建失败,未生成 JAR 文件"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "===== 2. 停止旧服务 ====="
|
||||
if systemctl is-active --quiet "$SERVICE_NAME"; then
|
||||
sudo systemctl stop "$SERVICE_NAME"
|
||||
echo "旧服务已停止"
|
||||
else
|
||||
echo "服务未运行,跳过"
|
||||
fi
|
||||
|
||||
echo "===== 3. 部署新 JAR ====="
|
||||
sudo mkdir -p /opt/$SERVICE_NAME "$LOG_DIR"
|
||||
sudo cp "$JAR_SRC" "$JAR_DST"
|
||||
sudo chmod 644 "$JAR_DST"
|
||||
|
||||
echo "===== 4. 启动服务 ====="
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable "$SERVICE_NAME"
|
||||
sudo systemctl start "$SERVICE_NAME"
|
||||
|
||||
echo "===== 等待服务启动 ====="
|
||||
sleep 3
|
||||
|
||||
if systemctl is-active --quiet "$SERVICE_NAME"; then
|
||||
echo "服务已成功启动!"
|
||||
systemctl status "$SERVICE_NAME" --no-pager | head -15
|
||||
else
|
||||
echo "服务启动失败,查看日志: sudo journalctl -u $SERVICE_NAME -n 50 --no-pager"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "部署完成!"
|
||||
echo " 服务: $SERVICE_NAME"
|
||||
echo " JAR: $JAR_DST"
|
||||
echo " 日志: journalctl -u $SERVICE_NAME -f"
|
||||
echo " 端口: $(grep 'server.port' "$PROJECT_DIR/src/main/resources/application.yml" 2>/dev/null || echo '6666')"
|
||||
@@ -0,0 +1,19 @@
|
||||
[Unit]
|
||||
Description=GMP Mock Service - Spring Boot Application
|
||||
Documentation=
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=agentuser
|
||||
WorkingDirectory=/opt/gmp-service
|
||||
ExecStart=/usr/bin/java -Xms256m -Xmx512m -jar /opt/gmp-service/gmp-service.jar
|
||||
ExecStop=/bin/kill -SIGTERM $MAINPID
|
||||
SuccessExitStatus=143
|
||||
Restart=on-failure
|
||||
RestartSec=10
|
||||
StandardOutput=append:/var/log/gmp-service/stdout.log
|
||||
StandardError=append:/var/log/gmp-service/stderr.log
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
JAR_PATH="target/gmp-mock-service.jar"
|
||||
JAR_PATH="target/gmp-service.jar"
|
||||
|
||||
if [ ! -f "$JAR_PATH" ]; then
|
||||
echo "JAR 文件不存在,请先执行 build.sh 进行构建"
|
||||
|
||||
Reference in New Issue
Block a user