---
title: 使用GitHub推送hexo到服务器
categories: 建站手札
series: webcustom
tags: 网站
abbrlink: ce1ec3fe
summary: >-
  使用GitHub Actions自动部署Hexo到服务器的步骤如下： 1. **在本地安装git**：确保你的计算机上已经安装了Git。 2.
  **配置git用户信息**：在终端或Git Bash中配置你的用户名和邮箱： ```bash git config --global user.name
  "yourname" git config --global user.email "youremail@example.com" ``` 使用 `git
  config --list` 命令查看当前所有的配置。 3.
  **在GitHub上创建账号**：如果你还没有GitHub账号，需要先在GitHub上注册一个。 4. **创建SSH Key**：在本地生成SSH
  Key，并将公钥添加到GitHub账号中： ```bash ssh-keygen -t rsa -C "youremail@example.com" ```
  按照提示操作，最后会在 `~/.ssh` 目录下生成 `id_rsa`
date: 2025-08-18 17:10:18
---

1panel没有宝塔的webhook功能，之前一直使用在服务器上建立裸仓库，直接推送到服务器的方法。现在找到一种新的方法。
# 建立GitHub仓库
因为服务器部署在香港，可以直连GitHub，国内可以使用gitee或者GitHub镜像加速。
1. 在本地安装git
2. 打开git bash配置用户名和邮箱
    ```bash
    git config --global user.name "yourname"
    git config --global user.email "youremail"
    ```
    可以使用 git config --list查看当前所有的配置

3. 在github上创建自己的账号（在自己的电脑和服务器上）
4. 创建SSH Key
    a:打开Git Bash，输入pwd查看当前路径
    b.输入`ssh-keygen -t rsa –C “youremail@example.com”`
    (输入完毕后程序同时要求输入一个密语字符串(passphrase)，空表示没有密语。接着会让输入2次口令(password)，空表示没有口令。3次回车即可完成当前步骤)
    <center>
    <img src="https://pic.biss.click/i/2025/08/18/924058.webp" alt="924058.webp">
    </center>
5. 在GitHub上传自己的公钥
    <center><img src="https://pic.biss.click/i/2025/08/18/946620.webp" alt="946620.webp"></center>
6. 新建一个私有仓库

# 上传文件到仓库
在自己hexo根目录下使用`powershell`，输入`git init`，然后git push到之前自己新建的仓库。

# 创建Action
## 创建Action

```yml
name: 自动部署

on:
  push:
    branches:
      - main 

  release:
    types:
      - published

  workflow_dispatch:

env:
  TZ: Asia/Shanghai

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - name: 检查分支
      uses: actions/checkout@v3
      with:
        ref: main

    - name: 缓存项目 npm 包
      id: cache-node-modules
      uses: actions/cache@v3
      with:
        path: node_modules
        key: ${{ runner.os }}-nodeModules-${{ hashFiles('package-lock.json') }}-${{ hashFiles('package.json') }}
        restore-keys: |
          ${{ runner.os }}-nodeModules-

    - name: 安装 Node
      uses: actions/setup-node@v3
      with:
        node-version: "20.x"

    - name: 安装 Hexo
      run: |
        npm install hexo-cli --global

    - name: 安装依赖
      if: steps.cache-node-modules.outputs.cache-hit != 'true'
      run: |
        npm install

    - name: 清理文件树
      run: |
        npm run clean

    - name: 生成静态文件并压缩
      run: |
        npm run build

    - name: 部署
      run: |
        cd ./public
        git init
        git config user.name "${{ github.actor }}"
        git config user.email "${{ github.actor }}@users.noreply.github.com"
        git add .
        git commit -m "${{ github.event.head_commit.message }}··[$(date +"%Z %Y-%m-%d %A %H:%M:%S")]"
        git push --force --quiet "https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git" master:page
    - 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/apps/openresty/openresty/www/sites/blog.liushen.fun/index/
            git config --global --add safe.directory "$(pwd)"
            git fetch --all --depth=1
            git reset --hard origin/main
            git pull --depth=1
            echo "✅ 已拉取 page 分支最新内容"
```
## 环境变量
此次添加变量较多，有：`SERVER_IP`，`USERNAME`，`PASSPHRASE`，`KEY`，`PORT`五个变量，如下：

`SERVER_IP`：服务器IP
`USERNAME`：SSH链接用户名，一般为root
`PASSPHRASE`：密钥密码，用来提升强度用
`KEY`：密钥(私钥)
`PORT`：SSH登录端口，一般为22
# 测试
运行一下这个Action无报错即可。