Featured image of post Hugo 静态博客网站同步到境内服务器加速访问

Hugo 静态博客网站同步到境内服务器加速访问

Cover: 早晨上课路经求是广场所见。 🎞 Lucky SHD400

不少同学都习惯使用 GitHub Pages 托管自己建造的静态博客网站,但是在国内访问速度会比较慢、可能遇到无法访问的情况。本文介绍如何将建造的网站同步到境内服务器,提高访问速度。

1. 准备工作

你需要准备:

  • 一台境内服务器;
  • 一个域名,切记需完成备案工作;
  • 一个 GitHub Pages 站点,使用 Hugo、Jekyll、Hexo 生成的静态网站均可。

2. 配置服务器

2.1 安装 1Panel、rsync

笔者选用 1Panel 作为服务器管理面板,方便管理网站、数据库等服务。你也可以选择其他面板,如宝塔、VestaCP 等,或者直接通过命令行进行操作。

1
2
apt install rsync
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh

2.2 创建站点

使用生成的账号、密码,登陆 1Panel 面板。 网站管理页面 第一次使用此面板请点击自动安装 OpenResty,所有选项保持默认即可;点击“创建网站”按钮,在顶部的网站类型中选择“静态网站”,填入网站域名并点击创建。

在 1Panel 的“网站”选项下打开“证书”标签页,申请证书后即可在网站设置页面使用证书开启 HTTPS 功能。

2.3 添加同步用账户

1
2
3
4
adduser deployuser # 创建一个新的账户用于同步
mkdir /home/deployuser/.ssh
ssh-keygen -t rsa -b 4096 -C "charactex@outlook.com"
touch /home/deployuser/.ssh/authorized_keys

创建 ssh 密钥对时注意填写保存路径为 /home/deployuser/.ssh/id_rsa,并通过下面一行命令将公钥内容添加到 /home/deployuser/.ssh/authorized_keys 文件中:

1
cat /home/deployuser/.ssh/id_rsa.pub >> /home/deployuser/.ssh/authorized_keys

然后配置相关目录的访问权限:

1
2
3
4
chmod 700 /home/deployuser/.ssh/
chmod 600 /home/deployuser/.ssh/authorized_keys
chown -R deployuser:deployuser /home/deployuser/.ssh
chown -R deployuser:deployuser /path/to/your/website

此处最后一行网站保存路径可在 1Panel 面板中查看。

3. 配置 GitHub 仓库

3.1 编写 GitHub Actions 脚本

笔者的网站在每次将本地源代码 push 到 GitHub 后,将由 GitHub Actions 自动完成编译部署工作。向服务器推送编译好的静态网站,也可通过 GitHub Actions 自动完成。

在博客 repo 的根目录下,新建文件 .github/workflows/main.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
name: Sync to server
on:
    push:
        branches:
            - main
jobs:
    build:
        runs-on: ubuntu-latest
        steps:
            - name: checkout
              uses: actions/checkout@v3
              with:
                submodules: true
            - name: Setup Hugo
              uses: peaceiris/actions-hugo@v3
              with:
                hugo-version: '${{ steps.hugo-version.outputs.HUGO_VERSION }}'
                extended: true
            - name: Build
              run: hugo --minify
            - name: Deploy to server
              uses: burnett01/rsync-deployments@5.2
              with:
                switches: -avzr --delete
                path: ./public/
                remote_path:  /your/path/to/web/content/
                remote_host: ${{ secrets.SSH_IP }}
                remote_port: ${{ secrets.SSH_PORT }}
                remote_user: ${{ secrets.SSH_USER }}
                remote_key: ${{ secrets.SSH_PRIVATE_KEY }

如果此前已使用 GitHub Actions 进行自动构建,则只需添加 Deploy to server 步骤即可。

3.2 配置 Secrets

在此仓库的 Secrets 中创建环境变量,位置为 Settings -> Secrets and variables -> Actions -> Manage repository secret

名称内容
SSH_IP服务器 IP 地址
SSH_PORTSSH 端口号
SSH_USER服务器用户名,即刚刚创建的 deployuser
SSH_PRIVATE_KEY私钥内容,即刚刚创建的/home/deployuser/.ssh/id_rsa

注意:remote_path 为服务器上网站的路径,在 1Panel 中,是网站存储目录下的 index 子目录;path 一定要由 / 结尾,代表将该目录下的内容(不包括该目录自身)同步。

保存并提交到 GitHub,即可自动触发同步功能。

4. 配置 DNS 分流

在域名的 DNS 设置中,将来自海外的流量指向 GitHub Pages 官方服务器,将境内流量指向自己的服务器。

注意:使用国内服务器请务必在网站底部添加备案号

将对应端口放开,此时在境内访问网站即解析道内地服务器上,完成加速。