一个专注于IT互联网运维的技术博客

用Hugo搭建个人博客之使用Git同步网站资源

2019.05.18

上一篇 用Hugo搭建个人博客之Hugo快速入门在本地主机上安装了 Hugo 并生成了静态的 Web 资源文件,现在需要将这些资源文件同步到 Web 服务器以便发布资源。这里使用 git 同步这些资源,在 Web 服务器上创建 git 仓库,然后在本地主机上 git clone克隆仓库、git push推送 Hugo 生成的 Web 资源文件到 Web 服务器,就可以完成网站资源的同步。

1、服务器上创建 git 仓库

登录 ECS 服务器,创建 git 仓库。这里使用 hook 钩子实现 Git 仓库与项目文件分离,Git 仓库在/u01/data/hugo/public.git/目录,不存放资源文件,只做版本控制;HTML 资源文件在/u01/data/hugo/html目录,完全公开,同时也是 Web 服务器的根目录:

[admin@ityoudao ~]$ cd /u01/data/hugo/
[admin@ityoudao hugo]$ git init --bare public.git
初始化空的 Git 版本库于 /u01/data/hugo/public.git/
[admin@ityoudao hugo]$ mkdir html
[admin@ityoudao hugo]$ ll
总用量 8
drwxrwxr-x 7 admin admin 4096 5月  17 22:42 public.git
drwxrwxr-x 2 admin admin 4096 5月  17 22:43 html
[admin@ityoudao hugo]$ cd public.git/
[admin@ityoudao public.git]$ ll
总用量 32
drwxrwxr-x 2 admin admin 4096 5月  17 22:42 branches
-rw-rw-r-- 1 admin admin   66 5月  17 22:42 config
-rw-rw-r-- 1 admin admin   73 5月  17 22:42 description
-rw-rw-r-- 1 admin admin   23 5月  17 22:42 HEAD
drwxrwxr-x 2 admin admin 4096 5月  17 22:42 hooks
drwxrwxr-x 2 admin admin 4096 5月  17 22:42 info
drwxrwxr-x 4 admin admin 4096 5月  17 22:42 objects
drwxrwxr-x 4 admin admin 4096 5月  17 22:42 refs
[admin@ityoudao public.git]$ cat hooks/post-receive 
#!/bin/sh
git --work-tree=/u01/data/hugo/html --git-dir=/u01/data/hugo/public.git checkout -f
EOF
[admin@ityoudao public.git]$ chmod +x hooks/post-receive

2、本地 git clone 和 git push

在安装 Hugo 静态网站生成器的本地主机上使用 git clone 克隆仓库:

ityoudao:~ wxy$ cd blog/
ityoudao:blog wxy$ rm -rf public/
ityoudao:blog wxy$ git clone ssh://admin@www.ityoudao.cn:666/u01/data/hugo/public.git
正克隆到 'public'...
warning: 您似乎克隆了一个空仓库。

写入一个测试文件,然后使用git push推送到服务器上的 Git 仓库:

ityoudao:blog wxy$ cd public/
ityoudao:public wxy$ ll
total 0
drwxr-xr-x   3 wxy  staff   96  5 17 22:48 ./
drwxr-xr-x  15 wxy  staff  480  5 17 22:48 ../
drwxr-xr-x   9 wxy  staff  288  5 17 22:48 .git/
ityoudao:public wxy$ echo "Hello hugo~~~" > hello.html
ityoudao:public wxy$ git add -A
ityoudao:public wxy$ git commit -m "init"
[master 4e97e89] init
 1 file changed, 1 insertion(+)
 create mode 100644 hello.html
ityoudao:public wxy$ git push
枚举对象: 4, 完成.
对象计数中: 100% (4/4), 完成.
写入对象中: 100% (3/3), 243 bytes | 243.00 KiB/s, 完成.
总共 3 (差异 0),复用 0 (差异 0)
To ssh://www.ityoudao.cn:666/u01/data/hugo/public.git
   babf3a5..4e97e89  master -> master

3、检查 git 服务器是否 git push 成功

push 推送的 HTML 资源文件在/u01/data/hugo/html目录:

[admin@ityoudao hugo]$ ll public.git/
总用量 36
drwxrwxr-x  2 admin admin 4096 5月  17 22:42 branches
-rw-rw-r--  1 admin admin   66 5月  17 22:42 config
-rw-rw-r--  1 admin admin   73 5月  17 22:42 description
-rw-rw-r--  1 admin admin   23 5月  17 22:42 HEAD
drwxrwxr-x  2 admin admin 4096 5月  17 22:57 hooks
-rw-rw-r--  1 admin admin  112 5月  17 22:59 index
drwxrwxr-x  2 admin admin 4096 5月  17 22:42 info
drwxrwxr-x 12 admin admin 4096 5月  17 22:59 objects
drwxrwxr-x  4 admin admin 4096 5月  17 22:42 refs
[admin@ityoudao hugo]$ ll html/
总用量 4
-rw-rw-r-- 1 admin admin 14 5月  17 22:59 hello.html

4、使用 hugo 生成静态文件并 git push

使用 hugo 生成静态文件:

ityoudao:blog wxy$ hugo

                   | ZH-CN  
+------------------+-------+
  Pages            |    23  
  Paginator pages  |     0  
  Non-page files   |     0  
  Static files     |    21  
  Processed images |     0  
  Aliases          |     1  
  Sitemaps         |     1  
  Cleaned          |     0  

