Skip to content

Latest commit

 

History

History
182 lines (128 loc) · 5.49 KB

File metadata and controls

182 lines (128 loc) · 5.49 KB

Docker Setup

This directory contains an experimental dockerized Gradio web interface for wdoc, designed for easy deployment and use.

Prerequisites

This setup assumes you have already cloned the wdoc repository:

git clone https://github.com/thiswillbeyourgithub/wdoc.git
cd wdoc/docker

Note: No pre-built Docker images are provided. You'll either build the image locally from the cloned repository or install it from PyPI, depending on the value of COMPILE_OR_INSTALL (see below).

Quick Start

All commands below should be run from the docker subdirectory of the wdoc repository.

  1. Configure environment variables: Copy and edit the environment file (both files are in the ./docker directory):

    cp custom_env.example custom_env
    # Manually edit custom_env to add your API keys (ANTHROPIC_API_KEY, etc.)
  2. Start the service:

    sudo docker compose up
  3. Access the web interface: Open your browser to http://localhost:7618

Architecture

  • Build modes: The Docker image can be built in two ways controlled by the COMPILE_OR_INSTALL build argument:

    • compile (default): Installs wdoc from the local repository source in editable mode. Use this for development or when you need the latest changes.
    • install: Installs wdoc from PyPI. Use this for a stable, released version.

    To change the build mode, set the environment variable before building:

    COMPILE_OR_INSTALL=install sudo docker compose up -d --build
  • Container user: Runs as non-root user wdoc (UID:GID 1000:1000) for security

  • Port: Exposes Gradio on port 7618 (mapped from internal port 7860)

  • Volumes (relative to the ./docker directory):

    • ./vectorstore: Persistent storage for document embeddings
    • ./wdoc_cache: LLM cache to reduce API costs and improve performance

Troubleshooting

Permission Errors

If you encounter permission errors on first startup, particularly related to the cache directory, this is typically because Docker created the volume directories with root ownership.

Solution: From the docker directory, change ownership to match the container's user (UID:GID 1000:1000):

# Make sure you're in the docker directory
cd wdoc/docker

# Fix permissions
sudo chown -R 1000:1000 ./vectorstore ./wdoc_cache

# Or if the directories don't exist yet:
mkdir -p ./vectorstore ./wdoc_cache
sudo chown -R 1000:1000 ./vectorstore ./wdoc_cache

Alternative: If you're running with a different user ID, you can modify the docker compose.yml to use your current user:

user: "${UID}:${GID}"

Then run with:

sudo docker compose up

Checking Logs

To view the application logs:

sudo docker compose logs -f wdoc-gui

Rebuilding After Changes

If you've modified gui.py or Dockerfile:

sudo docker compose down
sudo docker compose build --no-cache
sudo docker compose up

Configuration

Environment Variables

Create a custom_env file in the docker directory with your configuration:

# Required: API keys for your LLM provider
ANTHROPIC_API_KEY=sk-ant-...
# Or for other providers:
# OPENAI_API_KEY=...
# GEMINI_API_KEY=...

# Optional: Default models
WDOC_DEFAULT_MODEL=openai/gpt-4o-mini
WDOC_DEFAULT_EMBED_MODEL=openai/text-embedding-3-small

# Optional: Langfuse integration (if using)
LANGFUSE_PUBLIC_KEY=pk-...
LANGFUSE_SECRET_KEY=sk-...
LANGFUSE_HOST=https://cloud.langfuse.com

Volume Paths

You can customize volume paths using environment variables in docker compose.yml:

VECTORSTORE_PATH=/your/custom/path/vectorstore sudo docker compose up -d
CACHE_PATH=/your/custom/path/cache sudo docker compose up -d

Security Notes

  • The container runs as a non-root user for improved security
  • Security option no-new-privileges prevents privilege escalation
  • No unnecessary capabilities are granted
  • Network access is controlled (uses host.docker.internal for local services like Langfuse)

For Developers

Building Locally

From the docker directory:

# Build from local source (default)
sudo docker build -t wdoc-gui -f Dockerfile ..

# Or build from PyPI
sudo docker build -t wdoc-gui -f Dockerfile --build-arg COMPILE_OR_INSTALL=install ..

# Run the container
sudo docker run -p 7618:7860 \
  -v $(pwd)/vectorstore:/app/vectorstore \
  -v $(pwd)/wdoc_cache:/home/wdoc/.cache/wdoc \
  --env-file custom_env \
  wdoc-gui

Modifying the GUI

The Gradio interface is defined in docker/gui.py. After making changes, rebuild the container to see them take effect.

Understanding COMPILE_OR_INSTALL

  • compile mode: The Dockerfile copies your local wdoc source code and installs it in editable mode (pip install -e). This means:

    • Code changes in the repository affect the Docker image after rebuild
    • Useful for development and testing
    • Includes unreleased features/fixes
  • install mode: The Dockerfile installs wdoc from PyPI. This means:

    • You get the latest stable release
    • Independent of your local source code
    • Faster builds (no need to copy source files)

Additional Resources


This Docker setup was created with assistance from aider.chat