Docker 部署指南

August 23, 2026 · View on GitHub

本指南介绍如何使用 Docker 部署 aflare。

快速开始

使用预构建镜像

# 拉取最新镜像
docker pull ghcr.io/alib8b8/aflare:latest

# 运行工作流
docker run --rm \
  -v $(pwd)/workflows:/workflows \
  -v $(pwd)/output:/output \
  -e ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} \
  ghcr.io/alib8b8/aflare:latest \
  run /workflows/my-workflow.yaml

使用特定版本

docker pull ghcr.io/alib8b8/aflare:v0.2.10

docker run --rm \
  -v $(pwd)/workflows:/workflows \
  ghcr.io/alib8b8/aflare:v0.2.10 \
  run /workflows/my-workflow.yaml

本地构建

构建镜像

# 克隆仓库
git clone https://github.com/alib8b8/aflare.git
cd aflare

# 构建镜像
docker build -t aflare:latest .

多平台构建

# 启用 buildx
docker buildx create --use

# 构建 linux/amd64 和 linux/arm64
docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t aflare:latest \
  --push \
  .

Dockerfile

项目使用以下 Dockerfile:

# Stage 1: Build
FROM golang:1.26-alpine AS builder

WORKDIR /app

# 安装依赖
RUN apk add --no-cache git ca-certificates

# 复制 go.mod 和 go.sum
COPY go.mod go.sum ./
RUN go mod download

# 复制源代码
COPY . .

# 构建
RUN CGO_ENABLED=0 GOOS=linux go build \
    -ldflags "-s -w -X main.version=$(git describe --tags --always --dirty)" \
    -o aflare ./cmd/aflare

# Stage 2: Runtime
FROM alpine:3.20

WORKDIR /app

# 安装运行时依赖
RUN apk add --no-cache ca-certificates tzdata

# 从构建阶段复制二进制文件
COPY --from=builder /app/aflare /app/aflare

# 创建必要目录
RUN mkdir -p /workflows /output /nodes

# 设置环境变量
ENV AFLARE_CONFIG=/app/config.yaml
ENV AFLARE_LOG_LEVEL=info
ENV TZ=Asia/Shanghai

# 设置工作目录
WORKDIR /workflows

# 入口点
ENTRYPOINT ["/app/aflare"]
CMD ["--help"]

配置

环境变量

变量描述默认值
AFLARE_CONFIG配置文件路径/app/config.yaml
AFLARE_LOG_LEVEL日志级别info
AFLARE_CACHE_DIR缓存目录/tmp/aflare-cache
ANTHROPIC_API_KEYAnthropic API 密钥-
OPENAI_API_KEYOpenAI API 密钥-
DEEPSEEK_API_KEYDeepSeek API 密钥-

挂载卷

docker run --rm \
  -v $(pwd)/workflows:/workflows \      # 工作流目录
  -v $(pwd)/output:/output \            # 输出目录
  -v $(pwd)/nodes:/nodes \              # 自定义节点
  -v $(pwd)/config.yaml:/app/config.yaml \  # 配置文件
  -v aflare-cache:/tmp/aflare-cache \  # 持久化缓存
  ghcr.io/alib8b8/aflare:latest \
  run /workflows/my-workflow.yaml

配置文件示例

创建 config.yaml

# aflare 配置

# 日志设置
log:
  level: info
  format: json

# 提供商设置
providers:
  openai:
    api_key: ${OPENAI_API_KEY}
    base_url: https://api.openai.com/v1
  anthropic:
    api_key: ${ANTHROPIC_API_KEY}
    base_url: https://api.anthropic.com/v1
  ollama:
    base_url: http://host.docker.internal:11434

# 默认模型
default_model: gpt-4o-mini

# 安全设置
security:
  max_file_size: 10MB
  max_steps: 1000
  allowed_hosts:
    - api.openai.com
    - api.anthropic.com

Docker Compose

基本配置

创建 docker-compose.yml

version: '3.8'

