Caddy 是一套用 Golang 撰寫的伺服器,開源並支援各種平台,Caddy 主打讓每個網站都有 SSL 憑證,使用 Caddy 架設網站會自動從 Let’s Encrypt 取得憑證,還會定期續約,真的是很方便,也不需要設定複雜的 SSL 了。
先來抱怨一下,最近搞了個免費的新域名,想說拿來架個站,剛好 GCP 有試用金,開了一台 f1-micro 機型,本來打算用 Oneinstack 的一鍵腳本架設 LNMP 環境,結果編譯了兩次才好不容易成功,編譯結束後還無法用 SSH 連接,還好 GCP 提供用序列埠(Console)方式連回 VM,要用 PHP 時發現該死的 Oneinstack 腳本竟然沒給我裝到 PHP,憤而不用 Oneinstack 腳本架設環境。
安裝
Caddy 的安裝方式很簡單,官方提供一鍵安裝腳本,可以輕鬆就把 Caddy 裝好。
先到 Caddy 的下載頁面選擇自己的伺服器作業系統平台,還有要安裝的擴充套件,然後下面就會產生指令,複製到 Terminal 執行就完成安裝了。
Run 一下 caddy
看有沒有安裝成功,預設會監聽 2015
Port,到瀏覽器輸入 http://localhost:2015
應該會出現 404 not found
。
1 | caddy |
設定
Caddy 的設定檔名稱預設為 Caddyfile
,可以在執行 Caddy 時加入參數指定設定檔路徑,否則會使用當前目錄下的 Caddyfile
作為設定。
1 | caddy -conf=/etc/caddy/Caddyfile |
Caddyfile
第一行必須為網站的網址,如果是多個網址綁定在同個空間建議第二種寫法。
1 | localhost:80 |
以下示範簡易 Caddyfile
語法,設定不會太困難,有點像是 nginx.conf
的格式,詳細語法說明請參考官方文件。
1 | example.com { |
瀏覽 example.com 應該就會出現綠色勾勾了,非常簡單。
應用於生產環境
每次啟動 Caddy 都要下指令,但要是離開 Session 就會停止了,當然你可以用 nohup caddy &
來保持一直執行,我個人比較喜歡做成 system service 來管理。
1 | sudo curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service |
根據 service 的設定,Caddy 設定檔會讀取 /etc/caddy/Caddyfile
,要先建立 /etc/caddy
目錄,並將 Caddyfile
放在目錄裡。
1 | sudo mkdir /etc/caddy |
Caddy 會將 SSL 證書放在 /etc/ssl/caddy
,要先建立此目錄。
1 | sudo mkdir /etc/ssl/caddy |
SSL 目錄裡面放有私鑰,把權限設定成 0770
來禁止其他使用者存取。
可以先啟動 Caddy,看 status
有沒有錯誤訊息。
1 | sudo systemctl start caddy # 啟動 Caddy |
若出現 active
,那恭喜你,已經成功部署 Caddy 了。
1 | ● caddy.service - Caddy HTTP/2 web server |
GCP 上無法啟動 Caddy
如果在 GCP 架設 Caddy 的話要注意,GCP 因為安全考量,必須要用 root 身分執行 Caddy 才能監聽 80
Port,所以要修改 caddy.service
。
1 | sudo vim /etc/systemd/system/caddy.service |
在 User
的地方改成 root
,以 root 身分執行指令,一般的伺服器環境不需要做此設定。
1 | ; User and group the process will run as. |
最後開啟瀏覽器輸入網址應該就能看見你的網頁了。