FROM nvidia/cuda:12.6.3-devel-ubuntu22.04 # Create non-root user RUN useradd -m -u 1000 user # Set environment variables ENV HOME=/home/user \ PATH=/home/user/.local/bin:$PATH \ API_AUTH_TOKEN=secret \ JWT_ALGORITHM=RS256 \ DASHBOARD_USERNAME=dashboard \ DASHBOARD_PASSWORD=secret \ SECRET_KEY_BASE=secret-key-base \ JWT_PUBLIC_KEY="-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2gzhmJ9TDanEzWdP1WG+\n0Ecwbe7f3bv6e5UUpvcT5q68IQJKP47AQdBAnSlFVi4X9SaurbWoXdS6jpmPpk24\nQvitzLNFphHdwjFBelTAOa6taZrSusoFvrtK9x5xsW4zzt/bkpUraNx82Z8MwLwr\nt6HlY7dgO9+xBAabj4t1d2t+0HS8O/ed3CB6T2lj6S8AbLDSEFc9ScO6Uc1XJlSo\nrgyJJSPCpNhSq3AubEZ1wMS1iEtgAzTPRDsQv50qWIbn634HLWxTP/UH6YNJBwzt\n3O6q29kTtjXlMGXCvin37PyX4Jy1IiPFwJm45aWJGKSfVGMDojTJbuUtM+8P9Rrn\nAwIDAQAB\n-----END PUBLIC KEY-----" # Install minimal dependencies RUN apt-get update && apt-get install -y \ wget \ curl \ unzip \ clang \ cuda-toolkit \ nginx \ build-essential \ cmake \ git \ libcurl4-openssl-dev \ && rm -rf /var/lib/apt/lists/* # Copy llama.cpp server files from official image COPY --from=ghcr.io/ggerganov/llama.cpp:server-cuda /app/llama-server $HOME/app/llama-server COPY --from=ghcr.io/ggerganov/llama.cpp:server-cuda /app/*.so* $HOME/app/ RUN chmod +x $HOME/app/llama-server # Install Node.js and pnpm RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \ apt-get update && \ apt-get install -y nodejs && \ npm install -g corepack && \ rm -rf /var/lib/apt/lists/* # Enable pnpm RUN corepack enable && corepack prepare pnpm@latest --activate # Create directories and set permissions RUN mkdir -p /tmp/llamacpp && \ mkdir -p $HOME/models && \ mkdir -p $HOME/app && \ mkdir -p $HOME/app/docauth && \ mkdir -p $HOME/app/aia && \ mkdir -p /var/cache/nginx && \ mkdir -p /var/log/nginx && \ mkdir -p /var/lib/nginx && \ mkdir -p /run/nginx && \ touch /var/run/nginx.pid && \ chown -R user:user $HOME && \ chown -R user:user /var/cache/nginx && \ chown -R user:user /var/log/nginx && \ chown -R user:user /var/lib/nginx && \ chown -R user:user /var/run/nginx.pid && \ chown -R user:user /run/nginx # Copy AI Assistant app COPY --from=pspdfkit/ai-assistant:nightly /base $HOME/app/aia COPY --chown=node:node service-config.yml /service-config.yml RUN chown -R user:user $HOME/app/aia # Copy nginx configuration and replace license key COPY nginx.conf /etc/nginx/nginx.conf RUN --mount=type=secret,id=DOCAUTH_LICENSE_KEY,mode=0444,required=true \ sed -i "s/\$DOCAUTH_LICENSE_KEY/$(cat /run/secrets/DOCAUTH_LICENSE_KEY)/g" /etc/nginx/nginx.conf # Copy web files COPY --chown=user:user index.html $HOME/app/docauth/ COPY --chown=user:user document-authoring.js $HOME/app/docauth/ COPY --chown=user:user Sample.docx $HOME/app/docauth/ # Copy start script COPY --chown=user:user start-services.sh $HOME/app/ RUN chmod +x $HOME/app/start-services.sh # Switch to non-root user USER user WORKDIR $HOME/app # Download models RUN wget -q https://huggingface.co/bartowski/gemma-2-2b-it-GGUF/resolve/main/gemma-2-2b-it-Q8_0.gguf -O $HOME/models/gemma-2b.gguf && \ wget -q https://huggingface.co/leliuga/all-MiniLM-L6-v2-GGUF/resolve/main/all-MiniLM-L6-v2.F16.gguf -O $HOME/models/embeddings.gguf # Expose (7860, for Hugging Face, 4000 for AI Assistant) EXPOSE 7860 CMD ["./start-services.sh"]