From 7e6ae09516e260c686647db80d0e1d681f30105e Mon Sep 17 00:00:00 2001 From: nagendramishr <81572024+nagendramishr@users.noreply.github.com> Date: Thu, 9 Oct 2025 10:28:03 -0400 Subject: [PATCH 1/5] Update issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 33 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 20 ++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..df3ba797 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,33 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Server environment variables: '...' +2. Backend Details: '....' +3. Request Curl: '....' +4. Where do you see the error +5. Attach any logs to illustrate the issue: + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add logs and screenshots to help explain your problem. + +**Curl (please complete the following information):** + - Headers +- Body + + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..bbcbbe7d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. From 5d34a7d375bd406b88485d253f12da19a411273d Mon Sep 17 00:00:00 2001 From: nagendramishr <81572024+nagendramishr@users.noreply.github.com> Date: Thu, 30 Oct 2025 13:03:45 -0400 Subject: [PATCH 2/5] Delete test/openai/call-localhost.sh --- test/openai/call-localhost.sh | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100644 test/openai/call-localhost.sh diff --git a/test/openai/call-localhost.sh b/test/openai/call-localhost.sh deleted file mode 100644 index 53566cc1..00000000 --- a/test/openai/call-localhost.sh +++ /dev/null @@ -1,20 +0,0 @@ -export APIKEY=c7e6f087cf984d43bbded523538246e9 -export APIMKEY=e2376ce1252a44869e01dd2574da4a1b - -echo "[$(date +%s%3N)] STARTING " - -curl "http://localhost:8000/openai/deployments/d1/chat/completions?api-version=2025-01-01-preview" \ - -H "Content-Type: application/json; charset=UTF-8" \ - -H "Ocp-Apim-Subscription-Key: $APIMKEY" \ - -H "Ocp-Apim-Trace: true" \ - -H "api-key: $APIKEY" \ - -H "test: x" -H "xx: Value1" -H "X-UserProfile: 123456" \ - --no-buffer \ - -d @openai_call1.json -v | while IFS= read -r line; do - echo "[$(date +%s%3N)] $line" -done - - - - - From b615d425c44d394956530bf566fd35b2106f6878 Mon Sep 17 00:00:00 2001 From: nagendramishr <81572024+nagendramishr@users.noreply.github.com> Date: Thu, 30 Oct 2025 13:05:04 -0400 Subject: [PATCH 3/5] Delete test/openai/call-localhost.sh --- test/openai/call-localhost.sh | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100644 test/openai/call-localhost.sh diff --git a/test/openai/call-localhost.sh b/test/openai/call-localhost.sh deleted file mode 100644 index 53566cc1..00000000 --- a/test/openai/call-localhost.sh +++ /dev/null @@ -1,20 +0,0 @@ -export APIKEY=c7e6f087cf984d43bbded523538246e9 -export APIMKEY=e2376ce1252a44869e01dd2574da4a1b - -echo "[$(date +%s%3N)] STARTING " - -curl "http://localhost:8000/openai/deployments/d1/chat/completions?api-version=2025-01-01-preview" \ - -H "Content-Type: application/json; charset=UTF-8" \ - -H "Ocp-Apim-Subscription-Key: $APIMKEY" \ - -H "Ocp-Apim-Trace: true" \ - -H "api-key: $APIKEY" \ - -H "test: x" -H "xx: Value1" -H "X-UserProfile: 123456" \ - --no-buffer \ - -d @openai_call1.json -v | while IFS= read -r line; do - echo "[$(date +%s%3N)] $line" -done - - - - - From 9a5a9dd3e8bf585abb3f476f27dfa53ca06d5808 Mon Sep 17 00:00:00 2001 From: nagendramishr <81572024+nagendramishr@users.noreply.github.com> Date: Mon, 15 Dec 2025 10:45:41 -0500 Subject: [PATCH 4/5] Delete test/openai/call-nvmtr2apim.sh --- test/openai/call-nvmtr2apim.sh | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 test/openai/call-nvmtr2apim.sh diff --git a/test/openai/call-nvmtr2apim.sh b/test/openai/call-nvmtr2apim.sh deleted file mode 100644 index ac41776e..00000000 --- a/test/openai/call-nvmtr2apim.sh +++ /dev/null @@ -1,9 +0,0 @@ -export APIKEY=c7e6f087cf984d43bbded523538246e9 -export APIMKEY=e2376ce1252a44869e01dd2574da4a1b - -curl "https://nvmopenai3.openai.azure.com/openai/deployments/d1/chat/completions?api-version=2025-01-01-preview" \ - -H "Content-Type: application/json" \ - -H "Ocp-Apim-Subscription-Key: $APIMKEY" \ - -H "Ocp-Apim-Trace: true" \ - -H "api-key: $APIKEY" \ - -d @openai_call1.json -v From e66bc28451f918b8a1e74ede25613e498860cf2d Mon Sep 17 00:00:00 2001 From: Olivia Marvel Date: Wed, 29 Apr 2026 20:36:03 -0500 Subject: [PATCH 5/5] docs: add no-Docker deployment path via remote ACR build --- .azure/README.md | 9 ++++++++- README.md | 12 +++++++++++- deployment/proxy-with-sidecar/README.md | 9 ++++++++- docs/CONTAINER_DEPLOYMENT.md | 20 ++++++++++++++++++-- docs/SIDECAR_DEPLOYMENT.md | 12 ++++++++++++ 5 files changed, 57 insertions(+), 5 deletions(-) diff --git a/.azure/README.md b/.azure/README.md index 38a2645c..e91b14a5 100644 --- a/.azure/README.md +++ b/.azure/README.md @@ -6,7 +6,7 @@ This guide helps you deploy the SimpleL7Proxy service to Azure using the Azure D 1. [Azure Developer CLI (AZD)](https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd) 2. [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli) -3. [Docker](https://www.docker.com/products/docker-desktop/) +3. [Docker](https://www.docker.com/products/docker-desktop/)(optional; only needed for local container builds) ## Deployment Steps @@ -58,6 +58,13 @@ This command will deploy the Azure infrastructure defined in the Bicep templates ### 4. Build and Deploy the Application +Important +Current deployment scripts are Docker-based. + +deploy.sh and deploy.ps1 build and push images using local Docker. +deploy.sh expects images already built by Docker-based build scripts. +If Docker is unavailable, use remote ACR build commands from CONTAINER_DEPLOYMENT.md and then update/deploy using the resulting image tags. + #### For Windows: ```powershell diff --git a/README.md b/README.md index 5b15f21b..e1fe1386 100644 --- a/README.md +++ b/README.md @@ -36,12 +36,20 @@ ## Prerequisites - [.NET 10 SDK](https://dotnet.microsoft.com/download) -- [Docker](https://docs.docker.com/get-docker/) (container builds) +- [Docker](https://docs.docker.com/get-docker/) (optional; only needed for local container builds) - [Azure Developer CLI (azd)](https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd) (cloud deployment) +- [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli) (required for remote ACR builds) - Azure subscription with Container Apps; optionally AI Foundry / APIM ## Quick Start +Important +Current deployment scripts are Docker-based. + +deploy.sh and deploy.ps1 build and push images using local Docker. +deploy.sh expects images already built by Docker-based build scripts. +If Docker is unavailable, use remote ACR build commands from CONTAINER_DEPLOYMENT.md and then update/deploy using the resulting image tags. + **Local (2 commands):** ```bash git clone https://github.com/your-org/SimpleL7Proxy.git @@ -61,6 +69,8 @@ chmod +x .azure/setup.sh .azure/deploy.sh ./.azure/setup.sh && azd provision && ./.azure/deploy.sh ``` +> No local Docker available? Use the remote ACR build workflow in [docs/CONTAINER_DEPLOYMENT.md](docs/CONTAINER_DEPLOYMENT.md). + > See [Development & Testing](docs/DEVELOPMENT.md) for local mock backends. > See [Container Deployment](docs/CONTAINER_DEPLOYMENT.md) for VNET and high-performance variants. diff --git a/deployment/proxy-with-sidecar/README.md b/deployment/proxy-with-sidecar/README.md index de8c6214..107e2a5c 100644 --- a/deployment/proxy-with-sidecar/README.md +++ b/deployment/proxy-with-sidecar/README.md @@ -6,7 +6,7 @@ Deploy a multi-container Azure Container App with a health probe sidecar pattern - [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli) installed - Access to an Azure Container Registry (ACR) -- Docker installed (for building images) +- Docker installed (optional; only needed for building images locally) ## Quick Start @@ -41,6 +41,13 @@ export HOST1="host=https://your-api.azure-api.net;mode=apim;path=/;probe=/health ### 2. Build Images +Important +Current deployment scripts are Docker-based. + +deploy.sh and deploy.ps1 build and push images using local Docker. +deploy.sh expects images already built by Docker-based build scripts. +If Docker is unavailable, use remote ACR build commands from CONTAINER_DEPLOYMENT.md and then update/deploy using the resulting image tags. + ```bash cd ../../src/SimpleL7Proxy && ./build.sh cd ../HealthProbe && ./build.sh diff --git a/docs/CONTAINER_DEPLOYMENT.md b/docs/CONTAINER_DEPLOYMENT.md index 33419d82..2c25b138 100644 --- a/docs/CONTAINER_DEPLOYMENT.md +++ b/docs/CONTAINER_DEPLOYMENT.md @@ -7,7 +7,6 @@ Build a Docker image from the `src/` directory and run it locally or deploy it t > - **Probe paths are in the Host connection string** — use `Host1=host=https://api.example.com;probe=/health` (not separate `Probe_path1=` variables). > - **Fastest path to Azure:** run `.azure/setup.sh` → `azd provision` → `.azure/deploy.sh`. ---- ## Container Ports @@ -78,6 +77,22 @@ docker build -t simplel7proxy:latest -f SimpleL7Proxy/Dockerfile . --- +## Building without Docker (Remote ACR Build) + +If Docker is not available locally (corporate restrictions, CI/CD runners, etc.), build directly in Azure Container Registry: + +```bash +# From repo root +export ACR=myregistry # Your ACR name, without .azurecr.io +export VERSION=v2.2.11 # Or read from Constants.cs + +az acr build +--registry $ACR +--image simple-l7-proxy:$VERSION +--file src/SimpleL7Proxy/Dockerfile +src +``` + ## Running Locally with Docker ### Minimal run @@ -146,7 +161,8 @@ This is the recommended path for provisioning all required Azure resources (ACR, - [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli) - [Azure Developer CLI (azd)](https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd) -- Docker +- Docker (optional; only needed for local image builds) +- For no-Docker environments, use the remote ACR build workflow in [Building without Docker (Remote ACR Build)](#building-without-docker-remote-acr-build) ### Step 1 — Setup diff --git a/docs/SIDECAR_DEPLOYMENT.md b/docs/SIDECAR_DEPLOYMENT.md index 4c94f6f8..f7372a70 100644 --- a/docs/SIDECAR_DEPLOYMENT.md +++ b/docs/SIDECAR_DEPLOYMENT.md @@ -84,6 +84,8 @@ export HOST1="host=https://my-api.azure-api.net;mode=apim;path=/;probe=/status-0 ### Step 2 — Build both images +Option A: Local Docker build (fast local iteration) + Both build scripts read `ACR` from `deploy.parameters.sh` automatically. ```bash @@ -102,6 +104,16 @@ Each script: 3. Builds from `src/` (includes `Shared/`) 4. Pushes `$ACR.azurecr.io/myproxy:` and `$ACR.azurecr.io/healthprobe:` respectively +Option B: Remote ACR build (no Docker required) + +Use Option B in corporate/restricted environments or CI/CD runners where Docker is unavailable. + +```bash +# Run from repo root +az acr build --registry $ACR --image myproxy:latest --file src/SimpleL7Proxy/Dockerfile src +az acr build --registry $ACR --image healthprobe:latest --file src/HealthProbe/Dockerfile src +``` + ### Step 3 — Create the Container App and assign RBAC Run `setup.sh` **once** — it creates the Container App with a placeholder image, enables system-assigned managed identity, and grants `AcrPull` on the ACR. It waits 60 seconds for the role to propagate.