services:
  aflare:
    image: ghcr.io/alib8b8/aflare:latest
    container_name: aflare
    restart: unless-stopped
    volumes:
      - ./workflows:/workflows
      - ./output:/output
      - ./nodes:/nodes
      - aflare-cache:/tmp/aflare-cache
    environment:
      - AFLARE_LOG_LEVEL=info
      - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
      - OPENAI_API_KEY=${OPENAI_API_KEY}
    command: ["run", "--watch", "/workflows"]

volumes:
  aflare-cache:

带本地 Ollama

version: '3.8'

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    restart: unless-stopped
    ports:
      - "11434:11434"
    volumes:
      - ollama-data:/root/.ollama
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

  aflare:
    image: ghcr.io/alib8b8/aflare:latest
    container_name: aflare
    restart: unless-stopped
    depends_on:
      - ollama
    volumes:
      - ./workflows:/workflows
      - ./output:/output
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
    command: ["run", "/workflows/my-workflow.yaml"]

volumes:
  ollama-data:

定时执行

使用 cron 定时运行工作流:

version: '3.8'

services:
  aflare-cron:
    image: ghcr.io/alib8b8/aflare:latest
    container_name: aflare-cron
    restart: unless-stopped
    volumes:
      - ./workflows:/workflows
      - ./output:/output
    environment:
      - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
    entrypoint: |
      sh -c "
        echo '0 9 * * * cd /workflows && /app/aflare run daily-report.yaml' | crontab -
        crond -f
      "

Kubernetes 部署

Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: aflare
  labels:
    app: aflare
spec:
  replicas: 1
  selector:
    matchLabels:
      app: aflare
  template:
    metadata:
      labels:
        app: aflare
    spec:
      containers:
      - name: aflare
        image: ghcr.io/alib8b8/aflare:latest
        resources:
          requests:
            memory: "256Mi"
            cpu: "100m"
          limits:
            memory: "512Mi"
            cpu: "500m"
        env:
        - name: ANTHROPIC_API_KEY
          valueFrom:
            secretKeyRef:
              name: aflare-secrets
              key: anthropic-api-key
        volumeMounts:
        - name: workflows
          mountPath: /workflows
        - name: output
          mountPath: /output
      volumes:
      - name: workflows
        configMap:
          name: aflare-workflows
      - name: output
        emptyDir: {}

CronJob

apiVersion: batch/v1
kind: CronJob
metadata:
  name: aflare-daily
spec:
  schedule: "0 9 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: aflare
            image: ghcr.io/alib8b8/aflare:latest
            args:
            - run
            - /workflows/daily-report.yaml
            env:
            - name: ANTHROPIC_API_KEY
              valueFrom:
                secretKeyRef:
                  name: aflare-secrets
                  key: anthropic-api-key
          restartPolicy: OnFailure

常见问题

如何访问本地 Ollama?

在 Docker 中使用 host.docker.internal 访问宿主机:

docker run --rm \
  -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
  ghcr.io/alib8b8/aflare:latest \
  run my-workflow.yaml

Linux 用户可能需要添加:

--add-host=host.docker.internal:host-gateway

如何持久化缓存?

docker run --rm \
  -v aflare-cache:/tmp/aflare-cache \
  ghcr.io/alib8b8/aflare:latest \
  run my-workflow.yaml

如何调试?

# 进入容器
docker run --rm -it \
  --entrypoint sh \
  ghcr.io/alib8b8/aflare:latest

# 查看日志
docker logs aflare

# 详细日志
docker run --rm \
  -e AFLARE_LOG_LEVEL=debug \
  ghcr.io/alib8b8/aflare:latest \
  run my-workflow.yaml

如何限制资源?

docker run --rm \
  --memory="512m" \
  --cpus="0.5" \
  ghcr.io/alib8b8/aflare:latest \
  run my-workflow.yaml

安全建议

  1. 不要在镜像中硬编码 API 密钥
  2. 使用 Docker secrets 或环境变量
  3. 限制容器权限
docker run --rm \
  --cap-drop=ALL \
  --read-only \
  --tmpfs /tmp \
  ghcr.io/alib8b8/aflare:latest \
  run my-workflow.yaml
  1. 使用非 root 用户(已在镜像中配置)

  2. 定期更新基础镜像

docker pull alpine:3.20
docker build --no-cache -t aflare:latest .

更多资源