版权属于:
Ginkgo
本文链接:
https://www.imao2.com/article/218.html(转载时请注明本文出处及文章链接)
作品采用:
本想实现 结合 gitee 的 webhook 来实现提交代码自动更新 1panel 上代码的,因为已经有在用的代码已经部署上去了,所以不能一开始就干脆用 git clone 后 git pull 来同步更新。不过我在部署后,有改项目中的一些配置文件和 .env 之类的文件,直接拉取更新也不合适。后来和Ai对话了很久,Ai很啰嗦,最后我选择了,在项目中创建 sh 命令文件,然后去脚本库添加该文件来解决我每次都需要打包zip后上传再解压更新的问题。
在 /opt/1panel/www/sites/xxx.com/ 中创建一个 deploy 目录,和 index 目录同级,然后去拉取gitee仓库的代码。
在 deploy 目录中点击终端按钮,打开后,执行:
ssh-keygen -t ed25519 -C "server-deploy"
再执行:
cat ~/.ssh/id_ed25519.pub
把值复制出来,贴到 gitee 个人配置的ssh配置那边去
同意在 终端 弹窗中 ,执行 git clone git@gitee.com:xxxx.git ,拉取代码下拉。
创建 deploy.sh 文件,内容
#!/bin/bash
set -e
BASE="/opt/1panel/www/sites/xxx.com"
REPO="$BASE/deploy/co-package"
SITE="$BASE/index"
LOG="$BASE/deploy/deploy.log"
LOCK_FILE="/tmp/co-package-deploy.lock"
# 防止重复部署
exec 200>"$LOCK_FILE"
flock -n 200 || {
echo "已有部署正在进行,本次部署退出"
exit 1
}
# 日志
exec > >(tee -a "$LOG") 2>&1
echo ""
echo "========================================"
echo "开始部署:$(date '+%Y-%m-%d %H:%M:%S')"
echo "========================================"
cd "$REPO"
echo "[1/5] 拉取 Gitee 最新代码..."
git fetch origin master
git reset --hard origin/master
echo "[2/5] 同步 app..."
rsync -av --delete \
"$REPO/admin/app/" \
"$SITE/app/"
echo "[3/5] 同步 public/index.html..."
rsync -av \
"$REPO/admin/public/index.html" \
"$SITE/public/index.html"
echo "[4/5] 同步 public/assets..."
rsync -av --delete \
"$REPO/admin/public/assets/" \
"$SITE/public/assets/"
echo "[5/5] 同步 database/migrations..."
rsync -av \
"$REPO/admin/database/migrations/" \
"$SITE/database/migrations/"
echo "代码同步完成"
echo "开始执行数据库迁移..."
docker exec php_8030 \
php /www/sites/xxx.com/index/think migrate:run
echo "数据库迁移完成"
echo ""
echo "========================================"
echo "部署成功:$(date '+%Y-%m-%d %H:%M:%S')"
echo "========================================"可以看到我只想同步 gitee 仓库中 admin 下部分代码到我现在部署的index文件夹中,所以这么写,实际你想要怎么同步,可以问AI来改。
在 1panel 中,左侧点击 计划任务菜单,进来后点击【脚本库】Tab,然后输入脚本内容:
#!/bin/bash
cd /opt/1panel/www/sites/xxx.com/deploy || exit 1
/opt/1panel/www/sites/xxx.com/deploy/deploy.sh
至此就完成了,下次推送多次代码后,想更新了,直接来这边执行这个脚本就行。