Develop - #35
Conversation
…oid collisions with ports used by other systems.
There was a problem hiding this comment.
🟡 Changes recommended
Multiple confirmed runtime-breaking misconfigurations and documentation inconsistencies (notably OTEL service hostnames, env var typo, invalid port ranges, and mismatched UI ports) need to be fixed before approval.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
This PR reorganizes and expands the local Docker-based development environment by standardizing host-port allocations, adding a new Python API stack, and introducing optional observability (OTEL LGTM) and dashboard (Homepage) stacks alongside documentation and helper-script updates.
Changes:
- Reassigned default host ports across .NET/Java/Utility stacks and updated UI reverse-proxy routing/docs to match.
- Added a new Python FastAPI Docker Compose stack (SQL Server + PostgreSQL variants) with secrets templates and a build/test/run batch script.
- Added OTEL LGTM (Collector/Tempo/Mimir/Loki/Grafana) and Homepage stacks with builder scripts and configs; updated “StartAll” script and top-level README accordingly.
File summaries
| File | Description |
|---|---|
| Utility_dotnet/README.md | Updates Utility API port ranges and example env vars. |
| Utility_dotnet/dockerfile_postgres | Renames deploy-date env var (typo present). |
| Utility_dotnet/dockerfile_mssql | Renames deploy-date env var to APP_DEPLOY_DATE. |
| Utility_dotnet/Docker-Utility-dotnet-builder.bat | Updates ports and adds dotnet test; MSSQL port probing is commented out. |
| Utility_dotnet/docker-compose.utility-dotnet.yml | Updates default published ports for Utility API services. |
| Ui_angular/README.md | Updates API routing table and UI default host port; contains an invalid port range. |
| Ui_angular/nginx.conf | Updates /api// reverse proxy routes and adds Python API routes. |
| Ui_angular/Docker-Ui-angular-builder.bat | Updates default UI host port. |
| Ui_angular/docker-compose.ui-angular.yml | Updates default published UI port mapping. |
| secrets/README.md | Documents additional expected local secret files. |
| secrets/appsettings-api-python-sqlserver.env.example | Adds Python SQL Server settings template. |
| secrets/appsettings-api-python-postgresql.env.example | Adds Python PostgreSQL settings template. |
| README.md | Updates stack list, ports table, and adds Python/Homepage references; includes a wrong script name and inconsistent UI port. |
| Otel/tempo.yaml | Adds Tempo configuration (service name mismatch present). |
| Otel/README.md | Adds OTEL stack usage documentation. |
| Otel/otel-collector.yaml | Adds collector pipelines/exporters (service name mismatches present). |
| Otel/mimir.yaml | Adds Mimir single-process local config. |
| Otel/loki.yaml | Adds Loki local config. |
| Otel/grafana-datasources.yaml | Adds Grafana datasource provisioning (service name mismatches present). |
| Otel/Docker-Otel-builder.bat | Adds OTEL stack bring-up script with Grafana readiness/provisioning steps. |
| Otel/docker-compose.otel.yml | Adds LGTM Compose stack on pilot-net. |
| Homepage/settings.yaml | Adds Homepage settings. |
| Homepage/services.yaml | Adds Homepage service catalog (port/container name mismatches present). |
| Homepage/README.md | Adds Homepage README (docker run example is incomplete/incorrect). |
| Homepage/docker.yaml | Adds Homepage docker server config. |
| Homepage/Docker-Homepage-builder.bat | Adds builder script to pull and start Homepage stack. |
| Homepage/docker-compose.homepage.yml | Adds Homepage Compose file (placeholder mount path present). |
| Dozzle/README.md | Updates Dozzle default host port in docs. |
| Dozzle/Docker-Dozzle-builder.bat | Updates Dozzle default host port. |
| docs/AI Generation Prompts.txt | Adds internal prompt notes used to generate the Python stack assets. |
| Docker-StartAll.bat | Adds starts for OTEL, Python API, and Homepage containers. |
| Api_python/README.md | Adds Python stack README (invalid port ranges present). |
| Api_python/dockerfile_postgres | Adds Python PostgreSQL runtime Dockerfile. |
| Api_python/dockerfile_mssql | Adds Python SQL Server runtime Dockerfile with ODBC Driver 18 install. |
| Api_python/docker-compose.api-python.yml | Adds Python API Compose stack with per-variant build contexts. |
| Api_python/Docker-Api-python-builder.bat | Adds Python build/test/wheel + Compose bring-up script with port probing and secrets validation. |
| Api_java/README.md | Updates Java stack port range documentation. |
| Api_java/docker-compose.api-java.yml | Updates Java stack default published ports. |
| Api_java/Docker-Api-java-builder.bat | Updates ports and enables tests during Maven build. |
| Api_dotnet/README.md | Updates .NET API stack port range documentation. |
| Api_dotnet/dockerfile_postgres | Renames deploy-date env var to APP_DEPLOY_DATE. |
| Api_dotnet/dockerfile_mssql | Renames deploy-date env var to APP_DEPLOY_DATE. |
| Api_dotnet/Docker-Api-dotnet-builder.bat | Updates ports and adds dotnet test prior to publish. |
Review details
Suppressed comments (4)
Otel/otel-collector.yaml:35
- The collector exports metrics to
http://mimir:9009/..., but the compose service name islocal-mimir. This will fail DNS resolution inside the Compose network.
# Send metrics to Mimir via Prometheus remote write
prometheusremotewrite/mimir:
endpoint: http://mimir:9009/api/v1/push
tls:
insecure: true
Otel/otel-collector.yaml:40
- The collector exports logs to
http://loki:3100/otlp, but the compose service name islocal-loki. This will fail DNS resolution inside the Compose network.
# Send logs to Loki via its native OTLP HTTP endpoint
otlphttp/loki:
endpoint: http://loki:3100/otlp
Otel/grafana-datasources.yaml:30
- Grafana data source URL points to
mimir, but the compose service islocal-mimir, so the data source won’t connect.
- name: Mimir
uid: mimir
type: prometheus
access: proxy
url: http://mimir:9009/prometheus
isDefault: true
Otel/grafana-datasources.yaml:42
- Grafana data source URL points to
loki, but the compose service islocal-loki, so the data source won’t connect.
# Loki for logs
- name: Loki
uid: loki
type: loki
access: proxy
url: http://loki:3100
isDefault: false
- Files reviewed: 43/43 changed files
- Comments generated: 14
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| # Map it to an environment variable so it persists in the image | ||
| ENV DEPLOY_DATE=$DEPLOY_DATE | ||
| ENV APP_DEPLOY_DATEE=$DEPLOY_DATE | ||
| ENV APP_PORT=$APP_PORT |
| REM Resolve host ports so Windows reserved/in-use ports do not break compose startup. | ||
| call :resolve_open_port %DOTNET_MSSQL_PORT% DOTNET_MSSQL_PORT | ||
| if errorlevel 1 exit /b 1 | ||
| REM call :resolve_open_port %DOTNET_MSSQL_PORT% DOTNET_MSSQL_PORT | ||
| REM if errorlevel 1 exit /b 1 | ||
| call :resolve_open_port %DOTNET_POSTGRES_PORT% DOTNET_POSTGRES_PORT | ||
| if errorlevel 1 exit /b 1 |
| with the timestamp of the build. | ||
|
|
||
| Before compose startup, the script probes host ports in the range `55401-55499`. If the preferred | ||
| Before compose startup, the script probes host ports in the range `55901-55499`. If the preferred |
| - SQL Server variant: `55501-54599` | ||
| - PostgreSQL variant: `55601-54699` |
| # Send traces to Tempo via OTLP | ||
| otlp/tempo: | ||
| endpoint: tempo:4317 | ||
| tls: | ||
| insecure: true |
| volumes: | ||
| - /path/to/config:/app/config # Make sure your local config directory exists | ||
| - /var/run/docker.sock:/var/run/docker.sock:ro # optional, for docker integrations |
| - `SqlServer\Docker-SQLServer-builder.bat` | ||
| - `Ui_angular\Docker-Ui-angular-builder.bat` | ||
| - `UptimeKuma\Docker-UptimeKuma-builder.bat` | ||
| - `Utility_dotnet\Docker-Utility-dornet-builder.bat` |
|
|
||
| ### Utility API (DotNet) | ||
|
|
||
| A .NET Core API that contain utility tooling (MS SQL Server or PostgreSQL) |
| | | Angular UI | pilot-ui | 4200 | 55401 | | ||
| | | ApiDotNet (SQL Server) | pilot-api-dotnet-mssql | 8080 | 55101 | |
| docker run -d \ | ||
| --name local-homepage \ | ||
| -m 512m \ | ||
| -p 56201:56201 \ | ||
| --restart=always |
No description provided.