一年期的服务器到期了, 需要迁移到之前购买的三年器的服务器上, 花了1个小时左右, 迁移完成. 于是我就想着应该总结下我是如何自动化发布我的个人blog的.
用到的技术和网站: “Hugo+Git+Github” , “Drone”, “Caddy”.
Hugo: 静态网站生成工具, 利用它将md文件转为静态网站. Git: 个人Blog的文章使用Git管理. Github: 作为Blog的server端存储. 并利用Github的hock. 触发push callback. Drone: CI/CD工具. 自搭建, 接收Github的hock事件后, pull仓库代码, 根据仓库中的.drone.yml
(默认文件名, 可自定义文件名)文件中定义的内容执行. Caddy: http服务器. 优势开箱即用的https证书功能(利用Let’s Encrypt自动申请https证书)
下面说下细节.
Hogo+Git
Hogo是Go编写的静态网站生成工具. 配合各种好看的Themes
, 可以将你的MD文件, 生成各种好看的静态网站.
具体Hogo怎么用. 这里就不细说. 展开的话可以写好几节文章. 这里主要说下我自己怎么用的
基本上配置好Hogo后, 以后每次写文章, 只要把文章放在自己规划好的分类下. 并添加到git版本管理中就好了.
添加到本地git后并push到远端github. 在搭建好自动化的前提下, 就不需要在做什么了, 1分钟左右, 你的网站内容就更新了.
Drone
Drone是Go编写的自动化发布平台. 个人觉得它的优势在于简单的声明式配置, 就可以完成CI/CD的功能.
这里贴下我的配置文件: .drone.yml
.
kind: pipeline
type: docker
name: default
steps:
# CI第一步: 拉取git远端仓库后, 继续拉取git子模块代码. 即hugo的themes
- name: git_submodule
image: alpine/git
commands:
- git submodule init
- git submodule update
# CI第二步: hugo编译, 生成静态网站文件
- name: build
image: plugins/hugo
volumes:
- name: blog
path: /path/to/public
settings:
output: /path/to/public
# 这里将宿主机的目录挂载到第二步hugo镜像下
# 注意: 这里是挂在宿主机的磁盘路径, 此处将build好的静态文件放在/data/fuxiao.dev/blog下面
volumes:
- name: blog
host:
path: /data/fuxiao.dev/blog
可以看到简单声明后, 就完成了CI/CD的配置, 其他交给Drone来做就行了.
Caddy
开箱即用的Https, 不要太简单…下面是我的Caddyfile文件配置.
fuxiao.dev {
redir https://www.fuxiao.dev/{uri}
}
www.fuxiao.dev {
encode gzip zstd
root * /usr/share/caddy/blog
file_server
log {
output file /data/log/caddy/fuxiao.dev.log {
roll_size 30MiB
roll_keep 20
roll_keep_for 168h
}
}
}
drone.fuxiao.dev {
log {
output file /data/log/caddy/drone.fuxiao.dev.log {
roll_size 30MiB
roll_keep 20
roll_keep_for 168h
}
}
reverse_proxy 172.17.0.1:8080
}
www.fuxiao.dev
: 开启fileServer模块, 配置了文件路径(root指令).drone.fuxiao.dev
: 开启反向代理功能(reverse_proxy指令)
https根本不用配置, 是不是非常简单, 在腾讯云上申请免费一年的证书还需要各种配置. 这里完全不需要你配置, 开箱即用.
先写到这里, 后面会详细介绍每个工具的使用.