博客搭建
准备
- hugo
- github
- nginx/caddy
hugo
注意: 安装 extended 版本, 否则使用第三方主题时会有问题
hugo new site quickstart
cd quickstart
git clone https://github.com/flysnow-org/maupassant-hugo themes/maupassant
echo theme = \"maupassant\" >> config.toml
hugo new posts/my-first-post.md
// 测试
hugo server -D
// 生成静态文件
hugo -D
github
-
创建 repo
-
设置 webhook
-
将上面的 quickstart 文件夹整体进行版本管理(其实只管理 content 也行, 要是为了方便换主题, 可以直接搞整个)
-
在 server 上启动 webhook server eg.
package main
import (
"crypto/hmac"
"crypto/sha1"
"encoding/hex"
"fmt"
"io/ioutil"
"net/http"
"os/exec"
)
var (
key []byte
)
func sha1Data(data []byte) string {
h := hmac.New(sha1.New, key)
h.Write(data)
ret := h.Sum(nil)
return hex.EncodeToString(ret)
}
func hook(w http.ResponseWriter, req *http.Request) {
signature := req.Header.Get("X-Hub-Signature")
body, _ := ioutil.ReadAll(req.Body)
fmt.Println(sha1Data(body), signature)
if fmt.Sprintf("sha1=%s", sha1Data(body)) == signature {
fmt.Println("github hook")
cmd := exec.Command("/bin/sh", "-c", `cd /workdir && git fetch --all && git reset --hard origin/main && git pull && hugo -D`)
var result []byte
var err error
if result, err = cmd.Output(); err != nil {
fmt.Println(err)
}
fmt.Println(string(result))
return
}
w.WriteHeader(500)
fmt.Fprintf(w, "error")
}
func startServer() {
http.HandleFunc("/", hook)
http.ListenAndServe(":8888", nil)
}
func main() {
key = []byte("key")
startServer()
}
Nginx/Caddy
- 指向
quickstart/public