Fix server, web app to reuse prebuilt deps on dev container setup

This commit is contained in:
Debanjum
2025-08-01 18:31:25 -07:00
parent 0a0b97446c
commit 80cce7b439
2 changed files with 25 additions and 29 deletions

View File

@@ -2,16 +2,19 @@ ARG PYTHON_VERSION=3.12
FROM mcr.microsoft.com/devcontainers/python:${PYTHON_VERSION} FROM mcr.microsoft.com/devcontainers/python:${PYTHON_VERSION}
# Install UV and Bun # Install UV and Bun
RUN curl -fsSL https://bun.sh/install | bash RUN curl -fsSL https://bun.sh/install | bash && mv /root/.bun/bin/bun /usr/local/bin/bun
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
RUN uv python pin $PYTHON_VERSION RUN uv python pin $PYTHON_VERSION
# create python virtual environment # create python virtual environment
RUN uv venv /opt/venv --python $PYTHON_VERSION --seed RUN uv venv /opt/venv --python $PYTHON_VERSION --seed
# Add venv, deno to PATH for subsequent RUN commands and for the container environment # Add venv to PATH for subsequent RUN commands and for the container environment
ENV PATH="/opt/venv/bin:/root/.bun/bin:$PATH" ENV PATH="/opt/venv/bin:$PATH"
# Tell pip, uv to use this virtual environment
ENV VIRTUAL_ENV="/opt/venv"
ENV UV_PROJECT_ENVIRONMENT="/opt/venv"
# Setup working directory # Setup working directory
WORKDIR /workspace WORKDIR /workspaces/khoj
# --- Python Server App Dependencies --- # --- Python Server App Dependencies ---
# Copy files required for Python dependency installation. # Copy files required for Python dependency installation.
@@ -19,22 +22,28 @@ COPY pyproject.toml README.md ./
# Setup python environment # Setup python environment
# Use the pre-built torch cpu wheel # Use the pre-built torch cpu wheel
ENV PIP_EXTRA_INDEX_URL="https://download.pytorch.org/whl/cpu" \ ENV UV_INDEX="https://download.pytorch.org/whl/cpu" \
UV_INDEX_STRATEGY="unsafe-best-match" \
# Avoid downloading unused cuda specific python packages # Avoid downloading unused cuda specific python packages
CUDA_VISIBLE_DEVICES="" \ CUDA_VISIBLE_DEVICES="" \
# Use static version to build app without git dependency # Use static version to build app without git dependency
VERSION=0.0.0 VERSION=0.0.0 \
# Use embedded db
USE_EMBEDDED_DB="True" \
PGSERVER_DATA_DIR="/opt/khoj_db"
# Install Python dependencies from pyproject.toml in editable mode # Install Python dependencies from pyproject.toml in editable mode
RUN sed -i "s/dynamic = \\[\"version\"\\]/version = \"$VERSION\"/" pyproject.toml && \ RUN sed -i "s/dynamic = \\[\"version\"\\]/version = \"$VERSION\"/" pyproject.toml && \
uv sync --all-extras && \ uv sync --all-extras && \
# Save the lock file generated with correct Linux platform wheels
cp uv.lock /opt/uv.lock.linux && \
chown -R vscode:vscode /opt/venv chown -R vscode:vscode /opt/venv
# --- Web App Dependencies --- # --- Web App Dependencies ---
# Copy web app manifest files # Copy web app manifest files
COPY src/interface/web/package.json src/interface/web/bun.lock /tmp/web/ COPY src/interface/web/package.json src/interface/web/bun.lock /opt/khoj_web/
# Install web app dependencies # Install web app dependencies
RUN cd /tmp/web && bun install RUN cd /opt/khoj_web && bun install && chown -R vscode:vscode .
# The .venv and node_modules are now populated in the image. # The .venv and node_modules are now populated in the image.
# The rest of the source code will be mounted by VS Code from your local checkout, # The rest of the source code will be mounted by VS Code from your local checkout,

View File

@@ -24,30 +24,17 @@ if [ "$DEVCONTAINER" = true ]; then
# Use devcontainer launch.json # Use devcontainer launch.json
mkdir -p .vscode && cp .devcontainer/launch.json .vscode/launch.json mkdir -p .vscode && cp .devcontainer/launch.json .vscode/launch.json
# Activate the pre-installed venv (no need to create new one) # Install Server App using pre-installed dependencies
echo "Using Python environment at /opt/venv" echo "Setup Server App with UV. Use pre-installed dependencies in $UV_PROJECT_ENVIRONMENT."
# PATH should already include /opt/venv/bin from Dockerfile sed -i "s/dynamic = \\[\"version\"\\]/version = \"$VERSION\"/" pyproject.toml
cp /opt/uv.lock.linux uv.lock
# Install khoj in editable mode (dependencies already installed)
# Use uv if available, else fall back to pipx
if command -v uv &> /dev/null
then
uv sync --all-extras uv sync --all-extras
else
python3 -m pip install -e '.[dev]'
fi
# Install Web App using cached dependencies # Install Web App using cached dependencies
echo "Installing Web App using cached dependencies..." echo "Setup Web App with Bun. Use pre-installed dependencies in /opt/khoj_web."
cd "$PROJECT_ROOT/src/interface/web" cd "$PROJECT_ROOT/src/interface/web"
if command -v bun &> /dev/null ln -sf /opt/khoj_web/node_modules node_modules
then
echo "using Bun."
bun install && bun run ciexport bun install && bun run ciexport
else
echo "using Yarn."
yarn install && yarn ciexport
fi
else else
# Standard setup # Standard setup
echo "Installing Server App..." echo "Installing Server App..."