Docker 部署
Panguard 提供 Docker 映像檔與 Compose 設定,用於容器化部署。本指南涵蓋單容器設定、完整堆疊 Compose 部署與正式環境強化。前置條件
| 需求 | 版本 |
|---|---|
| Docker | >= 24.0 |
| Docker Compose | >= 2.20 |
使用 Docker 快速開始
Docker Compose:基本設定(API + Ollama)
此設定運行 Panguard API 伺服器搭配本地 Ollama 執行個體,零成本進行 Layer 2 AI 分析。Docker Compose:完整堆疊(Auth + Manager + Guard + Ollama)
此設定運行完整的 Panguard 平台,包含身份驗證、機群管理與本地 AI。連接埠參考
| 連接埠 | 服務 | 協定 | 備註 |
|---|---|---|---|
3000 | API 伺服器(Auth + Web) | HTTP | 主要入口點 |
8443 | Manager 伺服器 | HTTP | 代理程式註冊、心跳、SSE |
11434 | Ollama | HTTP | 本地 AI 推論 |
2222 | Trap:SSH 蜜罐 | TCP | 預設 SSH trap 連接埠 |
8080 | Trap:HTTP 蜜罐 | TCP | 預設 HTTP trap 連接埠 |
2121 | Trap:FTP 蜜罐 | TCP | 預設 FTP trap 連接埠 |
4450 | Trap:SMB 蜜罐 | TCP | 預設 SMB trap 連接埠 |
3307 | Trap:MySQL 蜜罐 | TCP | 預設 MySQL trap 連接埠 |
3390 | Trap:RDP 蜜罐 | TCP | 預設 RDP trap 連接埠 |
2323 | Trap:Telnet 蜜罐 | TCP | 預設 Telnet trap 連接埠 |
環境變數
Guard 代理程式
| 變數 | 預設值 | 說明 |
|---|---|---|
PANGUARD_DATA_DIR | ./data | 基線、日誌、規則的資料目錄 |
PANGUARD_MODE | learning | Guard 模式:learning 或 protection |
OLLAMA_ENDPOINT | http://localhost:11434 | Ollama API 端點 |
ANTHROPIC_API_KEY | (無) | 雲端 AI 用 Claude API 金鑰 |
OPENAI_API_KEY | (無) | 雲端 AI 用 OpenAI API 金鑰 |
ABUSEIPDB_KEY | (無) | 威脅情報用 AbuseIPDB API 金鑰 |
Auth 伺服器
| 變數 | 預設值 | 說明 |
|---|---|---|
PANGUARD_PORT | 3000 | API 伺服器連接埠 |
JWT_SECRET | (無) | JWT 簽名密鑰(正式環境必要) |
GOOGLE_CLIENT_ID | (無) | Google OAuth 用戶端 ID |
GOOGLE_CLIENT_SECRET | (無) | Google OAuth 用戶端密鑰 |
Manager
| 變數 | 預設值 | 說明 |
|---|---|---|
MANAGER_PORT | 8443 | Manager HTTP 伺服器連接埠 |
MANAGER_AUTH_TOKEN | (無) | API 驗證用 Bearer token |
MANAGER_MAX_AGENTS | 500 | 最大已註冊代理程式數 |
正式環境強化
Docker 映像檔安全
正式環境 Docker 映像檔包含:- 多階段建置 — 建置依賴不在最終映像檔中
- 非 root 使用者 — 以
panguard(UID 1001)執行 - tini — 正確的 PID 1 信號處理與殭屍行程回收
- 最小套件 — 最終映像檔僅包含
tini與curl
所需權限
Guard 回應動作在 Docker 中運作需授予以下權限:檢查清單
- 設定
NODE_ENV=production(啟用 HSTS、停用萬用 CORS) - 產生強力密鑰(
openssl rand -hex 32) - 使用 TLS 終止(前方放置 nginx/Caddy 反向代理)
- 限制 Manager 連接埠的網路存取
- 將密鑰掛載為環境檔案,而非行內環境變數
- 使用命名磁碟區進行持久化資料
- 設定容器日誌輪替
日誌位置(容器內)
| 元件 | 路徑 | 格式 |
|---|---|---|
| Guard 事件 | /data/events.jsonl | JSONL |
| Guard 動作 | /data/action-manifest.jsonl | JSONL |
| Guard 基線 | /data/baseline.json | JSON |
| 應用程式日誌 | stdout/stderr | 結構化 JSON |
日誌輪替
ReportAgent 自動處理日誌輪替:| 設定 | 預設值 |
|---|---|
| 最大檔案大小 | 50 MB |
| 最大輪替檔案數 | 10 |
| 保留期間 | 90 天 |