Skip to content

Commit c7709c6

Browse files
elasticdotventurescoderabbitai[bot]claude
authored
fix: Add vLLM Dockerfile with DeepSeek-OCR dependencies (#1)
* wip, checkpoint * Update .github/workflows/docker-build.yml Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Update README.Docker.md Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * feat: Add Docker support and GitHub Actions CI/CD - Add Dockerfile for containerized MCP server - Add GitHub Actions workflow for multi-arch builds (amd64, arm64) - Add .dockerignore for optimized builds - Add README.Docker.md with comprehensive usage guide - Configure GHCR image registry - Auto-build on push to main and version tags 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com> * feat: langchain * fix: Add Dockerfile.vllm with missing DeepSeek-OCR dependencies - Create custom Dockerfile based on vllm/vllm-openai:v0.8.5.post1 - Add missing Python packages: addict, easydict, matplotlib - Update docker-compose.yml to build from custom Dockerfile - Addresses ImportError for addict and easydict packages Note: Still investigating LlamaFlashAttention2 compatibility issue 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: Pivot to LLaVA model for vLLM compatibility DeepSeek-OCR blocked on vLLM MLA architecture support. Using llava-hf/llava-1.5-7b-hf as interim solution. Changes: - Switch from DeepSeek-OCR to LLaVA 1.5 7B model - Use vLLM V0 engine for better compatibility - Remove custom Dockerfile (use official vllm image) - Document DeepSeek-OCR blockers in FIX-TODO-DeepSeekOCR.md See FIX-TODO-DeepSeekOCR.md for details on complexity and blockers. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: sync addon version metadata --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com>
1 parent a6ca750 commit c7709c6

19 files changed

Lines changed: 2554 additions & 9 deletions

.dockerignore

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Git files
2+
.git
3+
.gitignore
4+
.github
5+
6+
# Python cache
7+
__pycache__
8+
*.pyc
9+
*.pyo
10+
*.pyd
11+
.Python
12+
*.so
13+
*.egg
14+
*.egg-info
15+
dist
16+
build
17+
.eggs
18+
19+
# IDE
20+
.vscode
21+
.idea
22+
*.swp
23+
*.swo
24+
*~
25+
26+
# OS
27+
.DS_Store
28+
Thumbs.db
29+
30+
# Documentation
31+
README.md
32+
*.md
33+
assets/
34+
35+
# Development
36+
.env
37+
.env.local
38+
venv/
39+
env/
40+
ENV/
41+
42+
# UV cache
43+
.uv/

.github/workflows/docker-build.yml

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
name: Build and Push Docker Image
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
- master
8+
tags:
9+
- 'v*'
10+
pull_request:
11+
branches:
12+
- main
13+
- master
14+
workflow_dispatch:
15+
16+
env:
17+
REGISTRY: ghcr.io
18+
IMAGE_NAME: ${{ github.repository }}
19+
20+
jobs:
21+
build-and-push:
22+
runs-on: ubuntu-latest
23+
permissions:
24+
contents: read
25+
packages: write
26+
27+
steps:
28+
- name: Checkout repository
29+
uses: actions/checkout@v4
30+
31+
- name: Set up Docker Buildx
32+
uses: docker/setup-buildx-action@v3
33+
34+
- name: Log in to Container Registry
35+
if: github.event_name != 'pull_request'
36+
uses: docker/login-action@v3
37+
with:
38+
registry: ${{ env.REGISTRY }}
39+
username: ${{ github.actor }}
40+
password: ${{ secrets.GITHUB_TOKEN }}
41+
42+
- name: Extract metadata (tags, labels)
43+
id: meta
44+
uses: docker/metadata-action@v5
45+
with:
46+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
47+
tags: |
48+
type=ref,event=branch
49+
type=ref,event=pr
50+
type=semver,pattern={{version}}
51+
type=semver,pattern={{major}}.{{minor}}
52+
type=semver,pattern={{major}}
53+
type=sha,prefix={{branch}}-
54+
type=raw,value=latest,enable={{is_default_branch}}
55+
56+
- name: Build and push Docker image
57+
id: build
58+
uses: docker/build-push-action@v5
59+
with:
60+
context: .
61+
push: ${{ github.event_name != 'pull_request' }}
62+
tags: ${{ steps.meta.outputs.tags }}
63+
labels: ${{ steps.meta.outputs.labels }}
64+
cache-from: type=gha
65+
cache-to: type=gha,mode=max
66+
platforms: linux/amd64,linux/arm64
67+
68+
- name: Generate artifact attestation
69+
if: github.event_name != 'pull_request'
70+
uses: actions/attest-build-provenance@v1
71+
with:
72+
subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
73+
subject-digest: ${{ steps.build.outputs.digest }}
74+
push-to-registry: true

.pre-commit-config.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
repos:
2+
- repo: local
3+
hooks:
4+
- id: sync-blender-version
5+
name: sync-blender-version
6+
entry: python3 scripts/sync_blender_version.py --write
7+
language: system
8+
pass_filenames: false
9+
files: ^(pyproject\.toml|src/blender_mcp/__init__\.py|addon\.py)$

Dockerfile

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Dockerfile for blender-mcp MCP server
2+
FROM python:3.11-slim
3+
4+
# Install UV package manager
5+
RUN pip install uv
6+
7+
# Set working directory
8+
WORKDIR /app
9+
10+
# Copy project files
11+
COPY pyproject.toml uv.lock ./
12+
COPY src/ ./src/
13+
COPY main.py ./
14+
15+
# Install dependencies
16+
RUN uv pip install --system -e .
17+
18+
# Set environment variables
19+
ENV BLENDER_HOST=host.docker.internal
20+
ENV BLENDER_PORT=9876
21+
22+
# Expose MCP server port (stdio-based, no port needed)
23+
# The server communicates via stdin/stdout
24+
25+
# Run the MCP server via the console script to avoid double-import warnings
26+
CMD ["blender-mcp"]

Dockerfile.vllm

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
FROM vllm/vllm-openai:v0.8.5.post1
2+
3+
# Install missing dependencies required by DeepSeek-OCR model
4+
RUN pip install --no-cache-dir addict easydict matplotlib

0 commit comments

Comments
 (0)