---
title: 使用GitHub推送Hexo到服务器
categories: 建站手札
cover: https://pic.biss.click/image/e0a08509-dea4-4af7-bafa-c81ca9d1cf8d.webp
series: webcustom
tags: 网站
abbrlink: ce1ec3fe
summary: >-
  这篇文章介绍了如何使用GitHub推送Hexo到服务器，包括建立GitHub仓库、上传文件、创建Action以及配置环境变量等步骤。首先，文章提供了在香港直连GitHub的方法，并指导如何在本地安装git、配置用户名和邮箱、创建SSH
  Key并在GitHub上上传公钥。接着，文章详细说明了如何在自己的hexo根目录下初始化git仓库，并使用PowerShell将文件推送到新建的私有仓库。此外，文章还创建了一个Action，用于自动化部署过程，包括检查分支、缓存项目、安装Node和Hexo、安装依赖、清理文件树、生成静态文件并压缩、部署到服务器等环节。最后，文章列出了需要配置的环境变量，如服务器IP、用户名、密钥密码、私钥和SSH登录端口，并强调了测试的重要性，以确保整个部署流程无报错。
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无报错即可。