Featured image of post 我的博客不是部署在云上,而是藏在家里的树莓派里

我的博客不是部署在云上,而是藏在家里的树莓派里

用 Hugo + Drone 实现自动构建部署,家里的树莓派正式上线我的博客

“你博客部署在哪?”
“在我家路由器架下面的树莓派上。”
“啊?你说真的?”

是的,我说真的。

这一篇文章,我要分享我是如何用 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

🚀 流程跑通了!我只需要专心写文章

此时流程已完整跑通:

  1. 在本地用 Hugo 写好文章
  2. 推送到 Gitea 仓库
  3. Drone 接收 webhook,开始构建
  4. 自动生成 public/ 内容
  5. 自动构建 Nginx 镜像
  6. 自动在树莓派上更新博客服务

访问 http://树莓派IP:8080,博客已自动上线。

我甚至可以加上域名 + FRP 实现公网访问(下篇文章详谈)。


✅ 技术细节小结

技术点说明
Hugo静态博客生成器,速度快、结构清晰
Drone CI监听 Gitea 推送,自动构建流程
Docker + Nginx博客部署容器化,方便重启和更新
ARM64 架构所有镜像和 Drone 构建都要指定平台,否则无法运行

📌 下一篇预告

《我让博客出现在公网,还能远程连进家里的桌面》

我们将探索如何用 FRP 实现内网穿透,让你在外网通过自定义域名访问博客、SSH、甚至 VNC 登录家中桌面。


💬 最后

我曾一度觉得建博客最省事的方式是找个平台注册个账号,但现在,我可以把博客部署在自己手里、自动构建、自动更新、自动发布。

它藏在家里,靠墙插着电,但对我来说,它比任何“云平台”更安心

下篇我们见 👋

使用 Hugo 构建
主题 StackJimmy 设计