解放双手!使用 1Panel 计划任务自动同步 GitHub 静态博客
解放双手!使用 1Panel 计划任务自动同步 GitHub 静态博客
小曹同学解放双手!使用 1Panel 计划任务自动同步 GitHub 静态博客
最近在折腾静态主页,遇到个很烦人的问题:每次在本地改完代码推送到 GitHub 后,还得手动登录服务器,要么重新传文件,要么手动敲一遍 git pull。如果一天改好几次,这操作简直让人崩溃。
而且,如果你尝试直接在 1Panel 或宝塔面板里加一个简单的 git pull 定时任务,大概率会遇到 $HOME not set 或者权限不足的报错。
怎么才能优雅、稳定地让服务器自动拉取 GitHub 上的最新代码呢?
其实只需要利用 SSH 密钥建立信任,再配合一个写好环境变量的 Bash 脚本就能搞定。下面是我实测跑通的完整配置记录,照着抄作业就行。
第一阶段:让服务器与 GitHub 建立信任
想让服务器全自动拉取私有库或免密拉取代码,最好的方式就是配置 SSH 密钥。
1. 生成 SSH 密钥
首先登录你的服务器终端,输入以下命令生成一个 ed25519 算法的密钥:
1 | ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N "" |
💡 提示:这行命令会直接生成密钥,不会一直弹提示让你按回车。
2. 获取公钥内容
接着,查看刚刚生成的公钥并把它完整复制下来:
1 | cat ~/.ssh/id_ed25519.pub |
3. 在 GitHub 中添加密钥
打开 GitHub,进入个人的 Settings (设置) -> SSH and GPG keys。点击 New SSH key,随便取个好记的名字(比如你服务器的备注),Key type 保持默认的 Authentication Key,然后把刚才复制的公钥粘贴进去,点击保存。
第二阶段:面板建站与首次手动拉取
这里我以 1Panel 面板为例(宝塔面板的逻辑也完全一样)。
1. 创建站点
先在 1Panel 的“网站”菜单里,正常创建一个静态站点,把网站目录先准备好。
2. 获取仓库的 SSH 地址
回到 GitHub,在你需要同步的仓库页面,点击绿色的 Code 按钮,切换到 SSH 选项卡,复制那串地址(例如:git@github.com:用户名/仓库名.git)。
⚠️ 注意:一定要提前确认好你需要同步的是哪个分支(比如我这里用的是
static分支)。
3. 首次手动克隆 (非常重要!)
在让脚本自动跑之前,我们需要手动拉取一次,初始化一下 .git 环境。回到服务器终端,cd 进入你刚才在面板里建好的那个网站目录的上一级目录,然后执行:
1 | cd /opt/1panel/www/sites/<网站目录名> |
1 | git clone -b static <你的SSH地址> index |
💡 提示:请把
<你的SSH地址>和<网站目录名>替换成你自己的。这里的-b static就是指定只拉取 static 分支,请按你的实际情况修改。<你的SSH地址> 后的 index 仅1Panel是相同的
第三阶段:配置自动同步脚本
环境都初始化好了,最后一步就是让面板定时去执行更新。前往 1Panel 的 计划任务,新建一个任务:
- 任务名称: 随便填(比如“GitHub 自动同步”)
- 执行周期: 按需填写(比如每 10 分钟或每小时执行一次)
- 执行用户: 选择
root
脚本内容(核心重点):
千万不要只写一句 git pull!为了避免面板执行脚本时找不到环境变量或报权限错误,我优化了下面这个脚本。把下面这段代码复制进去,记得把第 2 步的路径和第 5 步的分支名改成你自己的:
1 |
|
保存并手动执行一次测试。如果日志里弹出了“✅ 更新完成”及时间戳,并且你的网站已经更新了最新内容,那就大功告成了。以后再也不用管它,专心写代码就行!
















