Caddy 简介

Caddy是一个Go语言写的,开源好用Web服务器。它具有如下的一些功能:

配置简单:Caddy服务器的运行可以通过Caddyfile配置文件进行配置。
自动的HTTPS:它可以自动申请 Let's Encrypt 域名证书,并进行配置,自动定期更新,并且免费。
HTTP/2:默认支持HTTP/2(由Go标准库支持)
虚拟主机托管:Caddy支持TLS的SNI。可以在具有单个公网IP的同一台主机上部署多个不同的域名的服务。可以为Caddy服务的不同域名配置不同的证书和密钥。
QUIC支持:Caddy实验性地支持QUIC协议,以获取更好的性能。
良好的可扩展性:因此Caddy非常方便针对自己的需求做定制。
丰富的插件:丰富的插件,对解决业务需求提供帮助;
理念先进:caddy 在功能上就融入了devops; 相关的理念,服务本身就具备持续集成模块。
随处运行:这主要与Go应用程序的特性有关。Go的模块都被编译为静态库,Go的应用程序在编译为可执行文件时都是静态链接,依赖的动态库极少,这使得部署使用非常方便。

安装部署

首先要安装一下go运行环境

go官方项目地址:

​https://golang.org/dl/​

下载

wget ​​https://storage.googleapis.com/golang/go1.8.1.linux-amd64.tar.gz​

解压

tar -C /usr/local -xzf go1.8.1.linux-amd64.tar.gz

创建go home 目录

mkdir /root/go1.8

设置环境变量


echo  'export GOROOT=$HOME/go1.8' >>/etc/profileecho 'export PATH=$PATH:/usr/local/go/bin' >> /etc/profilesource /etc/profile


验证go 版本

go version go version go1.8.1 linux/amd64

安装 caddy

新建用户,程序目录修改权限

useradd -M caddy
chsh -s /bin/false Caddy

mkdir -p /var/log/caddy/ #日志目录

mkdir -p /etc/caddy/config #配置目录

chown -R caddy /etc/caddy
chown -R caddy /var/log/caddy

安全考虑:不推荐 Root运行:可以通过像这样使用setcap来监听端口号小于1024的端口:

sudo setcap cap_net_bind_service=+ep ./caddy

直接运行命令如下(默认安装):

curl ​​https://getcaddy.com​​ | bash

查看版本:

[root@hkjump ~]# caddy -version Caddy 0.10.0

查看默认插件:

Caddy命令行接口。运行caddy -h 可以查看基本的帮助信息

[root@hkjump ~]# caddy -plugins


Server types:   http Caddyfile loaders:   short   flag   default Other plugins:   http.basicauth   http.bind   http.browse   http.errors   http.expvar   http.ext   http.fastcgi   http.gzip   http.header   http.index   http.internal   http.log   http.markdown   http.maxrequestbody   http.mime   http.pprof   http.proxy   http.push   http.redir   http.rewrite   http.root   http.status   http.templates   http.timeouts   http.websocket   shutdown   startup   tls   tls.storage.file


安装 hook.service,http.git 插件,方法如下;

curl ​​https://getcaddy.com​​ | bash -s hook.service,http.git

配置开机启动

vim /etc/systemd/system/caddy.service


[Unit]     Description=Caddy Web Server     Documentation=https://caddyserver.com/docs     After=network.target     [Service]     User=caddy     StartLimitInterval=86400     StartLimitBurst=5     LimitNOFILE=16535     ExecStart=/usr/local/bin/caddy -agree=true -conf=/etc/caddy/Caddyfile -pidfile=/var/run/caddy/caddy.pid -log=stderr     PIDFile=/var/run/caddy/caddy.pid     Restart=on-failure     [Install]     WantedBy=multi-user.target


服务开机启动相关设置

chmod 644 /etc/systemd/system/caddy.service
systemctl enable caddy.service
systemctl start caddy.service
systemctl status caddy.service

参考文档

​https://github.com/caddyserver/examples​​​​https://github.com/Unknwon/wuwen.org/issues/11​​​​http://www.jianshu.com/p/15fc32760993​​​​http://tonybai.com/2015/06/04/caddy-a-web-server-in-go/​