在上一篇文章中,你已经成功安装了Caddy,并且使用 caddy file-server 命令成功托管了自己的网站,那么这一篇文章中呢,我就为你详细的介绍Caddy的命令以及他们的参数。

命令行参数用法

Caddy是一个标准的unix-like命令,它的基本用法为:

其中:

  1. command 是caddy的子命令,比如上一篇文章中的 file-server 。子命令是必须的,不能省略。
  2. args... 是子命令的参数,可以是0个,也可以是多个。

help命令

一个好的命令行工具,是绝对要有 help 命令的,caddy当然不会例外。通过 help 命令,你可以详细的了解caddy的用法和帮助说明,可以让我们很快的入门使用。

usage:   caddy <command> [<args…>]

commands:   adapt           Adapts a configuration to Caddy’s native JSON   build-info      Prints information about this build   environ         Prints the environment   file-server     Spins up a production-ready file server   fmt             Formats a Caddyfile   hash-password   Hashes a password and writes base64   help            Shows help for a Caddy subcommand   list-modules    Lists the installed Caddy modules   reload          Changes the config of the running Caddy instance   reverse-proxy   A quick and production-ready reverse proxy   run             Starts the Caddy process and blocks indefinitely   start           Starts the Caddy process in the background and then returns   stop            Gracefully stops a started Caddy process   trust           Installs a CA certificate into local trust stores   untrust         Untrusts a locally-trusted CA certificate   upgrade         Upgrade Caddy (EXPERIMENTAL)   validate        Tests whether a configuration file is valid   version         Prints the version Use ‘caddy help <command>' for more information about a command.

可以看到 help 命令列出了caddy支持的所有子命令和说明,并且在最后还提醒我们,可以通过 caddy help <command> 更详细的了解某个子命令的用法。

现在,我们使用 caddy help file-server 来看下我们上一篇文章中,使用的 file-server 命令的详细用法。

flags:   -access-log     Enable the access log   -browse     Enable directory browsing   -domain string     Domain name at which to serve the files   -listen string     The address to which to bind the listener   -root string     The path to the root of the site   -templates     Enable template rendering

以上关于 file-server 子命令的用法,等下我会详细介绍,这里大家先了解下。

run命令

run 会运行一个前台caddy进程,直到你使用 ctrl+c 或者关闭终端退出。它的用法为:

flags:   -adapter string     如果你使用的配置文件不是以Caddyfile开头的,那么要使用这个标记来指定,比如-adapter caddyfile。   -config string     启动Caddy使用的配置文件   -envfile string     从指定的文件加载环境变量,环境变量的格式为KEY=VALUE   -environ     打印环境变量   -pidfile string     这个大家都知道,用于存放PID的文件   -pingback string     启动成功的信息要回显到pingback指定的ip:port上,这里是通过tcp拨号发送回显信息的。   -resume     这个挺有意思,会使用最近一次自动保存的配置,这对于恢复一个caddy非常有用。这里需要注意的是,当使用这个标记的时候,通过config标记指定的配置就不再生效了。   -watch     这个其实就是在检测到你的配置文件发生变化的时候,自动重新加载配置,这个不要在生产环境使用,自己开发环境用用就得了。

现在来看几个例子,这样可以更好的理解 run 这个命令。

示例1

示例2

run 命令其他 flag 的用法都大同小异,这里不再做演示,你自己可以试一下。

start命令

start 命令的使用 run 一样,不同的是 start 会启动一个在后台运行的caddy,这意味着它不会阻塞终端的使用,你可以去做其他甚至退出当前终端,但是一个caddy已经被启动了,你可以正常访问托管的网络服务。

stop命令

start 命令对应的就是 stop 命令,需要使用 stop 命令通知后台正在运行的caddy,它的使用格式如下所示:

It requires that the admin API is enabled and accessible, since it will use the API's /stop endpoint. The address of this request can be customized using the –address flag if it is not the default.

usage:   caddy stop 

flags:   -address string     The address to use to reach the admin API endpoint, if not the default

如果你的 start 是使用默认的 localhost:2019 管理地址启动的,那么直接使用 stop 命令就可以优雅的停止caddy,如果不是默认的,那么需要使用 -address 来指定管理地址。

这里有个小提示,caddy在启动后,不仅可以通过终端命令来管理它,还可以通过API,也就是说caddy提供了一组API服务,用于管理它自身,比如加载配置等。这组管理API默认的地址就是 localhost:2019 ,所以当你的caddy启动起来后,在浏览器里输入这个地址,就可以看到相应的配置信息了。

reload命令

通过 satrt 启动的caddy是不轻易停止的,因为这会导致网络服务不可用。但是你又想使你修改的配置文件生效,怎么办呢?caddy提供了 reload 命令可以帮我们做到,这个Nginx是一样的。

flags:   -adapter string     Name of config adapter to apply   -address string     Address of the administration listener, if different from config   -config string     Configuration file (required)   -force     Force config reload, even if it is the same

