Files
cloud-chip.cn/deploy.sh
T

104 lines
3.1 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# 部署脚本
# 路径: /www/wwwroot/cloud-chip.cn/deploy.sh
# 非交互环境(WebHook 插件 / 计划任务 / cron)的 PATH 往往不全,
# 会导致 git、php 找不到(表现就是 "git: command not found")。
# 这里先把常见目录补进 PATH,再在缺失时自动定位并临时软链到 /usr/local/bin。
export PATH="/usr/local/bin:/usr/bin:/bin:/sbin:$PATH"
for _cmd in git php; do
if ! command -v "$_cmd" >/dev/null 2>&1; then
_bin=$(find / -type f -name "$_cmd" 2>/dev/null | grep -E "/bin/$_cmd\$" | head -1)
[ -n "$_bin" ] && ln -sf "$_bin" /usr/local/bin/"$_cmd" 2>/dev/null
fi
done
unset _cmd _bin
# 配置项
SOURCE_DIR="/www/wwwroot/cloud-chip.cn"
PUBLIC_DIR="/www/wwwroot/cloud-chip.cn/public"
LOG_FILE="/www/wwwroot/cloud-chip.cn/deploy.log"
# 记录日志函数
log_message() {
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$timestamp] $1" >> "$LOG_FILE"
}
# 解决 Git 2.35.2+ 的「dubious ownership」拦截:把本仓库加入安全目录白名单
# (Webhook 进程用户与仓库所有者不一致时会 fatal 报错,加这一行即可)
git config --global --add safe.directory "$SOURCE_DIR" 2>/dev/null || true
# 主逻辑
log_message "开始部署..."
# 进入源码目录
cd "$SOURCE_DIR" || {
log_message "错误: 无法进入源码目录 $SOURCE_DIR"
exit 1
}
# 拉取最新代码
log_message "拉取最新代码..."
git -c safe.directory="$SOURCE_DIR" pull origin main
if [ $? -eq 0 ]; then
log_message "代码拉取成功"
else
log_message "错误: 代码拉取失败"
exit 1
fi
# 清除并重建配置缓存:改了 config/* 后必须执行,否则 Laravel 仍读旧缓存,修改不生效
# 注意:若以 root 执行,生成的 bootstrap/cache/config.php 归 root 所有;
# 若 PHP-FPM 以 www 运行,请确保该文件对 www 可读(或部署后统一 chown -R www:www
log_message "重建配置缓存..."
php artisan config:clear
php artisan config:cache
if [ $? -eq 0 ]; then
log_message "配置缓存已重建"
else
log_message "警告: 配置缓存重建失败(请检查 php 是否在 PATH 中,或 config 含闭包无法缓存)"
fi
# 安装依赖(如果需要)
# log_message("安装依赖...")
# npm install
# if [ $? -eq 0 ]; then
# log_message("依赖安装成功")
# else
# log_message("错误: 依赖安装失败")
# exit 1
# fi
# 构建项目(如果需要)
# log_message("构建项目...")
# npm run build
# if [ $? -eq 0 ]; then
# log_message("项目构建成功")
# else
# log_message("错误: 项目构建失败")
# exit 1
# fi
# 复制到运行目录(如果需要)
# log_message("复制到运行目录...")
# cp -r dist/* "$PUBLIC_DIR"/
# if [ $? -eq 0 ]; then
# log_message("文件复制成功")
# else
# log_message("错误: 文件复制失败")
# exit 1
# fi
# 重启服务(如果需要)
# log_message("重启服务...")
# systemctl restart nginx
# if [ $? -eq 0 ]; then
# log_message("服务重启成功")
# else
# log_message("错误: 服务重启失败")
# exit 1
# fi
log_message "部署完成!"
exit 0