Files
OpenViking/bot/deploy/Dockerfile
T

84 lines
2.4 KiB
Docker

FROM python:3.13-slim-bookworm
# Install base tools, Node.js 20, and uv
RUN apt-get update && \
apt-get install -y --no-install-recommends curl ca-certificates gnupg git ripgrep bubblewrap socat libfuse2 build-essential && \
# Add NodeSource repository for Node.js 20 (new setup script, old node_20.x URL is deprecated)
curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
apt-get install -y --no-install-recommends nodejs && \
# Install uv
curl -LsSf https://astral.sh/uv/install.sh | sh && \
# Clean up
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Make uv available in PATH
ENV PATH="/root/.local/bin:$PATH"
# Allow pip to install system-wide
ENV PIP_BREAK_SYSTEM_PACKAGES=1
WORKDIR /app
# ============================================
# Layer 1: Install dependencies (cached)
# ============================================
# Copy Python package file
COPY pyproject.toml ./
# Create empty vikingbot directory (required for install, will be overwritten later)
RUN mkdir -p vikingbot
# Copy bridge package files
COPY bridge/package*.json ./bridge/
# Install Python dependencies - use pip install for openviking (no local build)
ENV UV_HTTP_TIMEOUT=300
RUN uv pip install --system --no-cache "openviking>=0.3.9" && \
uv pip install --system --no-cache .
# Install global npm packages for sandbox
RUN npm install -g @anthropic-ai/sandbox-runtime
# ============================================
# Layer 2: Copy source code and build
# ============================================
# Copy actual source code (overwrites empty directory)
COPY vikingbot/ vikingbot/
# Copy remaining project files
COPY README.md ./
COPY license/LICENSE ./LICENSE
COPY bridge/ bridge/
# Reinstall project package with actual source code
RUN uv pip install --system --no-cache .
# Build WhatsApp bridge
WORKDIR /app/bridge
RUN npm install && npm run build
WORKDIR /app
# Create necessary directories
RUN mkdir -p /root/.vikingbot /root/.vikingbot/workspace /root/.vikingbot/sandboxes /root/.vikingbot/bridge
# Pre-build bridge to correct location
RUN cp -r /app/bridge/* /root/.vikingbot/bridge/ && \
cd /root/.vikingbot/bridge && \
npm install --omit=dev
# Console port (health check and web UI)
EXPOSE 18791
# Environment variables
ENV PYTHONUNBUFFERED=1
ENV NODE_ENV=production
ENV OPENVIKING_CONFIG_FILE=/root/.vikingbot/ov.conf
# Set working directory
WORKDIR /app
ENTRYPOINT ["vikingbot"]
CMD ["status"]