# Percepta MCP Server Dockerfile
FROM python:3.12.3-slim
# 设置环境变量
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1 \
UV_CACHE_DIR=/tmp/uv-cache
# 安装系统依赖并升级安全补丁
RUN apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends \
curl \
git \
build-essential \
wget \
gnupg \
ca-certificates \
fonts-liberation \
libasound2 \
libatk-bridge2.0-0 \
libatk1.0-0 \
libatspi2.0-0 \
libdrm2 \
libgtk-3-0 \
libnspr4 \
libnss3 \
libxcomposite1 \
libxdamage1 \
libxrandr2 \
xdg-utils \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# 安装 uv
RUN pip install --no-cache-dir uv==0.4.15
# 创建非 root 用户
RUN groupadd --gid 1000 percepta && \
useradd --uid 1000 --gid percepta --shell /bin/bash --create-home percepta
# 设置工作目录
WORKDIR /app
# 复制依赖文件
COPY pyproject.toml uv.lock* ./
# 安装依赖
RUN --mount=type=cache,target=/tmp/uv-cache \
uv sync --frozen --no-dev
# 安装 Playwright 浏览器
RUN uv run playwright install chromium
# 复制应用代码
COPY . .
# 安装包
RUN uv pip install -e .
# 修改文件权限
RUN chown -R percepta:percepta /app
# 切换到非 root 用户
USER percepta
# 创建运行时目录
RUN mkdir -p /app/data/logs /app/data/test_results /app/data/cache
# 暴露端口(MCP 服务器实际不需要端口,但保留以防将来扩展)
# EXPOSE 8000
# 健康检查(检查进程是否存在)
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
CMD pgrep -f "python.*percepta_mcp" || exit 1
# 启动命令
CMD ["uv", "run", "python", "-m", "src.percepta_mcp.server"]