修复服务器端打印字体丢失问题,修复上传脚本打包过大问题
This commit is contained in:
@ -8,53 +8,81 @@ REMOTE_BACKUP_BASE="$REMOTE_DIR/data_copy"
|
|||||||
REMOTE_BACKUP_DIR="$REMOTE_BACKUP_BASE/$TIMESTAMP"
|
REMOTE_BACKUP_DIR="$REMOTE_BACKUP_BASE/$TIMESTAMP"
|
||||||
|
|
||||||
echo "==================================================="
|
echo "==================================================="
|
||||||
echo "🚀 开始增量部署 (仅代码,不影响数据库和图片)"
|
echo "🚀 开始自动化增量部署 (含自我修复与依赖瘦身)"
|
||||||
echo "==================================================="
|
echo "==================================================="
|
||||||
|
|
||||||
# 1. 远端备份 (使用 sudo 提权)
|
# 1. 远端备份与环境急救
|
||||||
echo "[1/4] 正在服务器上备份旧代码并清理多余备份 (可能需要输入服务器密码)..."
|
echo "[1/4] 正在服务器上急救环境并备份旧代码 (可能需要输入密码)..."
|
||||||
ssh -t $SERVER "sudo mkdir -p $REMOTE_BACKUP_DIR && \
|
ssh -t $SERVER "sudo mkdir -p $REMOTE_BACKUP_DIR && \
|
||||||
cd $REMOTE_DIR && \
|
cd $REMOTE_DIR && \
|
||||||
|
echo '>> 检查并修复缺失目录 (防止 tar 崩溃)...' && \
|
||||||
|
sudo mkdir -p inventory-backend inventory-web && \
|
||||||
|
echo '>> 执行代码备份...' && \
|
||||||
sudo tar -czf $REMOTE_BACKUP_DIR/code_backup.tar.gz inventory-backend inventory-web docker-compose.prod.yml && \
|
sudo tar -czf $REMOTE_BACKUP_DIR/code_backup.tar.gz inventory-backend inventory-web docker-compose.prod.yml && \
|
||||||
echo '>> 执行清理:仅保留 data_copy 下最新的 2 个备份...' && \
|
echo '>> 执行清理:仅保留 data_copy 下最新的 2 个备份...' && \
|
||||||
cd $REMOTE_BACKUP_BASE && \
|
cd $REMOTE_BACKUP_BASE && \
|
||||||
sudo sh -c 'ls -dt */ | tail -n +3 | xargs -I {} rm -rf {}'"
|
sudo sh -c 'ls -dt */ 2>/dev/null | tail -n +3 | xargs -I {} rm -rf {} || true'"
|
||||||
|
|
||||||
if [ $? -ne 0 ]; then echo "❌ 服务器备份或清理失败,终止部署!"; exit 1; fi
|
if [ $? -ne 0 ]; then echo "❌ 服务器备份或清理失败,终止部署!"; exit 1; fi
|
||||||
|
|
||||||
# 2. 本地打包 (新增了精准拦截本地图片和本地数据库)
|
# 2. 本地精准打包 (绝对屏蔽垃圾文件)
|
||||||
echo "[2/4] 正在本地打包新代码 (自动剔除本地图片、数据库和缓存)..."
|
echo "[2/4] 正在本地打包新代码 (执行终极瘦身)..."
|
||||||
|
|
||||||
tar -czf deploy.tar.gz \
|
tar -czf deploy.tar.gz \
|
||||||
--exclude='node_modules' \
|
--exclude="*/node_modules" \
|
||||||
--exclude='.venv' \
|
--exclude="*/venv" \
|
||||||
--exclude='venv' \
|
--exclude="*/.venv" \
|
||||||
--exclude='__pycache__' \
|
--exclude="*/__pycache__" \
|
||||||
--exclude='*.pyc' \
|
--exclude="*.pyc" \
|
||||||
--exclude='.git' \
|
--exclude="*/.git" \
|
||||||
--exclude='.idea' \
|
--exclude="*/.idea" \
|
||||||
--exclude='.vscode' \
|
--exclude="*/.vscode" \
|
||||||
--exclude='pgdata_*' \
|
--exclude="inventory-backend/uploads" \
|
||||||
--exclude='uploads_*' \
|
--exclude="inventory-backend/models" \
|
||||||
--exclude='data_copy' \
|
--exclude="inventory-backend/pgdata" \
|
||||||
--exclude='inventory-backend/uploads' \
|
--exclude="inventory-backend/pgdata_docker" \
|
||||||
--exclude='inventory-backend/pgdata' \
|
--exclude="data_copy" \
|
||||||
inventory-backend inventory-web docker-compose.prod.yml
|
inventory-backend inventory-web docker-compose.prod.yml
|
||||||
|
|
||||||
# 3. 传输到生产环境的 /tmp 目录 (避开权限拦截)
|
# 检查压缩包大小是否正常 (如果超过 50MB 则发出警告)
|
||||||
|
FILESIZE=$(stat -c%s "deploy.tar.gz" 2>/dev/null || stat -f%z "deploy.tar.gz")
|
||||||
|
MB_SIZE=$((FILESIZE / 1024 / 1024))
|
||||||
|
echo ">> 打包完成,当前传输包大小: ${MB_SIZE} MB"
|
||||||
|
if [ "$MB_SIZE" -gt 50 ]; then
|
||||||
|
echo "⚠️ 警告:包体积仍大于 50MB,可能存在未排除的大文件,但继续执行..."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 3. 传输到生产环境的 /tmp 目录
|
||||||
echo "[3/4] 正在传输代码到服务器的临时目录..."
|
echo "[3/4] 正在传输代码到服务器的临时目录..."
|
||||||
scp deploy.tar.gz $SERVER:/tmp/deploy.tar.gz
|
scp deploy.tar.gz $SERVER:/tmp/deploy.tar.gz
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "❌ 传输失败!可能是网络中断,终止部署!"
|
||||||
|
rm -f deploy.tar.gz
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# 4. 服务器执行替换与重启 (修复了 docker-compose 找不到命令的问题)
|
# 4. 服务器执行替换与重启
|
||||||
echo "[4/4] 正在生产环境执行热更新 (可能需要输入服务器密码)..."
|
echo "[4/4] 正在生产环境执行热更新 (可能需要输入密码)..."
|
||||||
ssh -t $SERVER "cd $REMOTE_DIR && \
|
ssh -t $SERVER "cd $REMOTE_DIR && \
|
||||||
|
echo '>> 移除历史旧目录...' && \
|
||||||
sudo rm -rf inventory-backend_old inventory-web_old && \
|
sudo rm -rf inventory-backend_old inventory-web_old && \
|
||||||
|
echo '>> 备份当前目录为 old...' && \
|
||||||
(sudo mv inventory-backend inventory-backend_old 2>/dev/null || true) && \
|
(sudo mv inventory-backend inventory-backend_old 2>/dev/null || true) && \
|
||||||
(sudo mv inventory-web inventory-web_old 2>/dev/null || true) && \
|
(sudo mv inventory-web inventory-web_old 2>/dev/null || true) && \
|
||||||
|
echo '>> 部署新代码...' && \
|
||||||
sudo mv /tmp/deploy.tar.gz . && \
|
sudo mv /tmp/deploy.tar.gz . && \
|
||||||
sudo tar -xzf deploy.tar.gz && \
|
sudo tar -xzf deploy.tar.gz && \
|
||||||
|
echo '>> 重启 Docker 容器...' && \
|
||||||
sudo docker compose -f docker-compose.prod.yml up -d --build backend frontend && \
|
sudo docker compose -f docker-compose.prod.yml up -d --build backend frontend && \
|
||||||
sudo rm deploy.tar.gz"
|
sudo rm deploy.tar.gz"
|
||||||
|
|
||||||
echo "==================================================="
|
if [ $? -ne 0 ]; then
|
||||||
echo "✅ 部署完成!请刷新网页查看效果。"
|
echo "❌ 远端启动失败,请检查 Docker 日志!"
|
||||||
echo "==================================================="
|
else
|
||||||
|
echo "==================================================="
|
||||||
|
echo "✅ 部署完美完成!请刷新网页查看效果。"
|
||||||
|
echo "==================================================="
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 扫尾清理本地文件
|
||||||
|
rm -f deploy.tar.gz
|
||||||
BIN
inventory-backend/app/services/print/simhei.ttf
Normal file
BIN
inventory-backend/app/services/print/simhei.ttf
Normal file
Binary file not shown.
Reference in New Issue
Block a user