# Windows 上 Caddy 服務操作文件(PowerShell) 本文提供在 Windows 以系統服務(Service)方式執行 Caddy 的日常操作與疑難排解。以下假設服務名稱為 `CaddyServer`(與截圖一致),Caddy 可執行檔與設定檔位於 `C:\Caddy\caddy.exe` 與 `C:\Caddy\Caddyfile`(如與實際不同,請替換路徑)。 ## 1. 前置條件 - 使用 PowerShell(建議以系統管理員身分執行)。 - 已安裝並註冊 Windows 服務:`CaddyServer`。 - 建議以絕對路徑啟動 Caddy,避免工作目錄差異。 ## 2. 常用服務操作(PowerShell) ### 2.1 查詢狀態 ```powershell Get-Service -Name CaddyServer # 或更詳細: sc.exe query CaddyServer ``` ### 2.2 啟動 / 停止 / 重啟 ```powershell Start-Service -Name CaddyServer # 啟動 Stop-Service -Name CaddyServer # 優雅停止 Restart-Service -Name CaddyServer # 重啟 # 若停止失敗可強制: Stop-Service -Name CaddyServer -Force ``` ### 2.3 設定開機自動啟動/停用 ```powershell Set-Service -Name CaddyServer -StartupType Automatic # 開機自動 Set-Service -Name CaddyServer -StartupType Disabled # 停用開機啟動 ``` ### 2.4 不中斷重新載入設定(熱載入) > 需 Caddy 的 admin API 可用(預設只在本機 127.0.0.1:2019)。 ```powershell & "C:\\Caddy\\caddy.exe" reload ` --config "C:\\Caddy\\Caddyfile" ` --adapter caddyfile ``` ### 2.5 驗證設定檔(不啟動) ```powershell & "C:\\Caddy\\caddy.exe" validate ` --config "C:\\Caddy\\Caddyfile" ` --adapter caddyfile ``` ### 2.6 檢查埠占用與連線 ```powershell Get-NetTCPConnection -LocalPort 80,443 | Select-Object -Property LocalPort,State,OwningProcess Test-NetConnection -ComputerName localhost -Port 80 Test-NetConnection -ComputerName localhost -Port 443 ``` ## 3. 日誌與疑難排解 ### 3.1 建議的檔案日誌設定(Caddyfile 範例) 若尚未把 Caddy 日誌輸出到檔案,建議加入以下區塊,便於用服務時查看: ```caddyfile { log { output file C:\\Caddy\\logs\\caddy.log format console level INFO } } ``` 重載設定後即可以下列方式即時查看: ```powershell Get-Content -Path "C:\\Caddy\\logs\\caddy.log" -Tail 200 -Wait ``` > 如果你已使用其他服務包裝器(如 NSSM、WinSW)將輸出導到檔案或事件檢視器,請依該方案查看。 ### 3.2 常見位置與資料目錄 - Caddyfile:`C:\Caddy\Caddyfile` - 建議顯式指定資料目錄(儲存憑證等):在服務啟動命令中加入 `--data "C:\Caddy\data"`。 - 若未指定且服務以 LocalSystem 執行,預設資料目錄常見於: `C:\Windows\System32\config\systemprofile\AppData\Roaming\Caddy` ### 3.3 防火牆與埠 確保 Windows 防火牆允許 80、443 連入: ```powershell New-NetFirewallRule -DisplayName "Caddy HTTP" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow New-NetFirewallRule -DisplayName "Caddy HTTPS" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow ``` ### 3.4 憑證更新與到期 Caddy 會自動簽發/續約憑證。若網域、DNS 或連線受阻導致續約失敗,請先以 `validate` 檢查設定,再查看日誌中 ACME/HTTP-01 或 TLS-ALPN-01 的錯誤訊息。 ## 4. 更新與回滾 Caddy ```powershell # 1) 停止服務 Stop-Service -Name CaddyServer # 2) 備份舊版 Copy-Item "C:\\Caddy\\caddy.exe" "C:\\Caddy\\caddy.exe.bak" # 3) 放置新版 caddy.exe 至相同路徑 # 4) 啟動並確認 Start-Service -Name CaddyServer Get-Service -Name CaddyServer # 若有問題可回滾: Stop-Service -Name CaddyServer Move-Item -Force "C:\\Caddy\\caddy.exe.bak" "C:\\Caddy\\caddy.exe" Start-Service -Name CaddyServer ``` ## 5. 安全性建議 - 將服務執行帳號設為權限較小的帳號(例如專用服務帳號),並確保其對 `C:\Caddy` 與資料目錄有必要的讀寫權限即可。 - 若不需要,請關閉或限制 admin API 的對外存取(預設僅本機)。 - 僅開放必要埠,並限制後端服務只允許本機/內網訪問。 ## 6.(附)尚未安裝為服務時的建立方式 若環境尚未註冊 Windows 服務,可用最簡方式以 `sc.exe` 建立(需絕對路徑,`binPath=` 之後必須有空白): ```powershell sc.exe create CaddyServer ` binPath= '"C:\Caddy\caddy.exe" run --environ --config "C:\Caddy\Caddyfile" --data "C:\Caddy\data"' ` start= auto ` DisplayName= "CaddyServer" # 建議加入故障自動重啟策略(可選): sc.exe failure CaddyServer reset= 86400 actions= restart/60000/restart/60000/restart/60000 ``` > 進階:需要設定工作目錄、輸出重導或更彈性的重啟策略,建議改用 NSSM 或 WinSW 這類服務包裝器。 ## 7. 快速指令表(摘要) ```powershell Get-Service CaddyServer # 查看狀態 Start-Service CaddyServer # 啟動 Stop-Service CaddyServer # 停止 Restart-Service CaddyServer # 重啟 Set-Service CaddyServer -StartupType Automatic # 自動啟動 & C:\\Caddy\\caddy.exe validate --config C:\\Caddy\\Caddyfile --adapter caddyfile & C:\\Caddy\\caddy.exe reload --config C:\\Caddy\\Caddyfile --adapter caddyfile Get-Content C:\\Caddy\\logs\\caddy.log -Tail 200 -Wait ``` --- 若需要把以上內容微調成你環境的實際路徑與流程,告訴我服務名稱、Caddyfile 位置與是否已啟用檔案日誌,我可幫你產生一份對應的最終版 SOP。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up