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/