-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
119 lines (83 loc) · 3.94 KB
/
Dockerfile
File metadata and controls
119 lines (83 loc) · 3.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# Select the image to build based on SERVER_TYPE, defaulting to agents_backend_server, or docker-compose build args
ARG SERVER_TYPE=agents_backend_server
# === Python environment from uv ===
FROM ghcr.io/astral-sh/uv:python3.11-bookworm-slim AS builder
# Used for build Python packages
RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources \
&& apt-get update \
&& apt-get install -y --no-install-recommends gcc python3-dev \
&& rm -rf /var/lib/apt/lists/*
COPY . /agents_backend
WORKDIR /agents_backend
# Configure uv environment
ENV UV_COMPILE_BYTECODE=1 \
UV_NO_CACHE=1 \
UV_LINK_MODE=copy \
UV_PROJECT_ENVIRONMENT=/usr/local
# Install dependencies with cache
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --no-default-groups --group server
# === Runtime base server image ===
FROM python:3.11-slim AS base_server
# Install runtime dependencies including those for browser/media support
RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
supervisor \
curl \
gnupg \
ffmpeg \
xvfb \
libmagic1 \
file \
fonts-noto \
fonts-noto-cjk \
fonts-noto-color-emoji \
fonts-freefont-ttf \
libpq-dev \
&& rm -rf /var/lib/apt/lists/*
# Install Playwright and its dependencies
# We use uv run to execute the install within the environment context if needed,
# or just install directly. Using uv tool install is also an option but 'uv run playwright' expects playwright in dev deps or similar.
# Since we are in base_server which doesn't have the source code yet, we need to install playwright CLI first or rely on the builder.
# However, to keep image size optimized, let's install browser deps here.
# Note: 'uv sync' in builder stage installed 'server' group. If playwright is in 'server' group it's available.
# But 'playwright install' needs to download browsers to /ms-playwright usually.
# Let's assume we want to install system deps for playwright:
RUN bash -c "if command -v playwright >/dev/null 2>&1; then playwright install --with-deps chromium; else echo 'Playwright not found, skipping browser install (can be installed later)'; fi"
COPY --from=builder /agents_backend /agents_backend
COPY --from=builder /usr/local /usr/local
COPY deploy/backend/supervisord.conf /etc/supervisor/supervisord.conf
WORKDIR /agents_backend/backend
# === FastAPI server image ===
FROM base_server AS agents_backend_server
COPY deploy/backend/agents_backend_server.conf /etc/supervisor/conf.d/
RUN mkdir -p /var/log/agents_backend
EXPOSE 8001
CMD ["supervisord", "-c", "/etc/supervisor/supervisord.conf"]
# === Celery Worker image ===
FROM base_server AS agents_backend_celery_worker
COPY deploy/backend/agents_backend_celery_worker.conf /etc/supervisor/conf.d/
RUN mkdir -p /var/log/agents_backend
CMD ["supervisord", "-c", "/etc/supervisor/supervisord.conf"]
# === Celery Beat image ===
FROM base_server AS agents_backend_celery_beat
COPY deploy/backend/agents_backend_celery_beat.conf /etc/supervisor/conf.d/
RUN mkdir -p /var/log/agents_backend
CMD ["supervisord", "-c", "/etc/supervisor/supervisord.conf"]
# === Celery Flower image ===
FROM base_server AS agents_backend_celery_flower
COPY deploy/backend/agents_backend_celery_flower.conf /etc/supervisor/conf.d/
RUN mkdir -p /var/log/agents_backend
EXPOSE 8555
CMD ["supervisord", "-c", "/etc/supervisor/supervisord.conf"]
# === Tool Server image ===
# Runs the Tool Server for web search, image generation, etc.
# This is separate from the MCP server (which runs inside E2B sandbox)
FROM base_server AS agents_backend_tool_server
RUN mkdir -p /var/log/agents_backend_tool_server
EXPOSE 1237
# Run Tool Server directly with uvicorn (no supervisord needed)
CMD ["python", "-m", "uvicorn", "backend.src.tool_server.integrations.app.main:app", "--host", "0.0.0.0", "--port", "1237"]
# Build image
FROM ${SERVER_TYPE}