点击上方蓝色“飞雪无情”关注我,设个星标,第一时间看文章
在上一篇Caddy实战(一)| 托管你的网站,只需一行命令文章中,你已经成功安装了Caddy,并且使用caddy file-server
命令成功托管了自己的网站,那么这一篇文章中呢,我就为你详细的介绍Caddy的命令以及他们的参数。
前方万字文章高能,请大佬搬好板凳看~
命令行参数用法
Caddy是一个标准的unix-like命令,它的基本用法为:
caddy <command> [<args...>]
其中:
-
command
是caddy的子命令,比如上一篇文章中的file-server
。子命令是必须的,不能省略。 -
args…
是子命令的参数,可以是0个,也可以是多个。
help命令
一个好的命令行工具,是绝对要有help
命令的,caddy当然不会例外。通过help
命令,你可以详细的了解caddy的用法和帮助说明,可以让我们很快的入门使用。
➜ ~ caddy help
Caddy is an extensible server platform.
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
命令的详细用法。
➜ ~ caddy help file-server
//我特意省略了很多描述,不然文字太多了
usage:
caddy file-server [--domain <example.com>] [--root <path>] [--listen <addr>] [--browse] [--access-log]
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
或者关闭终端退出。它的用法为:
usage:
caddy run [--config <path> [--adapter <name>]] [--envfile <path>] [--environ] [--resume] [--watch] [--pidfile <fil>]
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
## 加载当前目录下名称为Caddyfile的配置文件启动caddy,并且监控到配置文件改变的时候,自动重新加载配置。
➜ caddy run -config Caddyfile -watch
示例2
## 和示例1相比,增加了一个pid文件
➜ caddy run -config Caddyfile -watch -pidfile /var/run/flysnow.pid
run
命令其他flag
的用法都大同小异,这里不再做演示,你自己可以试一下。
start命令
start
命令的使用run
一样,不同的是start
会启动一个在后台运行的caddy,这意味着它不会阻塞终端的使用,你可以去做其他甚至退出当前终端,但是一个caddy已经被启动了,你可以正常访问托管的网络服务。
stop命令
start
命令对应的就是stop
命令,需要使用stop
命令通知后台正在运行的caddy,它的使用格式如下所示:
➜ ~ caddy help stop
Stops the background Caddy process as gracefully as possible.
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的管理地址是localhost:2021,所以需要指定才可以停止caddy
caddy stop -address localhost:2021
这里有个小提示,caddy在启动后,不仅可以通过终端命令来管理它,还可以通过API,也就是说caddy提供了一组API服务,用于管理它自身,比如加载配置等。这组管理API默认的地址就是localhost:2019
,所以当你的caddy启动起来后,在浏览器里输入这个地址,就可以看到相应的配置信息了。
reload命令
通过satrt
启动的caddy是不轻易停止的,因为这会导致网络服务不可用。但是你又想使你修改的配置文件生效,怎么办呢?caddy提供了reload
命令可以帮我们做到,这个Nginx是一样的。
➜ ~ caddy help reload
usage:
caddy reload --config <path> [--adapter <name>] [--address <interface>]
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命令
这个命令可以启动一个文件服务,比如托管一个静态网站、把你的文件夹共享在网络上等等。它的使用如下所示:
➜ ~ caddy help file-server
//我特意省略了很多描述,不然文字太多了
usage:
caddy file-server [--domain <example.com>] [--root <path>] [--listen <addr>] [--browse] [--access-log]
flags:
-access-log
启用访问日志
-browse
启用目录浏览
-domain string
指定一个域名
-listen string
监听的地址,http默认是:80,https默认是:443
-root string
要托管的文件服务的根目录
-templates
启用模板渲染
关于file-server命令的使用可以参考我的这篇 Caddy实战(一)| 托管你的网站,只需一行命令文章,这里不再赘述。
reverse-proxy 命令
在caddy中,配置一个反向代理非常简单,使用reverse-proxy
命令即可。
➜ ~ caddy help 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
,运行如下命令即可。
➜ ~ caddy reverse-proxy --to 127.0.0.1:9000
现在,使用localhost
访问,其实就是访问的127.0.0.1:9000
这个后端服务。
假如你想换个端口访问,比如localhost:2016
,只需要运行如下命令即可。
➜ ~ caddy reverse-proxy --from :2016 --to 127.0.0.1:9000
adapt 命令
caddy是有自己的配置文件的,它叫Caddyfile,这是一种可读性、书写性非常强的配置文件,类似Nginx 的Config,但是它并不是caddy的原生配置文件,caddy的原生配置文件是JSON的,但是非常复杂。
adapt这个命令就是给我们提供了Caddyfile转JSON原生配置的能力,让我们可以看到真实的配置是什么。它的用法如下:
➜ ~ caddy help adapt
usage:
caddy adapt --config <path> [--adapter <name>] [--pretty] [--validate]
flags:
-adapter string
配置适配器的名字,默认是 caddyfile。其实就是告诉命令,要使用什么样的适配器,把相应的配置转为JSON原生配置
-config string
配置文件
-pretty
是否美化输出
-validate
可以帮助检验下输出,其实并没有真正的运行caddy
比如最简单的Caddyfile,只有一行localhost
,使用adapt
命令转为JSON原生配置的结果如下:
➜ ~ caddy adapt --config ~/Desktop/Caddyfile --pretty
{
"apps": {
"http": {
"servers": {
"srv0": {
"listen": [
":443"
],
"routes": [
{
"match": [
{
"host": [
"localhost"
]
}
],
"terminal": true
}
]
}
}
}
}
}
还是非常复杂的,包括端口、路由的配置都有,所以还是用Caddyfile配置效率最高,可读性也强。
fmt命令
这是caddy提供的一个辅助工具,可以帮你格式化你的Caddyfile配置文件,让它更美观。
➜ ~ caddy help fmt
usage:
caddy fmt [--overwrite] [<path>]
flags:
-overwrite
用格式化后的结果,覆盖你的配置文件
整个命令非常简单,比如我想用这个命令把我的配置文件美化下,并且把美化的结果覆盖我的配置文件,可以这么做。
➜ ~ caddy fmt --overwrite ~/Desktop/Caddyfile
environ命令
打印caddy知道的环境变量,你可以看到很多关于caddy自身和你的系统环境的信息,这对于你调试caddy命令非常有用,比如启动不了?路径设置是否错误等等。
它的用法非常简单,在终端输入如下命令,即可看到环境变量信息。
➜ ~ caddy environ
hash-password命令
一个自带的密码Hash工具,主要用来为配置文件的授权提供Hash过的密码,因为不能配置明文密码。
➜ ~ caddy help hash-password
usage:
caddy hash-password [--algorithm <name>] [--salt <string>] [--plaintext <password>]
flags:
-algorithm string
Hash算法,支持scrypt和bcrypt两种,默认是bcrypt
-plaintext string
要Hash的明文密码
-salt string
加点盐,仅当Hash算法是scrypt有效
看看这个工具运行的效果。
➜ ~ caddy hash-password --plaintext 1
JDJhJDE0JGJLdzc0M0R1bDUzOTNTWGVJSTV4QU9kMGpQNC5WQTBnZ1E4N3FKOVpXUmQ1NEE2dmRzMWR1
list-modules命令
caddy是支持模块的,而且我们可以开发自己的模块,所以这个命令可以列出caddy当前已经安装的模块。
➜ ~ caddy list-modules --packages
admin.api.load
admin.api.metrics
admin.api.reverse_proxy
caddy.adapters.caddyfile
caddy.config_loaders.http
caddy.listeners.tls
caddy.logging.encoders.console
caddy.logging.encoders.filter
caddy.logging.encoders.filter.delete
caddy.logging.encoders.filter.ip_mask
caddy.logging.encoders.filter.replace
caddy.logging.encoders.json
caddy.logging.encoders.single_field
......
build-info命令
打印caddy的构建信息,主要是GoModule的依赖信息,包括包名、版本等。
trust命令
安装一个根证书到本地信任存储中,可能会需要密码才能安装,主要用于开发环境。大部分情况下,这个命令是用不到的,因为caddy启动的时候会自动安装证书。
untrust命令
从本地信任存储中,卸载一个根证书,也是用于开发环境,和上面的trust
命令是对应的。
➜ ~ caddy help untrust
usage:
caddy untrust [--ca <id> | --cert <path>]
flags:
-ca string
要卸载CA证书的ID,默认为local
-cert string
要卸载CA证书的路径
upgrade命令
这个是升级caddy的命令,它会下载最新的二进制文件,然后把本地的给替换了。这个过程并不会停止caddy服务,所以不用担心,它仅仅是替换你的caddy文件。
当然,为了保险起见,原来的二进制文件还是要备份一下。
validate命令
这是一个验证Caddyfile配置文件的命令,它会模拟启动caddy,但是并不会真的启动。验证的过程中,遇到的问题,会在控制台输出。它的使用和adapt
命令基本上一致。
➜ ~ caddy help validate
usage:
caddy validate --config <path> [--adapter <name>]
flags:
-adapter string
配置适配器的名字,默认是 caddyfile
-config string
配置文件的路径
version命令
最简单的一个命令了,打印出caddy的版本,大部分的命令行工具都具备。
➜ ~ caddy version
(devel)
哈哈,看到了吧,我这个其实是我自己编译的一个开发版。
小结
这一篇非常详细的介绍了caddy命令的使用,建议收藏,需要的时候可以当做手册来用。下一篇开始,就要介绍Caddyfile这个配置文件了。
精彩推荐
本文为原创文章,转载注明出处,欢迎扫码关注公众号
flysnow_org
或者网站https://www.flysnow.org/,第一时间看后续精彩文章。觉得好的话,请猛击文章右下角「在看」,感谢支持。
扫码关注
分享、点赞、在看就是最大的支持
文章评论