Caddy 實戰(二)- Caddy 命令行參數最全教程

在上一篇 Caddy 實戰(一)| 託管你的網站,只需一行命令文章中,你已經成功安裝了 Caddy,並且使用caddy file-server命令成功託管了自己的網站,那麼這一篇文章中呢,我就爲你詳細的介紹 Caddy 的命令以及他們的參數。

前方萬字文章高能,請大佬搬好板凳看~

命令行參數用法

Caddy 是一個標準的 unix-like 命令,它的基本用法爲:

caddy <command> [<args...>]

其中:

  1. command是 caddy 的子命令,比如上一篇文章中的file-server。子命令是必須的,不能省略。

  2. 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 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/,第一時間看後續精彩文章。覺得好的話,請猛擊文章右下角「在看」,感謝支持。

分享、點贊、在看就是最大的支持

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/asnrjAhk_UUzbIlb6gisBw