Skip to content

Commit 60c885e

Browse files
authored
Merge pull request #5 from trustyai-explainability/nemo-server
added a Containerfile for the nemo server
2 parents 3e7ae64 + 8fb24c5 commit 60c885e

File tree

4 files changed

+71
-2
lines changed

4 files changed

+71
-2
lines changed

.dockerignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ firebase.json
1919
build
2020
dist
2121
# Ignoring this for now
22-
/scripts
22+
# /scripts
2323
# Ignoring log files generated by tests
2424
*.log
2525
# Ignore some of the files that should be downloaded/generated for evaluation

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ docs/user_guides/llm/vertexai/config
5858
docs/**/config
5959

6060
# Ignoring this for now
61-
/scripts
61+
# /scripts
6262

6363
# Ignoring log files generated by tests
6464
firebase.json

Dockerfile.server

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
FROM python:3.11-slim
2+
3+
# System dependencies
4+
RUN apt-get update && apt-get install -y gcc g++ git curl \
5+
&& rm -rf /var/lib/apt/lists/*
6+
7+
WORKDIR /app
8+
9+
# Install Poetry
10+
RUN pip install --no-cache-dir poetry
11+
12+
# Copy project files
13+
COPY pyproject.toml poetry.lock* README.md ./
14+
COPY examples/ ./examples/
15+
COPY chat-ui/ ./chat-ui/
16+
COPY nemoguardrails/ ./nemoguardrails/
17+
COPY scripts/ ./scripts/
18+
RUN chmod +x ./scripts/entrypoint.sh
19+
20+
# Create non-root user and set permissions
21+
RUN useradd --create-home guardrails && \
22+
mkdir -p /app/config && \
23+
mkdir -p /app/.cache/pypoetry && \
24+
chown -R guardrails:guardrails /app
25+
26+
USER guardrails
27+
28+
# Set Poetry cache and virtualenvs path
29+
ENV POETRY_CACHE_DIR=/app/.cache/pypoetry
30+
ENV POETRY_VIRTUALENVS_PATH=/app/.cache/pypoetry/virtualenvs
31+
32+
# Install all dependencies (main + extras) as non-root user
33+
RUN poetry install --no-interaction --no-ansi --all-extras
34+
RUN poetry run python -m spacy download en_core_web_lg
35+
36+
EXPOSE 8000
37+
38+
ENTRYPOINT ["./scripts/entrypoint.sh"]

scripts/entrypoint.sh

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#!/bin/bash
2+
3+
# Allow runtime overrides via env vars or args
4+
CONFIG_ID="${CONFIG_ID:-$1}"
5+
PORT="${PORT:-$2}"
6+
7+
# Set defaults if not provided
8+
CONFIG_ID="${CONFIG_ID:-nemo}"
9+
PORT="${PORT:-8000}"
10+
11+
CONFIG_DIR="/app/config/${CONFIG_ID}"
12+
13+
echo "🚀 Starting NeMo Guardrails with config from: $CONFIG_DIR (port: $PORT)"
14+
15+
# Validate config exists
16+
if [[ ! -f "$CONFIG_DIR/config.yaml" ]]; then
17+
echo "❌ ERROR: config.yaml not found in $CONFIG_DIR"
18+
exit 1
19+
fi
20+
21+
# Do NOT attempt to create rails.co if missing (ConfigMap is read-only)
22+
if [[ ! -f "$CONFIG_DIR/rails.co" ]]; then
23+
echo "❌ ERROR: rails.co not found in $CONFIG_DIR (ConfigMap is read-only, please provide it)"
24+
exit 1
25+
fi
26+
27+
echo "✅ Configuration validated. Starting server..."
28+
exec poetry run nemoguardrails server \
29+
--config "/app/config" \
30+
--port "$PORT" \
31+
--default-config-id "$CONFIG_ID"

0 commit comments

Comments
 (0)