El MCP server creaba archivos con UID 1000 que el server Python (UID 1001) no podía modificar ni borrar. Ahora ambos containers usan UID 1001, eliminando conflictos de permisos en volúmenes compartidos. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
61 lines
2.0 KiB
Docker
61 lines
2.0 KiB
Docker
FROM python:3.12-slim AS base
|
|
|
|
WORKDIR /app
|
|
|
|
# Instalar dependencias de sistema + Node.js 20
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
build-essential \
|
|
curl \
|
|
ca-certificates \
|
|
gnupg \
|
|
git \
|
|
&& mkdir -p /etc/apt/keyrings \
|
|
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key \
|
|
| gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
|
|
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" \
|
|
> /etc/apt/sources.list.d/nodesource.list \
|
|
&& apt-get update \
|
|
&& apt-get install -y --no-install-recommends nodejs \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Instalar dependencias Python
|
|
COPY agenticSystem/requirements.txt .
|
|
RUN pip install --no-cache-dir -r requirements.txt
|
|
|
|
# Instalar dependencias del MCP server (Node)
|
|
COPY agenticSystem/mcp-server/package.json agenticSystem/mcp-server/package-lock.json* ./mcp-server/
|
|
RUN cd mcp-server && npm install --production
|
|
|
|
# Instalar dependencias de sistema de Playwright (como root)
|
|
RUN cd mcp-server && npx playwright install-deps chromium
|
|
|
|
# Instalar uv (incluye uvx) para mcp-server-fetch
|
|
RUN pip install --no-cache-dir uv
|
|
|
|
# Copiar codigo fuente del MCP server
|
|
COPY agenticSystem/mcp-server/ ./mcp-server/
|
|
|
|
# Copiar codigo fuente Python
|
|
COPY agenticSystem/src/ ./src/
|
|
|
|
# Copiar configuracion MCP y documentacion
|
|
COPY agenticSystem/mcp.json ./mcp.json
|
|
COPY agenticSystem/docs/ ./docs/
|
|
|
|
# Crear directorio para mount point de webs
|
|
RUN mkdir -p /opt/acai/webs
|
|
|
|
# Usuario no-root — UID 1001 para coincidir con el usuario 'acai' del container app
|
|
# Así los archivos creados por el MCP server son escribibles por ambos containers
|
|
RUN useradd -m -u 1001 appuser \
|
|
&& chown -R appuser:appuser /app \
|
|
&& chown -R appuser:appuser /opt/acai/webs
|
|
USER appuser
|
|
|
|
# Descargar Chromium como appuser (queda en ~/.cache/ms-playwright/)
|
|
RUN cd mcp-server && npx playwright install chromium
|
|
|
|
EXPOSE 8000
|
|
|
|
CMD ["uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "8000"]
|