|
1 | | -FROM python:3.12.2 |
| 1 | +# Dev / test image — installs all dependency groups (conserver + api + dev). |
| 2 | +# Used by docker-compose for local development and CI tests. |
| 3 | +FROM python:3.12-slim |
2 | 4 |
|
3 | | -# Build arguments for version information (injected by CI/CD) |
4 | 5 | ARG VCON_SERVER_VERSION=dev |
5 | 6 | ARG VCON_SERVER_GIT_COMMIT=unknown |
6 | 7 | ARG VCON_SERVER_BUILD_TIME=unknown |
7 | 8 |
|
8 | | -# Set version info as environment variables (available at runtime) |
9 | 9 | ENV VCON_SERVER_VERSION=${VCON_SERVER_VERSION} |
10 | 10 | ENV VCON_SERVER_GIT_COMMIT=${VCON_SERVER_GIT_COMMIT} |
11 | 11 | ENV VCON_SERVER_BUILD_TIME=${VCON_SERVER_BUILD_TIME} |
12 | 12 |
|
13 | 13 | RUN apt-get update && \ |
14 | | - apt-get install -y libavdevice-dev ffmpeg |
15 | | - |
16 | | -# Install SoX dependency |
17 | | -# https://pysox.readthedocs.io/en/latest/#installation |
18 | | -RUN apt-get install -y libsox-fmt-all sox |
19 | | - |
20 | | -# This is required in order to wait for Redis |
21 | | -RUN apt-get install -y redis-tools |
22 | | -RUN pip install --upgrade pip |
23 | | - |
24 | | -# Install watchdog |
25 | | -RUN pip install watchdog |
| 14 | + apt-get install -y --no-install-recommends \ |
| 15 | + libavdevice-dev \ |
| 16 | + ffmpeg \ |
| 17 | + libsox-fmt-all \ |
| 18 | + sox \ |
| 19 | + libpq5 \ |
| 20 | + redis-tools \ |
| 21 | + && rm -rf /var/lib/apt/lists/* |
| 22 | + |
| 23 | +COPY --from=ghcr.io/astral-sh/uv:0.10.9 /uv /usr/local/bin/uv |
| 24 | +ENV UV_SYSTEM_PYTHON=1 |
26 | 25 |
|
27 | 26 | WORKDIR /app |
28 | 27 |
|
29 | | -# Install Poetry |
30 | | -RUN pip install poetry==2.1.3 |
31 | | -RUN poetry config virtualenvs.create false |
| 28 | +COPY pyproject.toml uv.lock /app/ |
32 | 29 |
|
33 | | -# Copy dependency files first for better caching |
34 | | -COPY pyproject.toml poetry.lock* /app/ |
| 30 | +# Install all groups (conserver + api + dev) so the image works for both |
| 31 | +# running services and running pytest. |
| 32 | +# Venv at /opt/venv so docker-compose volume mounts don't wipe it. |
| 33 | +RUN uv venv --seed /opt/venv && \ |
| 34 | + UV_PROJECT_ENVIRONMENT=/opt/venv uv sync --frozen --group conserver --group api --group dev |
| 35 | +ENV PATH="/opt/venv/bin:$PATH" |
35 | 36 |
|
36 | | -# Regenerate lock file if needed and install dependencies |
37 | | -RUN poetry lock --no-update || poetry lock |
38 | | -RUN poetry install --only=main --no-interaction |
39 | | - |
40 | | -# Install OpenTelemetry instrumentation libraries for detected packages |
| 37 | +# Auto-install OTel instrumentation packages for the installed libraries. |
41 | 38 | RUN opentelemetry-bootstrap -a install |
42 | 39 |
|
43 | | -# Copy the rest of the application |
44 | 40 | COPY . /app |
45 | 41 |
|
46 | | -ENV PYTHONPATH "${PYTHONPATH}:/app/:/app/server/" |
| 42 | +ENV PYTHONPATH="/app:/app/common:/app/conserver:/app/api" |
47 | 43 |
|
48 | 44 | ENTRYPOINT ["/app/docker/wait_for_redis.sh"] |
49 | | - |
50 | | -CMD [ "opentelemetry-instrument", "python", "./server/main.py" ] |
| 45 | +CMD ["opentelemetry-instrument", "python", "/app/conserver/main.py"] |
0 commit comments