文档章节

Hugo+Caddy打造个人博客

Raphael_Zhang
 Raphael_Zhang
发布于 2018/06/20 10:51
字数 1048
阅读 1056
收藏 3

前言

很久之前就想要搭建个人博客,在各种模板引擎之间无限徘徊,WordPress、Hexo、Jekyll都多多少少接触过,但是由于各种原因吧,一直都没有落地。很多人都推荐通过github部署博客,但是由于伟大的长城访问速度实在堪忧,因此便有了在私有服务器上部署的念头。因个人原因,现在偏向于golang,就顺水推舟选择了Hugo,也有中文文档,使用起来还是挺方便的。同时因为做过DevOps的缘故,非常喜欢自动化部署,经过长时间的摸索,最终确定了Caddy+Hugo的模式。

Caddy的安装与配置

二进制安装

在Caddy官方下载页面下载可执行文件,记的勾选git与Hugo两个插件,会自编译生成压缩包,里面包含二进制包、安装指导还有自启动脚本等。

  • 将二进制包拷贝到系统路径,并付给相应的权限
sudo cp /path/to/caddy /usr/local/bin
sudo chown root:root /usr/local/bin/caddy
sudo chmod 755 /usr/local/bin/caddy
  • 设置caddy允许绑定80,443等端口
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy
  • 为Caddy设置专有用户、用户组与文件夹
sudo groupadd -g 33 www-data
sudo useradd \
  -g www-data --no-user-group \
  --home-dir /var/www --no-create-home \
  --shell /usr/sbin/nologin \
  --system --uid 33 www-data

sudo mkdir /etc/caddy
sudo chown -R root:www-data /etc/caddy
sudo mkdir /etc/ssl/caddy
sudo chown -R root:www-data /etc/ssl/caddy
sudo chmod 0770 /etc/ssl/caddy
  • 将自己的Caddy配置文件放到/etc/caddy,并修改权限
sudo cp /path/to/Caddyfile /etc/caddy/
sudo chown www-data:www-data /etc/caddy/Caddyfile
sudo chmod 444 /etc/caddy/Caddyfile
  • 创建服务器祝目录
sudo mkdir /var/www
sudo chown www-data:www-data /var/www
sudo chmod 555 /var/www
  • 添加Caddy服务(systemd版)
wget https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service
sudo cp caddy.service /etc/systemd/system/
sudo chown root:root /etc/systemd/system/caddy.service
sudo chmod 644 /etc/systemd/system/caddy.service
sudo systemctl daemon-reload
sudo systemctl start caddy.service
  • 设置Caddy自启动
sudo systenctl enable caddy.service

至此,Caddy的安装以及配置完成,只需要配置自己的Caddyfile即可。

  • 我的配置文件,以此为例修改为自己的即可
${your_domain} {
    log /var/log/caddy/access.log
    gzip
    root /var/www/${your_site}/public
    git github.com/${your_github_name}/${your_site}.git {
        path /var/www/${your_site}
        then hugo --destination=/var/www/${your_site}/public
        hook /webhook 87e1129469efab1ea287afcc418e0679
        hook_type github
        clone_args --recursive
        pull_args --recurse-submodules
    }
    hugo
}

通过Dcoker部署Caddy

  • 构建docker镜像

    • 浏览器打开docker store并搜索caddy找到其中下载量比较多的abiosoft/caddy,然而并不满足需求,因为没有hugo插件,需要修改Dockerfile。

    • 修改Dockerfile以满足需求,只需要修改ARG plugins="git..."这部分即可,修改后内容如下:

      #
      # Builder
      #
      FROM abiosoft/caddy:builder as builder
      
      ARG version="0.11.0"
      ARG plugins="git,hugo"
      
      # process wrapper
      RUN go get -v github.com/abiosoft/parent
      
      RUN VERSION=${version} PLUGINS=${plugins} /bin/sh /usr/bin/builder.sh
      
      #
      # Final stage
      #
      FROM alpine:3.7
      LABEL maintainer "Abiola Ibrahim <abiola89@gmail.com>"
      
      ARG version="0.11.0"
      LABEL caddy_version="$version"
      
      # Let's Encrypt Agreement
      ENV ACME_AGREE="false"
      
      RUN apk add --no-cache openssh-client git
      
      # install caddy
      COPY --from=builder /install/caddy /usr/bin/caddy
      
      # validate install
      RUN /usr/bin/caddy -version
      RUN /usr/bin/caddy -plugins
      
      EXPOSE 80 443 2015
      VOLUME /root/.caddy /srv
      WORKDIR /srv
      
      COPY Caddyfile /etc/Caddyfile
      COPY index.html /srv/index.html
      
      # install process wrapper
      COPY --from=builder /go/bin/parent /bin/parent
      
      ENTRYPOINT ["/bin/parent", "caddy"]
      CMD ["--conf", "/etc/Caddyfile", "--log", "stdout", "--agree=$ACME_AGREE"]
      

    只保留了git与hugo两个插件

    • 构建镜像
      docker build -t abiosoft/caddy:latest .
      

    构建完成,因为golang有些包被墙,需要自备梯子。。。

  • 下载镜像

    本着不重复造轮子的原则,博主已经将构建好的镜像上传到阿里云,大家直接下载即可。

    docker pull registry.cn-hangzhou.aliyuncs.com/echoers/caddy:latest
    
  • 运行镜像启动服务

    docker run -it -d \ 
    -v ${your_path}/Caddyfile:/etc/Caddyfile \
    -v ${your_path}/${your_hugo_blog}:/home/${your_hugo_blog} \
    -p 80:80 \
    -p 443:443 \
    --name caddy registry.cn-hangzhou.aliyuncs.com/echoers/caddy:latest
    

