介绍

在服务器上配置好 SSH 协议后,可以使用 Git 将仓库推送到服务器并使用钩子执行构建网站操作。rsync 方案要求平台必须支持,但 Windows 上默认并没有,Git for Windows 中也不带。使用 Git 仓库推送可以最小化需要传输的文件大小,并且可以增量传输,较为方便。

环境

  • Windows 11 23H2
  • Git for Windows 2.41.0
  • Hugo 0.84.0

服务器

参考 博客迁移到 Ubuntu 22.04 - 狂飙 搭建好网站。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 创建远程仓库
git init --bare networm.me.git

# 下载 Hugo 并解压
wget https://github.com/gohugoio/hugo/releases/download/v0.84.0/hugo_0.84.0_Linux-64bit.tar.gz
tar -zxvf hugo_0.84.0_Linux-64bit.tar.gz

# 创建推送钩子
vi networm.me.git/hooks/post-receive
chmod +x networm.me.git/hooks/post-receive
sh networm.me.git/hooks/post-receive

在服务器中手动执行以上步骤,其中 networm.me.git/hooks/post-receive 文件内容如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/bin/sh

set -x

SITE=/home/networm/networm.me
HUGO=/home/networm/hugo
DESTINATION=/var/www/networm.me/html/

mkdir -p $SITE
git --work-tree $SITE clean -df
git --work-tree $SITE checkout --force
$HUGO --source $SITE --gc --cleanDestinationDir --destination $DESTINATION

本地

setup.sh

1
git remote add website networm@networm.me:/home/networm/networm.me.git

deploy.sh

1
git push --force website

将以上内容分别存为对应的文件,方便后续迁移到不同设备重新初始化使用。之后在部署时只需要执行 deploy.sh 即可。

 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
$ sh deploy.sh
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 8 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 1.71 KiB | 1.71 MiB/s, done.
Total 6 (delta 2), reused 0 (delta 0), pack-reused 0
remote: + SITE=/home/networm/networm.me
remote: + HUGO=/home/networm/hugo
remote: + mkdir -p /home/networm/networm.me
remote: + git --work-tree /home/networm/networm.me clean -df
remote: + git --work-tree /home/networm/networm.me checkout --force
remote: + /home/networm/hugo --source /home/networm/networm.me --gc --cleanDestinationDir
remote: Start building sites …
remote: hugo v0.84.0-2C4689F7B linux/amd64 BuildDate=2021-06-18T17:14:27Z VendorInfo=gohugoio
remote:
remote:                    | ZH-CN
remote: -------------------+--------
remote:   Pages            |   753
remote:   Paginator pages  |     0
remote:   Non-page files   |     0
remote:   Static files     |    63
remote:   Processed images |     0
remote:   Aliases          |   265
remote:   Sitemaps         |     1
remote:   Cleaned          |     0
remote:
remote: Total in 2590 ms
To networm.me:/home/networm/networm.me.git
   dea739e..7487825  master -> master

预览

hugo.sh

1
2
3
#!/bin/sh

../hugo_extended_0.84.0_Windows-64bit/hugo.exe server --buildDrafts

使用相对路径引用 hugo 并指定构建草稿,方便本地测试。