Total in 424 ms
ityoudao:blog wxy$ cd public/
ityoudao:public wxy$ ll
total 72
drwxr-xr-x  18 wxy  staff   576  5 12 07:54 ./
drwxr-xr-x  15 wxy  staff   480  5 17 22:48 ../
-rw-r--r--   1 wxy  staff  6148  5 12 07:54 .DS_Store
drwxr-xr-x  12 wxy  staff   384  5 17 22:59 .git/
-rw-r--r--   1 wxy  staff  4344  5 17 23:03 404.html
drwxr-xr-x   3 wxy  staff    96  5 17 23:03 about/
drwxr-xr-x   5 wxy  staff   160  5 17 23:03 categories/
drwxr-xr-x   9 wxy  staff   288  5 12 08:32 css/
drwxr-xr-x   7 wxy  staff   224  5 12 08:32 fonts/
-rw-r--r--   1 wxy  staff    14  5 17 22:59 hello.html
drwxr-xr-x   6 wxy  staff   192  5 12 07:54 images/
-rw-r--r--   1 wxy  staff  7751  5 17 23:03 index.html
-rw-r--r--   1 wxy  staff  2716  5 17 23:03 index.xml
drwxr-xr-x   6 wxy  staff   192  5 12 08:32 js/
drwxr-xr-x   3 wxy  staff    96  5 17 23:03 page/
drwxr-xr-x   7 wxy  staff   224  5 17 23:03 posts/
-rw-r--r--   1 wxy  staff  2000  5 17 23:03 sitemap.xml
drwxr-xr-x   8 wxy  staff   256  5 17 23:03 tags/

使用git push同步 HTML 文件到 Web 服务器:

ityoudao:public wxy$ pwd
/Users/wxy/blog/public
ityoudao:public wxy$ git push
Everything up-to-date
ityoudao:public wxy$ git add -A
ityoudao:public wxy$ git commit -m "2019年05月17日"
[master 5fa1292] 2019年05月17日
 46 files changed, 10978 insertions(+)
 create mode 100644 .DS_Store
...
 create mode 100644 tags/python/index.xml
ityoudao:public wxy$ git push
枚举对象: 67, 完成.
对象计数中: 100% (67/67), 完成.
使用 4 个线程进行压缩
压缩对象中: 100% (60/60), 完成.
写入对象中: 100% (66/66), 826.43 KiB | 7.25 MiB/s, 完成.
总共 66 (差异 19),复用 0 (差异 0)
To ssh://47.93.238.61:520/u01/data/hugo/public.git
   4e97e89..5fa1292  master -> master
  • 注意,在public目录下执行git命令。

5、检查 git 服务器

[admin@ityoudao hugo]$ ll html/
总用量 64
-rw-rw-r-- 1 admin admin 4344 5月  17 23:04 404.html
drwxrwxr-x 2 admin admin 4096 5月  17 23:04 about
drwxrwxr-x 3 admin admin 4096 5月  17 23:04 categories
drwxrwxr-x 2 admin admin 4096 5月  17 23:04 css
drwxrwxr-x 2 admin admin 4096 5月  17 23:04 fonts
-rw-rw-r-- 1 admin admin   14 5月  17 22:59 hello.html
drwxrwxr-x 2 admin admin 4096 5月  17 23:04 images
-rw-rw-r-- 1 admin admin 7751 5月  17 23:04 index.html
-rw-rw-r-- 1 admin admin 2716 5月  17 23:04 index.xml
drwxrwxr-x 2 admin admin 4096 5月  17 23:04 js
drwxrwxr-x 3 admin admin 4096 5月  17 23:04 page
drwxrwxr-x 5 admin admin 4096 5月  17 23:04 posts
-rw-rw-r-- 1 admin admin 2000 5月  17 23:04 sitemap.xml
drwxrwxr-x 6 admin admin 4096 5月  17 23:04 tags

6、一个命令实现 hugo 生成静态文件和 Git 同步

可以使用 alias 别名做到一个命令即可实现 hugo 生成静态文件和 Git 同步,MacOS 修改 ~/.bash_profile 文件:

ityoudao:blog wxy$ cat >> ~/.bash_profile <<EOF
alias blog='cd /Users/wxy/blog/ && hugo && cd public/ && git add -A && git commit -m "$(date)" && git push && echo "博客发布完成!"'
EOF
ityoudao:blog wxy$ source ~/.bash_profile
  • 第一个cd命令后面的目录是 Hugo 网站根目录;
  • git commit使用当前时间作为备注。

blog 命令的效果:

ityoudao:public wxy$ blog

                   | ZH-CN  
+------------------+-------+
  Pages            |    82  
  Paginator pages  |     1  
  Non-page files   |     0  
  Static files     |    41  
  Processed images |     0  
  Aliases          |     1  
  Sitemaps         |     1  
  Cleaned          |     0  

Total in 186 ms
[master 1a223e2] 2019年 5月19日 星期日 15时57分23秒 CST
 1 file changed, 8 insertions(+), 8 deletions(-)
枚举对象: 5, 完成.
对象计数中: 100% (5/5), 完成.
使用 4 个线程进行压缩
压缩对象中: 100% (3/3), 完成.
写入对象中: 100% (3/3), 405 bytes | 405.00 KiB/s, 完成.
总共 3 (差异 2),复用 0 (差异 0)
To ssh://www.ityoudao.cn:666/u01/data/hugo/public.git
   0959304..1a223e2  master -> master
博客发布完成

这里使用 Git 轻松的实现了 Hugo 生成的静态 HTML 文件同步到 Web 服务器,下一步在 ECS 服务器上部署 Nginx 服务器,访问用Hugo搭建个人博客之部署Nginx网页服务器

发表评论