Caddy 部署實踐

jopen 9年前發布 | 36K 次閱讀 Caddy Web服務器

TL’DR Caddy 就是用 Go 語言實現的一款 Web 服務器

我最早接觸到 Caddy 是偶然發現國內某個博客的簡單介紹,然后上到 GitHub 一看發現竟然認識作者(一起在 GopherCon 吃過薯片算不算 ),接著出于對 Go 寫的程序的天然好感,于是就一直琢磨著什么時候可以趕個時髦把這貨用上。

機緣巧合下,Gogs 項目前段時間得到 DO 的開源項目服務器贊助(順便吐槽國內各大“云”主機各種無視請求郵件),于是就把我的服務器遷移到 DO 新開的加拿大機房,并且使用 Caddy 來替代 NGINX 作為我的 Web 服務器。踩到一些小坑,但整個過程還是挺滿意的。

廢話不多說,下面直接切入正題。

下載安裝步驟簡單粗暴,你可以直接從 官網 直接下載編譯好的二進制。

但是我們這里會介紹到如何安裝插件,所以還是從源碼安裝比較合適(這里使用-d表示只下載不編譯):

$ go get -d github.com/mholt/caddy

接著,安裝 Caddy 的插件管理器 caddyext

$ go get github.com/pedronasser/caddyext

我們可以先查看一下內置的插件都有哪些:

$ caddyext stack
Available Caddy directives/extensions:
   (?) ENABLED | (-) DISABLED

  1. (?) root (core)
  2. (?) tls (core)
  3. (?) bind (core)
  4. (?) startup (core)
  5. (?) shutdown (core)
  6. (?) log (core)
  7. (?) gzip (core)
  8. (?) errors (core)
  9. (?) header (core)
  10. (?) rewrite (core)
  11. (?) redir (core)
  12. (?) ext (core)
  13. (?) mime (core)
  14. (?) basicauth (core)
  15. (?) internal (core)
  16. (?) proxy (core)
  17. (?) fastcgi (core)
  18. (?) websocket (core)
  19. (?) markdown (core)
  20. (?) templates (core)
  21. (?) browse (core)</pre>

    接下來安裝 git 插件(安裝 其它插件 的步驟是一樣的)。

    首先,你需要下載這個插件( 坑了我半天,文檔也媽蛋地沒說,錯誤提示更是神乎其神):

    $ go get github.com/abiosoft/caddy-git

    然后,通過 caddyext 安裝插件的語法是caddyext install <自定義插件名稱> <插件導入路徑>:

    $ caddyext install git github.com/abiosoft/caddy-git

    檢查一下是否安裝成功:

    $ caddyext stack
    Available Caddy directives/extensions:
    (?) ENABLED | (-) DISABLED

    ...

  22. (?) markdown (core)
  23. (?) templates (core)
  24. (?) browse (core)
  25. (?) git</pre>

    不錯,我們看到 git 是排位第 21 的插件。

    這個數字表示插件的執行順序,你可以使用caddyext move來改變默認順序。不過內置插件直接有相互依賴關系,最好不要亂改內置插件的前后順序。

    除此之外,你還可以禁用某個插件等等,這里不做贅述。

    此刻,終于可以編譯我們的 Caddy 服務器啦!

    $ go install github.com/mholt/caddy

    如果你已經將$GOPATH/bin加入到環境變量$PATH中,那么可以直接執行caddy啟動服務器:

    $ caddy
    [INFO] Processing certificate renewals...
    0.0.0.0:2015

    Caddy 的默認端口是 2015(因為作者想要強調這才是 2015 年應該使用的 Web 服務器 )。

    如果這個時候你訪問 http://localhost:2015 ,你會看到無比坑爹的404 Not Found。連個歡迎頁面都沒有,簡直不能忍。據作者說這是故意的,如果像 NGINX 那樣放個歡迎頁面就好比脫褲子放屁。。。

    沒事,我忍了,但是個人喜歡 NGINX 那樣的提示,可以用來證明 Caddy 在我服務器正常運行。然后,我就利用它自帶的功能 hack 一個簡陋的歡迎頁面。

    將下面的內容保存到當前目錄(也就是你正在執行 Caddy 的目錄)下,命名為index.html:

    <!DOCTYPE html>
    <html>
    <head>
     <title>Welcome to Caddy</title>
    </head>
    <body>
     <h1>Welcome to Caddy</h1>
    </body>
    </html>

    然后重啟 Caddy,再次訪問 http://localhost:2015 。哈哈,請給我的機智點 32 個 !

    那么,如果是實際部署在服務器,你需要創建一個Caddyfile并輸入以下內容讓它監聽在80端口(真的是簡潔到爆有木有!):

    :80

    接下來的我就主要講一下有關 Pugo.Static 的部署部分(也就是你正在瀏覽的這個玩意)。

    我博客的域名是wuwen.org,目前還沒上 HTTPS,所以完整的 URL 就是http://wuwen.org。

    我啟動 Pugo.Static 的端口是默認的9899,所以,我需要像 NGINX 那樣,反向代理所有到http://wuwen.org的請求轉發給http://localhost:9899。

    獻上我珍藏已久的配置(這里用到了 proxy 插件):

    http://wuwen.org {
    proxy / localhost:9899
    }

    我要是不說,你可能都已經忘記我們剛才還裝了 git 插件  那么我們要怎么用呢?

    http://wuwen.org {
    proxy / localhost:9899
    git https://github.com/Unknwon/wuwen.pugo.git /path/to/blog {
     interval 60
    }
    }

    意思很簡單,每隔 60 秒從地址https://github.com/Unknwon/wuwen.pugo.git拉取內容到指定目錄/path/to/blog。

    好了,如此一來,我的博客不僅可以每分鐘自動同步,還有了版本管理,并且自帶云備份屬性 ——(此處應有掌聲 )

    最后,我們來看一下號稱史上第一款、目前僅此一家內置 Let’s Encrypt 支持的 Web 服務器,是如何 XXX 的。

    我目前只申請了 https://gopm.io 的資格,所以就拿這個來舉例。

    我感覺我已經快沒詞了,直接上配置文件吧:

    https://gopm.io {
    proxy / localhost:8084
    }

    此時,你啟動 caddy 需要帶上參數-ca=https://acme-v01.api.letsencrypt.org。

    Caddy 會在啟動后要求你輸入申請的郵箱等信息(填錯了直接把~/.caddy刪了重啟)。

    然后,嗯,就沒有然后了,網站配置 HTTPS 就是這么任性。

    然而它就這么赤裸裸地拋棄了傳統的 HTTPS?顯然沒,我也還有用 StartSSL 證書的站點。配置如下:

    https://gogs.io {
    tls /path/to/gogs.io.unified.crt /path/to/gogs.io-decrypted.key
    proxy / localhost:5555
    }

    (全文完)

    最后奉上已經捂出汗的 Systemd 配置文件(不用的請繞道!)以供參考:

    [Unit]
    Description=Caddy Server
    After=syslog.target
    After=network.target

[Service] User=root Group=root LimitNOFILE=64000 ExecStart=/usr/local/bin/caddy --conf=/path/to/Caddyfile -ca=https://acme-v01.api.letsencrypt.org Restart=always

[Install] WantedBy=multi-user.target</pre>

對性能感興趣的朋友可以直接去 FAQ 頁面查看和 NGINX 以及 Apache 的對比。

來自:http://wuwen.org/2014/11/13/caddy-in-action

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!