Remove PostGIS password from image metadata
GeoIntel CI / docs-smoke (push) Has been cancelled
GeoIntel CI / contract-smoke (push) Has been cancelled

This commit is contained in:
Codex
2026-06-17 06:08:38 +02:00
parent 96e994894b
commit b2e23222fa
6 changed files with 47 additions and 3 deletions
+8
View File
@@ -7,6 +7,14 @@
# Changelog # Changelog
## Sprint 35 Docker runtime secret hygiene (2026-06-17)
- Removed embedded PostGIS database name/user/password defaults from `deploy/unraid/Dockerfile.all-in-one` image metadata.
- Kept database credentials as runtime configuration through `.env`, the Unraid template, Compose or `docker run -e`.
- Added regression coverage so `GEOINTEL_POSTGRES_PASSWORD` is not baked into the all-in-one Dockerfile again.
- Updated Unraid runtime documentation to clarify that credentials are runtime config, not image metadata.
- No API contracts, migrations, product features, provider fetching or AI behavior were introduced.
## Sprint 34 browser-facing golden QA demo hardening (2026-06-17) ## Sprint 34 browser-facing golden QA demo hardening (2026-06-17)
- Hardened `scripts/verify_demo_export_workflow.sh` so the browser-facing demo/export smoke compares persisted QA/QC metrics against `fixtures/golden/expected_qa_metrics.json`. - Hardened `scripts/verify_demo_export_workflow.sh` so the browser-facing demo/export smoke compares persisted QA/QC metrics against `fixtures/golden/expected_qa_metrics.json`.
@@ -83,6 +83,11 @@ def test_unraid_all_in_one_runtime_starts_embedded_postgis_backend_and_nginx() -
assert "python3-venv" in dockerfile assert "python3-venv" in dockerfile
assert "COPY --from=frontend-build /frontend/dist/ /usr/share/nginx/html/" in dockerfile assert "COPY --from=frontend-build /frontend/dist/ /usr/share/nginx/html/" in dockerfile
assert "rm -f /etc/nginx/sites-enabled/default" in dockerfile assert "rm -f /etc/nginx/sites-enabled/default" in dockerfile
assert "GEOINTEL_POSTGRES_PASSWORD=" not in dockerfile
assert "GEOINTEL_POSTGRES_DB=" not in dockerfile
assert "GEOINTEL_POSTGRES_USER=" not in dockerfile
assert 'GEOINTEL_POSTGRES_PASSWORD="${GEOINTEL_POSTGRES_PASSWORD:-geointel}"' not in start_script
assert 'POSTGRES_PASSWORD="${GEOINTEL_POSTGRES_PASSWORD:-${POSTGRES_PASSWORD:-geointel}}"' in start_script
assert 'CMD ["/usr/local/bin/geointel-all-in-one-start"]' in dockerfile assert 'CMD ["/usr/local/bin/geointel-all-in-one-start"]' in dockerfile
assert "/usr/local/bin/docker-entrypoint.sh postgres &" in start_script assert "/usr/local/bin/docker-entrypoint.sh postgres &" in start_script
assert "python -m alembic upgrade head" in start_script assert "python -m alembic upgrade head" in start_script
-3
View File
@@ -12,9 +12,6 @@ ENV GEOINTEL_ENV=production \
GEOINTEL_API_PREFIX=/api/v1 \ GEOINTEL_API_PREFIX=/api/v1 \
GEOINTEL_STORAGE_ROOT=/app/storage \ GEOINTEL_STORAGE_ROOT=/app/storage \
STORAGE_ROOT=/app/storage \ STORAGE_ROOT=/app/storage \
GEOINTEL_POSTGRES_DB=geointel \
GEOINTEL_POSTGRES_USER=geointel \
GEOINTEL_POSTGRES_PASSWORD=geointel \
GEOINTEL_ALL_IN_ONE=1 \ GEOINTEL_ALL_IN_ONE=1 \
PATH="/opt/geointel/venv/bin:${PATH}" PATH="/opt/geointel/venv/bin:${PATH}"
+4
View File
@@ -78,6 +78,10 @@ bash deploy/unraid/run-dockerman-container.sh
The repository deploy scripts run the same flow automatically. They validate the Compose reference, build the image with plain `docker build`, install the DockerMan template/icon, remove any old Compose-owned `geointel` container, preserve/migrate the PostGIS data path and start the final container with DockerMan labels. The repository deploy scripts run the same flow automatically. They validate the Compose reference, build the image with plain `docker build`, install the DockerMan template/icon, remove any old Compose-owned `geointel` container, preserve/migrate the PostGIS data path and start the final container with DockerMan labels.
Database credentials are runtime configuration, not image metadata. The
all-in-one image does not bake `GEOINTEL_POSTGRES_PASSWORD` into the Dockerfile;
set it through `.env`, the Unraid template or `docker run -e`.
Validate: Validate:
```bash ```bash
+29
View File
@@ -1594,3 +1594,32 @@ Limitations:
Next recommended pass: Next recommended pass:
- Run the full release-readiness gate and then rebuild/deploy to Tower for browser-facing verification. - Run the full release-readiness gate and then rebuild/deploy to Tower for browser-facing verification.
## Sprint 35 Docker runtime secret hygiene (2026-06-17)
Changed:
- Removed embedded PostGIS database name/user/password defaults from `deploy/unraid/Dockerfile.all-in-one` image metadata.
- Kept database credentials as runtime configuration supplied by `.env`, the Unraid template, Compose or `docker run -e`.
- Added regression coverage so `GEOINTEL_POSTGRES_PASSWORD` is not baked into the all-in-one Dockerfile again.
- Updated Unraid runtime documentation and changelog.
Tested:
- `cd backend && python -m pytest tests/test_sprint31_unraid_template.py tests/test_docker_runtime_config.py -q`
- `bash -n deploy/unraid/all-in-one-start.sh`
- `bash -n deploy/unraid/run-dockerman-container.sh`
- `python -m compileall backend/app`
- `cd backend && python -m pytest -W error::DeprecationWarning`
- `cd frontend && npm run typecheck`
- `cd frontend && npm run build`
- `bash scripts/run_readiness_check.sh`
- `cd backend && python -m alembic heads && python -m alembic upgrade head --sql`
Open:
- Local Windows shell has no `docker` command in PATH, so Docker build/config verification must run on Tower during deploy.
- Rebuild the Tower image and confirm the Docker BuildKit `SecretsUsedInArgOrEnv` warning is gone.
Limitations:
- The start script still has safe local defaults for standalone/dev startup. Shared deployments should set `GEOINTEL_POSTGRES_PASSWORD` via runtime configuration.
Next recommended pass:
- Run release readiness, rebuild/deploy Tower and verify browser/GIS/demo smoke again.
+1
View File
@@ -12,6 +12,7 @@ This file now starts with the current implementation status. Older preparation/b
- [x] Run Docker/PostGIS live validation on Tower/Unraid. - [x] Run Docker/PostGIS live validation on Tower/Unraid.
- [x] Add Unraid Compose template assets with editable ports, storage path and app icon. - [x] Add Unraid Compose template assets with editable ports, storage path and app icon.
- [x] Add single-container Unraid runtime with embedded PostGIS, backend and frontend. - [x] Add single-container Unraid runtime with embedded PostGIS, backend and frontend.
- [x] Remove embedded PostGIS password defaults from all-in-one Docker image metadata.
## Current implementation status ## Current implementation status