Hugo上传构建自动化

在上一篇搭建Hugo网站中,我们完成了静态网站的搭建。为了实现网站的持续更新,这一篇我们来实现编写-上传-构建-部署的自动化流程 由于hugo的构建和部署是分开的,因此可行的思路非常开阔。笔者将提供几种思路以供参考 首先,不建议使用hugo server部署至web端口或将web端口转发至hugo server的方式。hugo server仅为本地开发调试而设计,其默认行为不具备生产环境所需的安全性与性能优化 对博客的版本管理 无论使用什么方式,都建议对内容与配置进行版本管理。版本控制不仅有助于追踪修改历史、恢复误删内容,也便于多设备协作、自动化部署等操作。在本文我们使用git进行版本管理,其余的CVS工具可以使用类似的思路 在建立git仓库时,建议排除public/(或者仓库目录中你规定的其他输出路径(你为什么要这么干))目录。.gitignore中加入 public/ 本地部署 如果你的web服务就部署在本地,那么每次编辑完后手动构建一次目标目录即可 远程部署 本地构建 + 上传构建文件(不推荐) 当然,你可以选择本地build完后,上传publc/等输出仓库至服务器的方式。这也可以通过让git管理输出目录来完成上传的部分,思路和下文类似 本地上传修改 + 远程构建 先看需求:我们需要在完成编辑时,先将本地的修改上传,然后在远程自动触发一次构建,并且使用nginx等工具来运行web server。 能完成需求的思路都是好思路,这里提供两个 建立公共远程仓库,服务器同步并构建 graph LR A[本地] --push--> B(公共仓库) --pull--> C[Web Server] --build & run--> D([用户]) 笔者选择的方式,因此这部分个人的经验会多一些 首先选择一个公共的远程仓库,需要你的本地和服务器都可以访问到。笔者的服务器位于中国大陆且不想配置代理,因此将仓库建立在了自己托管的git平台上。接下来在服务器建立仓库并添加远程,过程不再赘述。 WebServer从公共仓库的同步也可以采取多种思路。最简单的方式就是规定时间自动拉取。笔者采用了当公共仓库的主分支变动时,向服务器发送一个Webhook并触发拉取和构建的流程,笔者团队托管的gitea自带发送Webhook的功能,这部分也可以用其他平台的类似服务代替。 Webhook的客户端,可以使用apt库中的webhook。为Webhook写一个配置文件, // hooks.json [ { "id": "DFSiteHook", "execute-command": "/home/dedfaf/DF-Site/build.sh", "command-working-directory": "/var/www/DF-Site", "response-message": "Hugo rebuild.", "trigger-rule": { "match": { "type": "value", "secret":"xxx", "value": "refs/heads/master", "parameter": { "source": "payload", "name": "ref" } } } } ] 令其接收到hooks后执行脚本 ...

July 7, 2025

搭建Hugo网站

Hugo是一个网站编译器,所负责的工作就是把你的内容(主要是md文件),用你规定的主题来构造一个静态网站。只需要把构建好的网站(一个文件夹)扔到web服务器上就可以被访问了 对于那些还拿不准使用哪种静态网站构建器的人,Hugo的优势在于构建速度最快,配置简单,主题较多。可以翻一翻Hugo主题库,只要有看上眼的选择Hugo不会有错 因此,部署Hugo的思路比较多样化: 在本地安装Hugo,在本地编写内容,构建网站后上传服务器 在服务器安装Hugo,在本地编写内容后上传内容,在服务器完成构建(当然在本地预览内容还是要在本地安装Hugo的) 如果方便访问服务器,直接在服务器编写构建也可以 如何维护Hugo,建立自动上传构建的流程,不在本文详解,参考Hugo上传构建自动化 安装Hugo https://gohugo.io/installation/ 根据你选择的思路在本地或远程安装hugo P.S. 笔者使用的Debian目前apt库中的Hugo版本较老,至少已经不支持我的主题了,建议在Release里找最新版安装 建站流程 非常建议参考Hugo Doc - QuickStart 创建项目 找个目录运行 hugo new site 网站名 [--format xxx.yaml] cd 网站名 git init hugo会建立一个网站的基本结构,可以用--format指定hugo的配置文件格式,配置文件需要大量填内容,所以选你熟悉的格式 几个重要的文件夹: content: 放置内容的地方,后续写的文章将放于此 static: 放置静态资源。这里的文件可以通过https://your.url/文件名来直接访问,可以拿来放网站的背景图等资源 public:放置构建后的网站。构建后将这个文件夹设为网站根目录网站就能运行 接下来需要安装主题,主题文件夹需要置于themes/中 先在https://themes.gohugo.io/找一个主题,然后 git clone:从主题仓库clone到themes/ 使用git submodule(推荐) 使用hugo module JUST PACK & DOWNLOAD A FKING .ZIP 推荐使用submodule的方式,因为方便管理(出错时更新和回退)主题的版本 git submodule add https://主题仓库.git themes/主题名 git submodule update --init --recursive P.S. 在clone仓库后,默认不会clone submodule中的文件,在部署至别处时需要注意 如果不熟悉submodule,就记住在需要更新主题时进入主题目录跑git pull就可以了,别忘记在外部git提交对子模块的更新。 另:对于经常爆改theme的人,可以适当性的考虑不使用子模块(因为需要频繁的在本地和远程更新子模块),只要明白自己在做什么(能自己解决问题),可以尝试由一整个git来管理 在配置文件(默认hugo.toml,或别的格式)中添加: ...

July 4, 2025