以上就是 reload 命令的使用,是不是很眼熟?是的,它和 run 命令基本上一直,参数也差不多,可以参考 run 命令的使用。 注意:这里的 address 参数和 stop 命令中的 address 是一样的,都是管理API的地址,比如localhost:2019 ,这两个命令,其实都是基于管理API实现的。

file-server命令

这个命令可以启动一个文件服务,比如托管一个静态网站、把你的文件夹共享在网络上等等。它的使用如下所示:

flags: -access-log 启用访问日志 -browse 启用目录浏览 -domain string 指定一个域名 -listen string 监听的地址,http默认是:80,https默认是:443 -root string 要托管的文件服务的根目录 -templates 启用模板渲染

关于file-server命令的使用可以参考我的这篇 Caddy实战(一)| 托管你的网站,只需一行命令 文章,这里不再赘述。

reverse-proxy 命令

在caddy中,配置一个反向代理非常简单,使用 reverse-proxy 命令即可。

usage:   caddy reverse-proxy [–from <addr>] [–to <addr>] [–change-host-header]

flags:   -change-host-header     变更主机头,从传入的值变为上游的值   -from string     用户访问的地址,默认是localhost   -insecure     禁用TLS   -to string     被代理的上游地址,用户看不到这个地址

比如你有个后端服务 127.0.0.1:9000 ,想要代理到 localhost ,运行如下命令即可。

现在,使用 localhost 访问,其实就是访问的 127.0.0.1:9000 这个后端服务。

假如你想换个端口访问,比如 localhost:2016 ,只需要运行如下命令即可。

adapt 命令

caddy是有自己的配置文件的,它叫Caddyfile,这是一种可读性、书写性非常强的配置文件,类似Nginx 的Config,但是它并不是caddy的原生配置文件,caddy的原生配置文件是JSON的,但是非常复杂。

adapt这个命令就是给我们提供了Caddyfile转JSON原生配置的能力,让我们可以看到真实的配置是什么。它的用法如下:

flags:   -adapter string     配置适配器的名字,默认是 caddyfile。其实就是告诉命令,要使用什么样的适配器,把相应的配置转为JSON原生配置   -config string     配置文件   -pretty     是否美化输出   -validate     可以帮助检验下输出,其实并没有真正的运行caddy

比如最简单的Caddyfile,只有一行 localhost ,使用 adapt 命令转为JSON原生配置的结果如下:

还是非常复杂的,包括端口、路由的配置都有,所以还是用Caddyfile配置效率最高,可读性也强。

fmt命令

这是caddy提供的一个辅助工具,可以帮你格式化你的Caddyfile配置文件, 让它更美观。

usage:   caddy fmt [–overwrite] [<path>]

flags:   -overwrite     用格式化后的结果,覆盖你的配置文件

整个命令非常简单,比如我想用这个命令把我的配置文件美化下,并且把美化的结果覆盖我的配置文件,可以这么做。

environ命令

打印caddy知道的环境变量,你可以看到很多关于caddy自身和你的系统环境的信息,这对于你调试caddy命令非常有用,比如启动不了?路径设置是否错误等等。

它的用法非常简单,在终端输入如下命令,即可看到环境变量信息。

hash-password命令

一个自带的密码Hash工具,主要用来为配置文件的授权提供Hash过的密码,因为不能配置明文密码。

flags:   -algorithm string     Hash算法,支持scrypt和bcrypt两种,默认是bcrypt   -plaintext string     要Hash的明文密码   -salt string     加点盐,仅当Hash算法是scrypt有效

看看这个工具运行的效果。

list-modules命令

caddy是支持模块的,而且我们可以开发自己的模块,所以这个命令可以列出caddy当前已经安装的模块。

……

build-info命令

打印caddy的构建信息,主要是Go Module的依赖信息,包括包名、版本等。

trust命令

安装一个根证书到本地信任存储中,可能会需要密码才能安装,主要用于开发环境。大部分情况下,这个命令是用不到的,因为caddy启动的时候会自动安装证书。

untrust命令

从本地信任存储中,卸载一个根证书,也是用于开发环境,和上面的 trust 命令是对应的。

flags:   -ca string     要卸载CA证书的ID,默认为local   -cert string     要卸载CA证书的路径

upgrade命令

这个是升级caddy的命令,它会下载最新的二进制文件,然后把本地的给替换了。这个过程并不会停止caddy服务,所以不用担心,它仅仅是替换你的caddy文件。

当然,为了保险起见,原来的二进制文件还是要备份一下。

validate命令

这是一个验证Caddyfile配置文件的命令,它会模拟启动caddy,但是并不会真的启动。验证的过程中,遇到的问题,会在控制台输出。它的使用和 adapt 命令基本上一致。

flags:   -adapter string     配置适配器的名字,默认是 caddyfile   -config string     配置文件的路径

version命令

最简单的一个命令了,打印出caddy的版本,大部分的命令行工具都具备。

哈哈,看到了吧,我这个其实是我自己编译的一个开发版。

小结

这一篇非常详细的介绍了caddy命令的使用,建议收藏,需要的时候可以当做手册来用。下一篇开始,就要介绍Caddyfile这个配置文件了。