---
# System prepended metadata

title: Caddy 服務操作文件
tags: [Caddy]

---

# 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。



