“你博客部署在哪?”
“在我家路由器架下面的树莓派上。”
“啊?你说真的?”
是的,我说真的。
这一篇文章,我要分享我是如何用 Hugo + Drone CI,在树莓派上实现博客的自动构建与部署的。从编辑文章、推送到 Gitea、到自动生成静态页面、自动更新 Nginx 服务,全流程无需手动干预。
✏️ 博客内容结构:使用 Hugo + Stack 主题
我选用的静态博客框架是 Hugo,它构建速度快、配置灵活、支持 Git 管理,非常适合自托管平台。
主题使用的是 Stack,颜值在线,适配也很完整。
博客项目结构如下:
1
2
3
4
5
6
7
| hugo-blog/
├── content/ # 文章内容(markdown)
├── config/_default/ # 配置文件
├── themes/ # 子模块:hugo-theme-stack
├── static/ # 静态资源
├── public/ # Hugo 生成的 HTML
└── .drone.yml # 自动构建配置
|
文章用 markdown 写,每次写完一篇 commit 推送,Drone 就会触发自动部署。
🤖 用 Drone 自动构建 Hugo 项目
我们回到 Drone 的 .drone.yml
文件,这是实现 CI 的核心:
1
2
3
4
5
6
7
8
9
10
| platform:
os: linux
arch: arm64
steps:
- name: build blog
image: ghcr.io/gohugoio/hugo:v0.147.9
user: root
commands:
- hugo
|
这一步执行后,public/
目录会包含完整的博客静态文件。
接下来,就是部署了。
📦 自动构建 Nginx 镜像
我采用的方法是:每次构建完博客后,自动构建一个带博客内容的 Nginx 镜像。
项目目录下添加 Dockerfile
:
1
2
| FROM nginx:alpine
COPY public /usr/share/nginx/html
|
然后在 .drone.yml
中增加 build + publish:
1
2
3
4
5
6
7
8
9
10
| - name: build and deploy
image: docker:dind
volumes:
- name: dockersock
path: /var/run/docker.sock
commands:
- docker build -t owng-blog:latest .
- docker stop blog || true
- docker rm blog || true
- docker run -d --name blog -p 18080:80 owng-blog:latest
|
注意:
- 我这里直接在树莓派本地构建并运行,不使用远程镜像仓库
volumes
映射了 Docker Socket,允许容器内调用宿主机的 Docker
完整 .drone.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
| kind: pipeline
type: docker
name: default
platform:
os: linux
arch: arm64
steps:
- name: build blog
image: ghcr.io/gohugoio/hugo:v0.147.9
user: root
commands:
- hugo
- name: build and deploy
image: docker:dind
volumes:
- name: dockersock
path: /var/run/docker.sock
commands:
- docker build -t owng-blog:latest .
- docker stop blog || true
- docker rm blog || true
- docker run -d --name blog -p 18080:80 owng-blog:latest
volumes:
- name: dockersock
host:
path: /var/run/docker.sock
|
🚀 流程跑通了!我只需要专心写文章
此时流程已完整跑通:
- 在本地用 Hugo 写好文章
- 推送到 Gitea 仓库
- Drone 接收 webhook,开始构建
- 自动生成
public/
内容 - 自动构建 Nginx 镜像
- 自动在树莓派上更新博客服务
访问 http://树莓派IP:8080
,博客已自动上线。
我甚至可以加上域名 + FRP 实现公网访问(下篇文章详谈)。
✅ 技术细节小结
技术点 | 说明 |
---|
Hugo | 静态博客生成器,速度快、结构清晰 |
Drone CI | 监听 Gitea 推送,自动构建流程 |
Docker + Nginx | 博客部署容器化,方便重启和更新 |
ARM64 架构 | 所有镜像和 Drone 构建都要指定平台,否则无法运行 |
📌 下一篇预告
《我让博客出现在公网,还能远程连进家里的桌面》
我们将探索如何用 FRP 实现内网穿透,让你在外网通过自定义域名访问博客、SSH、甚至 VNC 登录家中桌面。
💬 最后
我曾一度觉得建博客最省事的方式是找个平台注册个账号,但现在,我可以把博客部署在自己手里、自动构建、自动更新、自动发布。
它藏在家里,靠墙插着电,但对我来说,它比任何“云平台”更安心。
下篇我们见 👋