ソースを参照

refactor(docker): 对齐成功案例结构,解决 podman-compose 部署问题

- 移动 Dockerfile 到根目录(Dockerfile.auto_put_ad_mini)
- 移动 docker-compose.yml 到根目录,使用标准文件名
- 清理业务目录的 Docker 配置文件(docker-test.sh 等)
- 使用私有基础镜像 registry.cn-hangzhou.aliyuncs.com/stuuudy/python:3.13-slim
- 修复 ECS podman-compose 1.0.6 路径解析问题(context: . + dockerfile: Dockerfile.auto_put_ad_mini)

参考成功案例 content-finder 的配置结构,完全对齐文件位置和命名规范。

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
刘立冬 1 ヶ月 前
コミット
b2823c79d0

+ 40 - 0
Dockerfile.auto_put_ad_mini

@@ -0,0 +1,40 @@
+FROM registry.cn-hangzhou.aliyuncs.com/stuuudy/python:3.13-slim
+
+WORKDIR /app
+
+# 安装系统依赖(使用阿里云镜像源)
+RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources \
+    && apt-get update \
+    && apt-get install -y --no-install-recommends curl \
+    && rm -rf /var/lib/apt/lists/*
+
+# 复制依赖文件(参考成功案例的路径风格)
+COPY examples/auto_put_ad_mini/requirements.txt .
+
+# 安装 Python 依赖(使用阿里云 PyPI 镜像)
+RUN pip install --no-cache-dir -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt
+
+# 复制项目代码(参考成功案例的风格)
+COPY agent/ ./agent/
+COPY examples/auto_put_ad_mini/ ./examples/auto_put_ad_mini/
+
+# 设置工作目录到业务目录(参考成功案例)
+WORKDIR /app/examples/auto_put_ad_mini
+
+# 创建输出目录
+RUN mkdir -p outputs/{raw,ad_status,reports,execution_log,data}
+
+# 设置环境变量
+ENV PYTHONUNBUFFERED=1 \
+    TZ=UTC \
+    PYTHONPATH=/app
+
+# 暴露端口
+EXPOSE 8080
+
+# 健康检查
+HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
+    CMD curl -f http://localhost:8080/health || python -c "import pathlib; pathlib.Path('/app/examples/auto_put_ad_mini/outputs').exists()" || exit 1
+
+# 启动命令
+CMD ["python", "server.py"]

+ 5 - 8
examples/auto_put_ad_mini/docker-compose.yml → docker-compose.yml

@@ -1,9 +1,9 @@
 services:
   auto_put_ad_mini:
+    image: registry.cn-hangzhou.aliyuncs.com/stuuudy/ad-put-agent:${VERSION:-latest}
     build:
-      context: ../..  # 从Agent根目录构建
-      dockerfile: examples/auto_put_ad_mini/Dockerfile
-    image: registry.cn-hangzhou.aliyuncs.com/stuuudy/ad-put-agent:latest
+      context: .  # 项目根目录
+      dockerfile: Dockerfile.auto_put_ad_mini  # 根目录的 Dockerfile(参考成功案例)
     container_name: auto_put_ad_mini
     environment:
       # 基础配置
@@ -50,12 +50,9 @@ services:
       - RUN_ON_STARTUP=${RUN_ON_STARTUP:-false}
       - PORT=${PORT:-8080}
     ports:
-      - "8080:8080"  # 暴露FastAPI端口
+      - "8080:8080"
     volumes:
-      - ./outputs:/app/outputs  # 持久化输出
-      # 注意:单文件挂载有风险,如果文件不存在 Docker 会创建同名目录导致启动失败
-      # 如需热更新配置,请确保 config.py 存在后再取消注释:
-      # - ./config.py:/app/config.py
+      - ./examples/auto_put_ad_mini/outputs:/app/outputs
     networks:
       - ad_network
     restart: unless-stopped

+ 0 - 48
examples/auto_put_ad_mini/Dockerfile

@@ -1,48 +0,0 @@
-# 使用官方 Python 3.10 slim 镜像(支持多架构)
-FROM python:3.10-slim
-
-# 设置工作目录
-WORKDIR /app
-
-# 安装系统依赖(使用阿里云镜像源)
-RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources \
-    && apt-get update \
-    && apt-get install -y --no-install-recommends curl \
-    && rm -rf /var/lib/apt/lists/*
-
-# 复制依赖文件
-COPY examples/auto_put_ad_mini/requirements.txt .
-
-# 安装 Python 依赖(使用阿里云 PyPI 镜像)
-RUN pip install --no-cache-dir -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt
-
-# 复制 Agent 框架(从项目根目录)
-COPY agent /app/agent
-
-# 复制项目文件(排除 outputs/ 和 .venv/,不包含agent目录)
-COPY examples/auto_put_ad_mini/*.py /app/
-COPY examples/auto_put_ad_mini/prompts /app/prompts/
-COPY examples/auto_put_ad_mini/tools /app/tools/
-COPY examples/auto_put_ad_mini/skills /app/skills/
-COPY examples/auto_put_ad_mini/db /app/db/
-COPY examples/auto_put_ad_mini/*.json /app/
-COPY examples/auto_put_ad_mini/*.md /app/
-
-# 创建输出目录
-RUN mkdir -p outputs/{raw,ad_status,reports,execution_log,data}
-
-# 设置环境变量(生产环境覆盖)
-ENV PYTHONUNBUFFERED=1 \
-    TZ=UTC \
-    PYTHONPATH=/app
-
-# 暴露端口(用于 FastAPI server.py)
-EXPOSE 8080
-
-# 健康检查(使用 FastAPI 端点,如果可用)
-HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
-    CMD curl -f http://localhost:8080/health || python -c "import pathlib; pathlib.Path('/app/outputs').exists()" || exit 1
-
-# 默认命令:启动 FastAPI 服务器(而非单次执行)
-# 如需单次执行,可覆盖为:docker run <image> python execute_once.py
-CMD ["python", "server.py"]

+ 0 - 107
examples/auto_put_ad_mini/docker-test.sh

@@ -1,107 +0,0 @@
-#!/bin/bash
-# Docker 本地测试脚本
-
-set -e
-
-echo "========================================================================"
-echo "🐳 Docker 本地测试环境"
-echo "========================================================================"
-
-# 颜色定义
-GREEN='\033[0;32m'
-YELLOW='\033[1;33m'
-RED='\033[0;31m'
-NC='\033[0m' # No Color
-
-# 检查.env文件
-if [ ! -f .env ]; then
-    echo -e "${RED}❌ 错误:.env 文件不存在${NC}"
-    echo "请先创建 .env 文件(可以从 .env.example 复制)"
-    exit 1
-fi
-
-echo ""
-echo "📋 步骤1:清理旧容器和镜像(如果存在)"
-echo "----------------------------------------"
-docker-compose down 2>/dev/null || true
-docker rmi auto_put_ad_mini-auto_put_ad_mini 2>/dev/null || true
-
-echo ""
-echo "📦 步骤2:构建Docker镜像"
-echo "----------------------------------------"
-echo "⚠️  注意:首次构建可能需要5-10分钟..."
-docker-compose build
-
-echo ""
-echo "🚀 步骤3:启动容器"
-echo "----------------------------------------"
-docker-compose up -d
-
-echo ""
-echo "⏳ 等待服务启动(10秒)..."
-sleep 10
-
-echo ""
-echo "📊 步骤4:检查容器状态"
-echo "----------------------------------------"
-docker-compose ps
-
-echo ""
-echo "🏥 步骤5:健康检查"
-echo "----------------------------------------"
-echo "正在检查 http://localhost:8080/health ..."
-
-if command -v jq &> /dev/null; then
-    curl -s http://localhost:8080/health | jq .
-else
-    curl -s http://localhost:8080/health
-fi
-
-if [ $? -eq 0 ]; then
-    echo -e "${GREEN}✅ 服务健康检查通过!${NC}"
-else
-    echo -e "${RED}❌ 服务健康检查失败${NC}"
-    echo "查看日志:"
-    docker-compose logs --tail=50
-    exit 1
-fi
-
-echo ""
-echo "🎯 步骤6:手动触发测试"
-echo "----------------------------------------"
-echo "正在触发决策流程..."
-curl -X POST http://localhost:8080/trigger
-
-echo ""
-echo ""
-echo "========================================================================"
-echo -e "${GREEN}✅ Docker环境启动成功!${NC}"
-echo "========================================================================"
-echo ""
-echo "📍 可用的命令:"
-echo ""
-echo "  # 查看实时日志"
-echo "  docker-compose logs -f"
-echo ""
-echo "  # 查看健康状态"
-echo "  curl http://localhost:8080/health | jq ."
-echo ""
-echo "  # 手动触发任务"
-echo "  curl -X POST http://localhost:8080/trigger"
-echo ""
-echo "  # 进入容器调试"
-echo "  docker exec -it auto_put_ad_mini bash"
-echo ""
-echo "  # 查看输出文件"
-echo "  ls -lh outputs/reports/"
-echo ""
-echo "  # 停止服务"
-echo "  docker-compose down"
-echo ""
-echo "  # 重新构建"
-echo "  docker-compose build --no-cache"
-echo ""
-echo "========================================================================"
-echo "📖 测试完成后,记得停止容器:"
-echo "   docker-compose down"
-echo "========================================================================"