SSH执行拉取

下面实现通过Github action,链接服务器SSH,并在服务器中执行拉取的命令。

获取密钥密码

实现1Panel本地静态文件自动更新,建议使用密钥登录,安全性更高,首先在1Panel中的密钥信息,生成密码和密钥,以便于后面登录:

image-20250725184025195

添加变量

此次添加变量较多,有:SERVER_IP,USERNAME,PASSPHRASE,KEY,PORT五个变量,如下:

  • SERVER_IP:服务器IP
  • USERNAME:SSH链接用户名,一般为root
  • PASSPHRASE:密钥密码,用来提升强度用
  • KEY:密钥
  • PORT:SSH登录端口,一般为22

克隆仓库

此时,需要在服务器手动克隆一次仓库,这样才能获得git配置,后面才可以通过直接在目录下git pull实现增量拉取,相比于克隆一个新的仓库,速度更快。

先创建静态仓库网站,比如yuqi.im,最终的静态目录如下:

image-20250725184225719

在任意目录下克隆一次Blog静态资源仓库,因为1Panel不支持自定义部署目录,所以需要将克隆下来的文件夹内的所有文件,包括.git文件夹,复制到index文件夹内,或者直接在index目录内克隆,这样才能确保后续可以直接在index文件夹内,执行拉取命令,实现文件更新。

如果在前面你选择的是github存储构建产物静态文件,你可以用ghproxy之类的镜像拉取,后面git pull也会走这个链接,但是不太建议,因为一般这种镜像都不太稳定,可能需要频繁更换。

添加工作流

下面就可以修改action实现推送时自动拉取了,在部署的下方添加另一个工作流:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- name: 服务器执行拉取命令
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SERVER_IP }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
passphrase: ${{ secrets.PASSPHRASE }}
port: ${{ secrets.PORT }}
script: |
cd /opt/1panel/www/sites/yuqi.im/index/
git config --global --add safe.directory "$(pwd)"
git fetch --all --depth=1
git reset --hard origin/main
git pull --depth=1
echo "✅ 已拉取 page 分支最新内容"

再次尝试修改并触发,如果一切正常,仓库文件自动触发推送到服务器应该就实现了!

在最下面,这里采用了强制拉取,并且只保留了深度为一的拉取记录,这样可以防止由于文件冲突导致可能拉取不下来的问题,并且控制了拉去的日志文件大小。

参考出处

https://blog.liushen.fun/posts/327826ac