Hugo+Caddy打造个人博客

原创
2018/06/20 10:51
阅读数 3.8K

前言

很久之前就想要搭建个人博客,在各种模板引擎之间无限徘徊,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一下剩下的就先让子弹飞一会儿吧,基本上秒更。另外,广告一下博主自己的博客网站,欢迎访问!

展开阅读全文
打赏
0
3 收藏
分享
加载中
netlify了解一下,图片啥的OSS弄起来,也不贵
2018/07/23 20:38
回复
举报
更多评论
打赏
1 评论
3 收藏
0
分享
返回顶部
顶部