mirror of
https://github.com/volcengine/OpenViking.git
synced 2026-10-01 01:38:07 +08:00
84 lines
2.4 KiB
Docker
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"]
|