Merge feat/15: Create Docker deployment infrastructure

This commit is contained in:
2026-02-03 16:10:07 -05:00
4 changed files with 183 additions and 0 deletions

67
.dockerignore Normal file
View File

@@ -0,0 +1,67 @@
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
*.coverage
.pytest_cache/
.mypy_cache/
.ruff_cache/
# Virtual environments
venv/
env/
ENV/
.venv/
# IDE
.vscode/
.idea/
*.swp
*.swo
*~
# Git
.git/
.gitignore
.gitattributes
# Documentation
*.md
docs/
# CI/CD
.github/
.gitlab-ci.yml
# Environment files
.env
.env.*
!.env.example
# Claude Code
.claude/
# Docker
.dockerignore
docker-compose.override.yml
# Test files
tests/

19
.env.docker.example Normal file
View File

@@ -0,0 +1,19 @@
# Docker Compose Environment Variables
# Copy this file to .env and fill in your values
# Gitea Configuration (REQUIRED)
GITEA_URL=https://gitea.example.com
GITEA_TOKEN=your_gitea_api_token_here
GITEA_OWNER=your_username_or_org
GITEA_REPO=your_repo_name
# Authentication Configuration (OPTIONAL)
# Uncomment to enable Bearer token authentication
# AUTH_TOKEN=your_bearer_token_here
# Tool Filtering Configuration (OPTIONAL)
# Uncomment to enable specific tools only (whitelist mode)
# ENABLED_TOOLS=list_issues,create_issue,update_issue,list_labels
# Uncomment to disable specific tools (blacklist mode)
# DISABLED_TOOLS=delete_issue,close_milestone

54
Dockerfile Normal file
View File

@@ -0,0 +1,54 @@
# Gitea HTTP MCP Wrapper Dockerfile
# Multi-stage build for optimized image size
FROM python:3.11-slim as builder
# Set working directory
WORKDIR /build
# Install build dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends \
gcc \
&& rm -rf /var/lib/apt/lists/*
# Copy requirements first for better caching
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt
# Copy source code
COPY pyproject.toml .
COPY src/ src/
# Install package
RUN pip install --user --no-cache-dir -e .
# Production stage
FROM python:3.11-slim
# Set working directory
WORKDIR /app
# Copy installed packages from builder
COPY --from=builder /root/.local /root/.local
# Copy source code
COPY src/ src/
COPY pyproject.toml .
# Make sure scripts in .local are usable
ENV PATH=/root/.local/bin:$PATH
# Set Python environment variables
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
# Expose default port
EXPOSE 8000
# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/health').read()"
# Run the HTTP MCP server
CMD ["gitea-http-wrapper"]

43
docker-compose.yml Normal file
View File

@@ -0,0 +1,43 @@
version: '3.8'
services:
gitea-mcp-wrapper:
build:
context: .
dockerfile: Dockerfile
image: gitea-mcp-wrapper:latest
container_name: gitea-mcp-wrapper
restart: unless-stopped
ports:
- "8000:8000"
environment:
# Gitea Configuration
- GITEA_URL=${GITEA_URL}
- GITEA_TOKEN=${GITEA_TOKEN}
- GITEA_OWNER=${GITEA_OWNER}
- GITEA_REPO=${GITEA_REPO}
# HTTP Server Configuration
- HTTP_HOST=0.0.0.0
- HTTP_PORT=8000
# Authentication (Optional)
- AUTH_TOKEN=${AUTH_TOKEN:-}
# Tool Filtering (Optional)
- ENABLED_TOOLS=${ENABLED_TOOLS:-}
- DISABLED_TOOLS=${DISABLED_TOOLS:-}
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health').read()"]
interval: 30s
timeout: 3s
retries: 3
start_period: 5s
networks:
- gitea-mcp-network
networks:
gitea-mcp-network:
driver: bridge