refactor(environment): update virtualenv path to /opt/venv in Docker setup

- Adjusted `docker-compose.dev.yml` to reflect the new venv location.
- Modified entrypoint script and Dockerfile to reference `/opt/venv` for isolated dependencies.
- Improved bind mount setup to prevent venv overwrites during development.
This commit is contained in:
2026-01-04 00:58:24 +01:00
parent d0fc7f37ff
commit ca5f5e3383
3 changed files with 18 additions and 17 deletions

View File

@@ -7,7 +7,10 @@ ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONPATH=/app \
UV_COMPILE_BYTECODE=1 \
UV_LINK_MODE=copy \
UV_NO_CACHE=1
UV_NO_CACHE=1 \
UV_PROJECT_ENVIRONMENT=/opt/venv \
VIRTUAL_ENV=/opt/venv \
PATH="/opt/venv/bin:$PATH"
# Install system dependencies and uv
RUN apt-get update && \
@@ -20,7 +23,7 @@ RUN apt-get update && \
# Copy dependency files
COPY pyproject.toml uv.lock ./
# Install dependencies using uv (development mode with dev dependencies)
# Install dependencies using uv into /opt/venv (outside /app to survive bind mounts)
RUN uv sync --extra dev --frozen
# Copy application code
@@ -45,7 +48,10 @@ ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONPATH=/app \
UV_COMPILE_BYTECODE=1 \
UV_LINK_MODE=copy \
UV_NO_CACHE=1
UV_NO_CACHE=1 \
UV_PROJECT_ENVIRONMENT=/opt/venv \
VIRTUAL_ENV=/opt/venv \
PATH="/opt/venv/bin:$PATH"
# Install system dependencies and uv
RUN apt-get update && \
@@ -58,7 +64,7 @@ RUN apt-get update && \
# Copy dependency files
COPY pyproject.toml uv.lock ./
# Install only production dependencies using uv (no dev dependencies)
# Install only production dependencies using uv into /opt/venv
RUN uv sync --frozen --no-dev
# Copy application code
@@ -67,7 +73,7 @@ COPY entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/entrypoint.sh
# Set ownership to non-root user
RUN chown -R appuser:appuser /app
RUN chown -R appuser:appuser /app /opt/venv
# Switch to non-root user
USER appuser
@@ -77,4 +83,4 @@ HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
CMD curl -f http://localhost:8000/health || exit 1
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["uv", "run", "uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

View File

@@ -1,11 +1,11 @@
#!/bin/bash
set -e
# Ensure the project's virtualenv binaries are on PATH so commands like
# 'uvicorn' work even when not prefixed by 'uv run'. This matches how uv
# installs the env into /app/.venv in our containers.
if [ -d "/app/.venv/bin" ]; then
export PATH="/app/.venv/bin:$PATH"
# Ensure the virtualenv binaries are on PATH. Dependencies are installed
# to /opt/venv (not /app/.venv) to survive bind mounts in development.
if [ -d "/opt/venv/bin" ]; then
export PATH="/opt/venv/bin:$PATH"
export VIRTUAL_ENV="/opt/venv"
fi
# Only the backend service should run migrations and init_db

View File

@@ -40,8 +40,7 @@ services:
volumes:
- ./backend:/app
- ./uploads:/app/uploads
# Exclude local .venv from bind mount to use container's .venv
- /app/.venv
# Note: venv is at /opt/venv (not /app/.venv) so bind mount doesn't affect it
ports:
- "8000:8000"
env_file:
@@ -76,7 +75,6 @@ services:
target: development
volumes:
- ./backend:/app
- /app/.venv
env_file:
- .env
environment:
@@ -99,7 +97,6 @@ services:
target: development
volumes:
- ./backend:/app
- /app/.venv
env_file:
- .env
environment:
@@ -122,7 +119,6 @@ services:
target: development
volumes:
- ./backend:/app
- /app/.venv
env_file:
- .env
environment:
@@ -145,7 +141,6 @@ services:
target: development
volumes:
- ./backend:/app
- /app/.venv
env_file:
- .env
environment: