文件
xionggeshop/deploy.sh
2026-09-30 09:34:07 +08:00

65 行
2.1 KiB
Bash

#!/bin/bash
# 雄戈商城自动部署脚本
set -e
DEPLOY_DIR="/www/wwwroot/xgsc.gynhc.com"
LOG_FILE="${DEPLOY_DIR}/runtime/deploy.log"
TARGET_BRANCH="${1:-master}"
DATE=$(date '+%Y-%m-%d %H:%M:%S')
echo "[${DATE}] >>> 开始部署分支: ${TARGET_BRANCH}..." >> "${LOG_FILE}"
cd "${DEPLOY_DIR}"
# 检查是否为 git 仓库
if [ ! -d ".git" ]; then
echo "[${DATE}] 错误: ${DEPLOY_DIR} 尚未初始化为 Git 仓库" >> "${LOG_FILE}"
echo "Git repo not initialized"
exit 1
fi
# 保护敏感配置文件:备份 database.php
if [ -f "application/database.php" ]; then
cp -p application/database.php application/database.php.deploy_bak
fi
# 忽略文件权限与文件模式变动
git config core.fileMode false
# 拉取最新代码并硬重置
echo "[${DATE}] 执行 git fetch origin ${TARGET_BRANCH}..." >> "${LOG_FILE}"
git fetch origin "${TARGET_BRANCH}" >> "${LOG_FILE}" 2>&1
git reset --hard "origin/${TARGET_BRANCH}" >> "${LOG_FILE}" 2>&1
# plan/ 仅本地文档,不入库;清理服务器上历史残留
if [ -d "${DEPLOY_DIR}/plan" ]; then
rm -rf "${DEPLOY_DIR}/plan"
echo "[${DATE}] 已删除 plan/ 目录(不入库)" >> "${LOG_FILE}"
fi
# 恢复敏感配置文件(若被覆盖或缺失)
if [ -f "application/database.php.deploy_bak" ]; then
cp -p application/database.php.deploy_bak application/database.php
rm -f application/database.php.deploy_bak
fi
# 维护关键目录权限与属主
chown -R www:www runtime public/uploads 2>/dev/null || true
chmod -R 777 runtime 2>/dev/null || true
chmod -R 775 public/uploads 2>/dev/null || true
# 平滑重载 PHP-FPM 刷新 OPcache 字节码缓存
if [ -x "/etc/init.d/php-fpm-73" ]; then
if command -v sudo >/dev/null 2>&1; then
sudo -n /etc/init.d/php-fpm-73 reload >> "${LOG_FILE}" 2>&1 || true
else
/etc/init.d/php-fpm-73 reload >> "${LOG_FILE}" 2>&1 || true
fi
fi
COMMIT_INFO=$(git log -1 --pretty=format:"%h - %s (%an, %cd)")
echo "[${DATE}] 当前最新版本: ${COMMIT_INFO}" >> "${LOG_FILE}"
echo "[${DATE}] >>> 部署成功完成" >> "${LOG_FILE}"
echo "Deploy success: ${COMMIT_INFO}"