webhook配置

  • 将hugo生成的blog上传到github,之后点击“settings”: image

  • 找到“Webhooks”

image

  • 添加webhook

image

  • 设置webhook

image

/webhook这个要跟Caddyfile中的配置保持同步

结语

这片文章酝酿了很久了,奈何种种原因吧,到现在才发出来,因为这方面的资料还比较少,基本上也是一路踩坑过来吧。不过效果还是不错的,码完字只需git push一下剩下的就先让子弹飞一会儿吧,基本上秒更。另外,广告一下博主自己的博客网站,欢迎访问!

© 著作权归作者所有

Raphael_Zhang
粉丝 3
博文 5
码字总数 4750
作品 0
程序员
私信 提问
加载中

评论(1)

ishowfun
ishowfun
netlify了解一下,图片啥的OSS弄起来,也不贵
如何把自己打造成技术圈的 papi 酱

最近半年,一个叫papi酱的平胸女子连续在微博、朋友圈、创业圈刷屏,当之无愧成了中文互联网的第一大网红。呃,你以为我会巴拉巴拉说一堆网工创业的事?NO,今天想借papi酱的话题跟大家一起聊...

优雅的程序员
2016/04/11
8.1K
51
关于Hexo6.0搭建个人博客(github+Google-收录篇)

本篇博文将继续带大家优化博客站点,打造上线站点,设置个性域名等 阅读本文前建议先行阅读本人另外三篇遍基础博文 1.关于Hexo6.0搭建个人博客(基础篇) 2.关于Hexo6.0搭建个人博客(主题优化-进...

darryrzhong
2018/05/28
0
0
打造你自己的程序员品牌

John Sonmez是Simple Programmer的 创始人、作者与程序员,关注于如何让复杂的事情变得简单。他是一位专业的软件开发者、架构师与讲师,感兴趣的领域包括测试驱动开发、如何编写整洁的代码、...

oschina
2014/07/18
6.2K
13
博客两万字阶段性总结

不知不觉在简书写博客已经有两万多字了,这应该是我写作字数最多的博客了,就连我自己搭建的GitHub.io博客也比这少一篇博客(因为我到现在都没找到少的是哪一篇。。。),做一个阶段性总结吧...

月见樽
2017/11/28
0
0
开源中国:博客列表页和博客详情页的设计图

大约五年前,@红薯 的博客写到: 然后到前几天: 的确,原计划6月开始改版,我们提前5月开始了。对于我们Platform team来说颇刺激! 上两个星期,我们对博客的编辑器进行调整的同时,对博客详...

OSC运营汪
2016/05/31
8.4K
86

没有更多内容

加载失败,请刷新页面

加载更多

PO BO VO DTO POJO DAO概念及其作用(附转换图)

J2EE开发中大量的专业缩略语很是让人迷惑,尤其是跟一些高手讨论问题的时候,三分钟就被人家满口的专业术语喷晕了,PO VO BO DTO POJO DAO,一大堆的就来了(听过老罗对这种现象的批判的朋友...

Airship
4分钟前
0
0
curses 管理插件

http://bbs.nga.cn/read.php?tid=9603776&rand=851

MtrS
今天
3
0
网站运营类指标

1 网站流量类指标 1.1 到达率 1.2 UV   UV即Unique Visitor,又称独立访客。UV是衡量用户“人数”的重要指标,反映了来到网站的用户“数量”。UV定义只跟时间有关。 1.3 Vist   Vist又称...

qwfys
今天
4
0
Commons-lang3提供的StopWatch执行时间监视器

Commons-lang3提供的StopWatch执行时间监视器, spring也提供了同样功能的工具 前言 我们如果要统计一段代码的执行时间:我们的办法是 public static void main(String[] args) {      ...

独钓渔
今天
2
0
Kernel 块设备驱动框架

1,总体架构: 块设备驱动框架是Linux设备最重要的框架之一,涉及内核的vfs,设备驱动模型等模块,是内核中异常复杂的一个框架。我们先看一下块设备设计的主要框架结构,先从总体上对块设备有...

yepanl
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部