From 6d955311ac2de10f747506b6f0ad987543b0e37c Mon Sep 17 00:00:00 2001 From: ArnabChatterjee20k Date: Tue, 2 Jun 2026 15:57:51 +0530 Subject: [PATCH 1/3] feat: parameterize embedding service port and update configuration documentation --- Dockerfile | 3 ++- README.md | 11 +++++++++++ docker-compose.yml | 2 +- src/main.rs | 3 ++- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index ab81318..0c8f486 100644 --- a/Dockerfile +++ b/Dockerfile @@ -37,6 +37,7 @@ COPY --from=builder /usr/local/bin/warmup /usr/local/bin/warmup ARG EMBEDDING_MODELS=nomic,bge-small RUN EMBEDDING_MODELS="${EMBEDDING_MODELS}" EMBEDDING_POOL_SIZE=1 /usr/local/bin/warmup -EXPOSE 3000 +ARG EMBEDDING_PORT=3000 +EXPOSE ${EMBEDDING_PORT} ENTRYPOINT ["/usr/local/bin/embedding"] diff --git a/README.md b/README.md index efa5ae5..a78b556 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,17 @@ curl -X POST http://localhost:3000/embed \ -d '{"texts":["hello world","another piece of text"]}' ``` +## Configuration + +Configured via environment variables (set them in `.env`): + +| Variable | Default | Description | +| --- | --- | --- | +| `EMBEDDING_PORT` | `3000` | Port the service listens on. | +| `EMBEDDING_MODELS` | `nomic` | Comma-separated list of models to load. | +| `EMBEDDING_CACHE_DIR` | _(default cache)_ | Directory for downloaded model files. | +| `EMBEDDING_POOL_SIZE` | _(memory-derived)_ | Number of model instances per pool. | + ## API ### `POST /embed` diff --git a/docker-compose.yml b/docker-compose.yml index 84dfd48..3e3f08c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,7 +8,7 @@ services: image: embedding:latest container_name: embedding ports: - - "3000:3000" + - "${EMBEDDING_PORT:-3000}:${EMBEDDING_PORT:-3000}" env_file: - .env volumes: diff --git a/src/main.rs b/src/main.rs index 6aac642..6afd02a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -82,7 +82,8 @@ async fn main() -> Result<(), Box> { let app = Router::new().route("/embed", post(embed)).with_state(state); - let addr = std::env::var("BIND_ADDR").unwrap_or_else(|_| "0.0.0.0:3000".to_string()); + let port = std::env::var("EMBEDDING_PORT").unwrap_or_else(|_| "3000".to_string()); + let addr = format!("0.0.0.0:{}", port); let listener = tokio::net::TcpListener::bind(&addr).await?; tracing::info!("listening on {}", addr); axum::serve(listener, app) From 539bc6cfab4f4998b16a0b8f515601ab84862db4 Mon Sep 17 00:00:00 2001 From: ArnabChatterjee20k Date: Tue, 2 Jun 2026 16:03:14 +0530 Subject: [PATCH 2/3] feat: update embedding service to expose port as runtime variable and improve error handling for port parsing --- Dockerfile | 5 +++-- src/main.rs | 5 ++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0c8f486..2160251 100644 --- a/Dockerfile +++ b/Dockerfile @@ -37,7 +37,8 @@ COPY --from=builder /usr/local/bin/warmup /usr/local/bin/warmup ARG EMBEDDING_MODELS=nomic,bge-small RUN EMBEDDING_MODELS="${EMBEDDING_MODELS}" EMBEDDING_POOL_SIZE=1 /usr/local/bin/warmup -ARG EMBEDDING_PORT=3000 -EXPOSE ${EMBEDDING_PORT} +# EXPOSE is build-time metadata only; the actual port is controlled by the +# EMBEDDING_PORT env var at runtime (default 3000). +EXPOSE 3000 ENTRYPOINT ["/usr/local/bin/embedding"] diff --git a/src/main.rs b/src/main.rs index 6afd02a..1618c5b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -82,7 +82,10 @@ async fn main() -> Result<(), Box> { let app = Router::new().route("/embed", post(embed)).with_state(state); - let port = std::env::var("EMBEDDING_PORT").unwrap_or_else(|_| "3000".to_string()); + let port_str = std::env::var("EMBEDDING_PORT").unwrap_or_else(|_| "3000".to_string()); + let port: u16 = port_str + .parse() + .map_err(|_| format!("EMBEDDING_PORT '{}' is not a valid port number (1-65535)", port_str))?; let addr = format!("0.0.0.0:{}", port); let listener = tokio::net::TcpListener::bind(&addr).await?; tracing::info!("listening on {}", addr); From a969cc7684ce3a1192b3beb7e30ff8920eb77e9b Mon Sep 17 00:00:00 2001 From: ArnabChatterjee20k Date: Tue, 2 Jun 2026 16:04:50 +0530 Subject: [PATCH 3/3] linting --- src/main.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index 1618c5b..b983d9e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -83,9 +83,12 @@ async fn main() -> Result<(), Box> { let app = Router::new().route("/embed", post(embed)).with_state(state); let port_str = std::env::var("EMBEDDING_PORT").unwrap_or_else(|_| "3000".to_string()); - let port: u16 = port_str - .parse() - .map_err(|_| format!("EMBEDDING_PORT '{}' is not a valid port number (1-65535)", port_str))?; + let port: u16 = port_str.parse().map_err(|_| { + format!( + "EMBEDDING_PORT '{}' is not a valid port number (1-65535)", + port_str + ) + })?; let addr = format!("0.0.0.0:{}", port); let listener = tokio::net::TcpListener::bind(&addr).await?; tracing::info!("listening on {}", addr);