Skip to main content

Docker 部署

Panguard 提供 Docker image 和 Compose config,方便容器化部署。這篇涵蓋單容器、完整堆疊 Compose、正式環境強化。

前置需求

需求版本
Docker>= 24.0
Docker Compose>= 2.20

Docker 快速開始

1

拉 image

docker pull panguard/panguard-ai:latest
2

跑容器

docker run -d \
  --name panguard \
  -p 3000:3000 \
  -v panguard-data:/data \
  panguard/panguard-ai:latest
3

確認

docker logs panguard

Docker Compose:基本(API + Ollama)

這個 config 跑 Panguard API server 搭配本地 Ollama,零成本做 Layer 2 AI 分析。
# docker-compose.yml
services:
  panguard:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: panguard
    restart: unless-stopped
    ports:
      - '3000:3000'
    volumes:
      - panguard-data:/data
      - ./config:/app/config:ro
    environment:
      - PANGUARD_DATA_DIR=/data
      - PANGUARD_PORT=3000
      - OLLAMA_ENDPOINT=http://ollama:11434
    depends_on:
      ollama:
        condition: service_healthy

  ollama:
    image: ollama/ollama:latest
    container_name: panguard-ollama
    restart: unless-stopped
    ports:
      - '11434:11434'
    volumes:
      - ollama-models:/root/.ollama
    healthcheck:
      test: ['CMD', 'curl', '-f', 'http://localhost:11434/api/tags']
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 30s

volumes:
  panguard-data:
  ollama-models:
# build 並啟動
docker compose up -d

# 拉 Ollama model(只有第一次需要)
docker exec panguard-ollama ollama pull llama3

# 看日誌
docker compose logs -f panguard

Docker Compose:完整堆疊(Guard + Ollama + Threat Cloud)

跑完整 Panguard 平台,含 Guard 防護和本地 AI。
# docker-compose.full.yml
services:
  panguard:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: panguard
    restart: unless-stopped
    ports:
      - '3000:3000'
    volumes:
      - panguard-data:/data
      - ./config:/app/config:ro
    environment:
      - PANGUARD_DATA_DIR=/data
      - PANGUARD_PORT=3000
      - OLLAMA_ENDPOINT=http://ollama:11434
    depends_on:
      ollama:
        condition: service_healthy
    networks:
      - panguard-net

  ollama:
    image: ollama/ollama:latest
    container_name: panguard-ollama
    restart: unless-stopped
    ports:
      - '11434:11434'
    volumes:
      - ollama-models:/root/.ollama
    networks:
      - panguard-net
    healthcheck:
      test: ['CMD', 'curl', '-f', 'http://localhost:11434/api/tags']
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 30s

volumes:
  panguard-data:
  ollama-models:

networks:
  panguard-net:
    driver: bridge
docker compose -f docker-compose.full.yml up -d

Port 參考

Port服務協定備註
3000API ServerHTTP主要入口
11434OllamaHTTP本地 AI 推論
2222SSH 蜜罐TCP預設 SSH 蜜罐 port
8080HTTP 蜜罐TCP預設 HTTP 蜜罐 port
2121FTP 蜜罐TCP預設 FTP 蜜罐 port
4450SMB 蜜罐TCP預設 SMB 蜜罐 port
3307MySQL 蜜罐TCP預設 MySQL 蜜罐 port
3390RDP 蜜罐TCP預設 RDP 蜜罐 port
2323Telnet 蜜罐TCP預設 Telnet 蜜罐 port

環境變數

Guard Agent

變數預設值說明
PANGUARD_DATA_DIR./data基線、日誌、規則的資料目錄
PANGUARD_MODElearningGuard 模式:learningprotection
OLLAMA_ENDPOINThttp://localhost:11434Ollama API 端點
ANTHROPIC_API_KEY(無)Claude API key,雲端 AI 用
OPENAI_API_KEY(無)OpenAI API key,雲端 AI 用
ABUSEIPDB_KEY(無)AbuseIPDB API key,威脅情報用

API Server

變數預設值說明
PANGUARD_PORT3000API server port
正式環境的 Compose 檔不要把密鑰寫在 environment 裡。改用權限受限的 env_file
env_file:
  - /etc/panguard/guard.env  # chmod 600

正式環境強化

Docker Image 安全

正式環境 image 包含:
  • 多階段 build — build 依賴不會進最終 image
  • 非 root 使用者 — 以 panguard(UID 1001)跑
  • tini — 正確的 PID 1 信號處理和 zombie process 回收
  • 最小套件 — 最終 image 只有 tinicurl

需要的 Capabilities

Guard 回應動作在 Docker 裡要授予這些 capabilities:
cap_add:
  - NET_ADMIN    # 透過 iptables 封鎖 IP
  - KILL         # 砍惡意 process
  - SYS_PTRACE   # 記憶體掃描

檢查清單

  • NODE_ENV=production(開啟 HSTS、關閉萬用 CORS)
  • 產生強力密鑰(openssl rand -hex 32
  • 用 TLS 終止(前面放 nginx/Caddy 反向代理)
  • 限制 Manager port 的網路存取
  • 密鑰用 env file 掛載,不要用行內環境變數
  • 用 named volume 做持久化
  • 設好容器日誌輪替

日誌位置(容器內)

元件路徑格式
Guard 事件/data/events.jsonlJSONL
Guard 動作/data/action-manifest.jsonlJSONL
Guard 基線/data/baseline.jsonJSON
應用程式日誌stdout/stderr結構化 JSON

日誌輪替

ReportAgent 自動處理日誌輪替:
設定預設值
最大檔案大小50 MB
最大輪替檔案數10
保留期間90 天

備份策略

定期備份這些關鍵檔案:
  • 基線資料/data/baseline.json)— 丟了要重跑學習模式
  • Threat Cloud 資料庫 — 定期備份 SQLite
  • Config — config 和環境檔存進版本控制或密鑰管理服務

相關文件

系統服務

不用 Docker,把 Guard 裝成原生 systemd/launchd 服務。

多端點部署

把 Guard agent 連線到集中式 Manager。

Threat Cloud

在 Guard 機群旁邊部署 Threat Cloud。

架構

平台的完整技術架構。