11a0e446创建于 1月12日历史提交
FROM ubuntu:22.04

# 避免安装过程中的交互式提示
ENV DEBIAN_FRONTEND=noninteractive

# 设置工作目录
WORKDIR /app

COPY . /app/

# 更换为中国镜像源
RUN sed -i 's/ports.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list

# 安装基本工具
RUN apt-get update && apt-get install -y \
    git \
    curl \
    wget \
    bash 

# 检测架构并安装适当版本的Miniconda
RUN ARCH=$(uname -m) && \
    if [ "$ARCH" = "x86_64" ]; then \
        wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/miniconda.sh; \
    elif [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then \
        wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh -O /tmp/miniconda.sh; \
    else \
        echo "不支持的架构: $ARCH"; exit 1; \
    fi && \
    bash /tmp/miniconda.sh -b -p /opt/conda && \
    rm /tmp/miniconda.sh

ENV PATH="/opt/conda/bin:$PATH"

# 配置conda
RUN conda init bash && \
    echo "conda activate mcp-agent" >> ~/.bashrc

# 安装nodejs和npm(使用系统包管理器代替nvm)
RUN apt-get install -y \
    nodejs \
    npm

# 确保使用最新版本的nodejs和npm
RUN npm install -g n && \
    n stable && \
    hash -r

# 配置npm使用淘宝镜像源
RUN npm config set registry https://registry.npmmirror.com

# 安装pnpm
RUN npm install -g pnpm

# 安装mcp-sdk
RUN npm install -g @modelcontextprotocol/sdk

# 安装ts-node
RUN npm install -g typescript ts-node

# 安装uv
RUN pip3 install uv -i https://pypi.tuna.tsinghua.edu.cn/simple

# 创建并配置mcp-agent conda环境
RUN conda create -n mcp-agent python=3.13 -y && \
    echo 'conda activate mcp-agent' >> ~/.bashrc

# 安装基础依赖
SHELL ["/bin/bash", "-c"]
RUN source /opt/conda/bin/activate mcp-agent && \
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-dotenv rich asyncio fastapi uvicorn docker httpx PyYAML motor gunicorn beanie psutil tenacity jinja2 json5 mcp openai jsonschema toml


# 创建mcp-executor环境
RUN conda create -n mcp-executor python=3.10 -y

# 创建必要的目录
RUN mkdir -p /app/code_storage && \
    mkdir -p /app/filesystem && \
    mkdir -p /app/shared_input

# 配置mcp_code_executor服务器
RUN source /opt/conda/bin/activate mcp-agent && \
    cd /app/mcp_servers/mcp_code_executor && \
    npm install && \
    npm run build

# 安装mcp-server-commands
RUN npm install -g mcp-server-commands

# 安装filesystem服务器
RUN npm install -g @modelcontextprotocol/server-filesystem

# 配置nlp-search-infra-server
RUN source /opt/conda/bin/activate mcp-agent && \
    cd /app/mcp_servers/nlp-search-infra-server && \
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

# RUN npm install @playwright/test

# RUN npx playwright install

# 将GAIA文件夹复制到filesystem服务器可访问的目录
RUN cp -r /app/data/GAIA /app/filesystem/ || echo "GAIA文件夹不存在,将在启动时检查"


# 设置环境变量
ENV PYTHONPATH=/app:$PYTHONPATH
ENV CODE_STORAGE_DIR=/app/code_storage
ENV CONDA_ENV_NAME=mcp-executor
ENV UV_PATH=/usr/local/bin/uv

# 创建日志目录
RUN mkdir -p /app/mcp_server_logs

# 创建启动脚本
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh

# 暴露端口
EXPOSE 8000

# 使用启动脚本作为ENTRYPOINT
ENTRYPOINT ["docker-entrypoint.sh"]