diff --git a/Dockerfile.django-alpine b/Dockerfile.django-alpine index 9d3b401975..e895c4d1dc 100644 --- a/Dockerfile.django-alpine +++ b/Dockerfile.django-alpine @@ -31,7 +31,7 @@ COPY requirements.txt ./ # https://github.com/unbit/uwsgi/issues/1318#issuecomment-542238096 RUN CPUCOUNT=1 pip3 wheel --wheel-dir=/tmp/wheels -r ./requirements.txt -FROM base AS django +FROM base AS release WORKDIR /app ARG uid=1001 ARG gid=1337 @@ -136,5 +136,11 @@ ENV \ DD_UWSGI_NUM_OF_THREADS="2" ENTRYPOINT ["/entrypoint-uwsgi.sh"] -FROM django AS django-unittests +FROM release AS development +USER root +COPY requirements-dev.txt ./ +RUN pip3 install --no-cache-dir -r requirements-dev.txt +USER ${uid} + +FROM development AS django-unittests COPY unittests/ ./unittests/ diff --git a/Dockerfile.django-debian b/Dockerfile.django-debian index cbffc609f6..5a541b1d56 100644 --- a/Dockerfile.django-debian +++ b/Dockerfile.django-debian @@ -30,7 +30,7 @@ COPY requirements.txt ./ # https://github.com/unbit/uwsgi/issues/1318#issuecomment-542238096 RUN CPUCOUNT=1 pip3 wheel --wheel-dir=/tmp/wheels -r ./requirements.txt -FROM base AS django +FROM base AS release WORKDIR /app ARG uid=1001 ARG gid=1337 @@ -139,5 +139,11 @@ ENV \ DD_UWSGI_NUM_OF_THREADS="2" ENTRYPOINT ["/entrypoint-uwsgi.sh"] -FROM django AS django-unittests +FROM release AS development +USER root +COPY requirements-dev.txt ./ +RUN pip3 install --no-cache-dir -r requirements-dev.txt +USER ${uid} + +FROM development AS django-unittests COPY unittests/ ./unittests/ diff --git a/docker-compose.override.dev.yml b/docker-compose.override.dev.yml index 8dfa5a9e19..c57dc48f74 100644 --- a/docker-compose.override.dev.yml +++ b/docker-compose.override.dev.yml @@ -1,6 +1,10 @@ --- services: uwsgi: + build: + context: . + dockerfile: Dockerfile.django-debian + target: development entrypoint: ['/wait-for-it.sh', '${DD_DATABASE_HOST:-postgres}:${DD_DATABASE_PORT:-5432}', '-t', '30', '--', '/entrypoint-uwsgi-dev.sh'] volumes: - '.:/app:z' diff --git a/docker-compose.yml b/docker-compose.yml index 727492e474..61c450f441 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -34,7 +34,7 @@ services: build: context: ./ dockerfile: "Dockerfile.django-${DEFECT_DOJO_OS:-debian}" - target: django + target: release image: "defectdojo/defectdojo-django:${DJANGO_VERSION:-latest}" depends_on: initializer: diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 0000000000..abf5c6c8d7 --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,15 @@ +# Development-only dependencies for DefectDojo +# These are only needed during development and testing + +# Debug toolbar for development +django-debug-toolbar==6.0.0 +django-debug-toolbar-request-history==0.1.4 + +# Testing dependencies +vcrpy==7.0.0 +vcrpy-unittest==0.1.7 +django-test-migrations==1.4.0 +parameterized==0.9.0 + +# Development file watching (hot reload) +watchdog==6.0.0 diff --git a/requirements.txt b/requirements.txt index 350b8d03dc..5034b4689a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -51,16 +51,11 @@ packageurl-python==0.17.5 django-crum==0.7.9 JSON-log-formatter==1.1.1 django-split-settings==1.3.2 -django-debug-toolbar==5.2.0 -django-debug-toolbar-request-history==0.1.4 -vcrpy==7.0.0 -vcrpy-unittest==0.1.7 django-tagulous==2.1.1 PyJWT==2.10.1 cvss==3.6 django-fieldsignals==0.7.0 hyperlink==21.0.0 -django-test-migrations==1.4.0 djangosaml2==1.11.1 drf-spectacular==0.28.0 drf-spectacular-sidecar==2025.8.1 @@ -75,4 +70,3 @@ fontawesomefree==6.6.0 PyYAML==6.0.2 pyopenssl==25.1.0 parameterized==0.9.0 -watchdog==6.0.0 # only needed for development, but would require some docker refactoring if we want to exclude it for production images