Hexo + GitHub 建站

这个视频讲解的很明晰了,就不重复造轮子了。文字版 点这里

GitHub Actions 自动化

  • 新建workflows脚本
    .github/workflows/文件夹下新建文件deploy.yml,填写内容如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    name: Build and Deploy
    on: [push]
    jobs:
    build-and-deploy:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout 🛎️
    uses: actions/checkout@v3 # If you're using actions/checkout@v3 you must set persist-credentials to false in most cases for the deployment to work correctly.
    with:
    persist-credentials: false

    - name: Install and Build 🔧 # This example project is built using npm and outputs the result to the 'build' folder. Replace with the commands required to build your project, or remove this step entirely if your site is pre-built.
    run: |
    npm install
    npm run build
    env:
    CI: false

    - name: Deploy 🚀 #部署至github-pages所对应仓库
    uses: JamesIves/github-pages-deploy-action@releases/v4
    with:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    BRANCH: master # The branch the action should deploy to.
    FOLDER: public # The folder the action should deploy.

    - name: Docker deploy #通过git部署至自己的服务器对应文件地址
    uses: easingthemes/ssh-deploy@main
    env:
    SSH_PRIVATE_KEY: ${{ secrets.ACCESS_TOKEN }} # ACCESS_TOKEN 为加密参数,于仓库的 Settings-Secrets and variables-Acitons 页面点击 New repository secret 进行添加,确保添加的名称与这里的对应上
    ARGS: "-rlgoDzvc -i --delete"
    SOURCE: "public/"
    REMOTE_HOST: ${{ secrets.REMOTE_HOST }} # REMOTE_HOST 为加密参数
    REMOTE_USER: ${{ secrets.REMOTE_USER }} # REMOTE_USER 为加密参数
    TARGET: ${{ secrets.TARGET }} # TARGET 为加密参数
    推送至仓库后会自动化执行对应脚本。
    此处用到了三个脚本,有兴趣的可自行了解:

Hexo的Docker部署

  • 网站文件夹所在根目录下新建文件 Dockerfile ,输入内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 基于 node 镜像构建
    FROM node:latest
    # 复制 hexo 目录下的数据至容器的 data 目录
    COPY hexo /data/
    # 安装 http-server 模块
    RUN npm install -g http-server
    # 指定工作目录
    WORKDIR /data
    # 运行容器时执行的shell命令:启动 http 服务指向 /data 目录,默认端口为 5000
    CMD [ "http-server","-p","5000" ]

    上传此文件和网站文件至自己服务器
    注:文件的构建方式有多种,此处只是用最简单的方式进行实现,具体构建方式可自行探索。更多指令详见 Dockerfile

  • 连接服务器并进入文件所在地址

    1
    cd /存放文件的地址/
  • 执行Docker镜像构建指令

    1
    docker build -t hexo(镜像名称可自定义)
  • 使用构建的镜像创建容器

    1
    docker run -d -p 5000:5000 -v /root/website_data/hexo:/data --name my-hexo-blog --restart=always hexo

    其中:
    -p 指定访问端口
    -v 映射程序运行数据的文件地址,容器内文件地址不好找,最好自定义文件路径
    --name 定义容器名称
    --restart=always 跟随docker程序自启动
    hexo 自构建镜像名称

添加域名访问

使用代理软件对指定端口以域名形式进行访问,具体操作见这篇文章:Nginx的安装与配置