前言
很久之前就想要搭建个人博客,在各种模板引擎之间无限徘徊,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”:
-
找到“Webhooks”
- 添加webhook
- 设置webhook
/webhook这个要跟Caddyfile中的配置保持同步
结语
这片文章酝酿了很久了,奈何种种原因吧,到现在才发出来,因为这方面的资料还比较少,基本上也是一路踩坑过来吧。不过效果还是不错的,码完字只需git push一下剩下的就先让子弹飞一会儿吧,基本上秒更。另外,广告一下博主自己的博客网站,欢迎访问!