-
Notifications
You must be signed in to change notification settings - Fork 23
Add Docker support for containerized deployments #49
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 1 commit
Commits
Show all changes
7 commits
Select commit
Hold shift + click to select a range
9e0afea
Add Docker support for containerized deployments
tpayet e02a948
Add Docker Hub automated publishing
tpayet 4bae321
Update Docker tests to use modern 'docker compose' command
tpayet 31b0c26
Add Docker availability check to skip tests when Docker is not present
tpayet 640624d
Fix Docker tests by building image locally instead of pulling
tpayet 52862fa
Fix CI by excluding Docker integration tests
tpayet 7f41370
Remove docker-compose entirely from the repository
tpayet File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,69 @@ | ||
| # Python cache | ||
| __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 | ||
|
|
||
| # Virtual environments | ||
| .venv/ | ||
| venv/ | ||
| ENV/ | ||
| env/ | ||
|
|
||
| # Testing | ||
| .pytest_cache/ | ||
| .coverage | ||
| htmlcov/ | ||
| .tox/ | ||
| .hypothesis/ | ||
|
|
||
| # IDE | ||
| .vscode/ | ||
| .idea/ | ||
| *.swp | ||
| *.swo | ||
| *~ | ||
|
|
||
| # Git | ||
| .git/ | ||
| .gitignore | ||
|
|
||
| # Documentation | ||
| docs/ | ||
| *.md | ||
| !README.md | ||
|
|
||
| # CI/CD | ||
| .github/ | ||
|
|
||
| # Development files | ||
| .env | ||
| .env.* | ||
| CLAUDE.md | ||
|
|
||
| # Logs | ||
| logs/ | ||
| *.log | ||
|
|
||
| # macOS | ||
| .DS_Store | ||
|
|
||
| # Test data | ||
| tests/ | ||
| data.ms/ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,28 @@ | ||
| # Use Python 3.12 slim image for smaller size | ||
| FROM python:3.12-slim | ||
|
|
||
| # Set working directory | ||
| WORKDIR /app | ||
|
|
||
| # Install system dependencies | ||
| RUN apt-get update && apt-get install -y --no-install-recommends \ | ||
| curl \ | ||
| && rm -rf /var/lib/apt/lists/* | ||
|
|
||
| # Install uv for faster Python package management | ||
| RUN curl -LsSf https://astral.sh/uv/install.sh | sh | ||
| ENV PATH="/root/.local/bin:${PATH}" | ||
|
|
||
| # Copy project files | ||
| COPY pyproject.toml README.md ./ | ||
| COPY src/ ./src/ | ||
|
|
||
| # Install the package | ||
| RUN uv pip install --system . | ||
|
|
||
| # Set default environment variables | ||
| ENV MEILI_HTTP_ADDR=http://meilisearch:7700 | ||
| ENV MEILI_MASTER_KEY="" | ||
|
|
||
| # Run the MCP server | ||
| CMD ["python", "-m", "src.meilisearch_mcp"] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,31 @@ | ||
| services: | ||
| meilisearch: | ||
| image: getmeili/meilisearch:v1.6 | ||
| ports: | ||
| - "7700:7700" | ||
| environment: | ||
| - MEILI_MASTER_KEY=masterKey | ||
| - MEILI_ENV=development | ||
| volumes: | ||
| - meilisearch_data:/meili_data | ||
| networks: | ||
| - meilisearch-network | ||
|
|
||
| meilisearch-mcp: | ||
| build: . | ||
| environment: | ||
| - MEILI_HTTP_ADDR=http://meilisearch:7700 | ||
| - MEILI_MASTER_KEY=masterKey | ||
| depends_on: | ||
| - meilisearch | ||
| networks: | ||
| - meilisearch-network | ||
| stdin_open: true | ||
| tty: true | ||
|
|
||
| volumes: | ||
| meilisearch_data: | ||
|
|
||
| networks: | ||
| meilisearch-network: | ||
| driver: bridge |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,122 @@ | ||
| """ | ||
| Integration tests for Docker setup. | ||
|
|
||
| These tests verify that the Docker container works correctly and can | ||
| communicate with Meilisearch. | ||
| """ | ||
| import os | ||
| import subprocess | ||
| import time | ||
| import pytest | ||
| import requests | ||
|
|
||
|
|
||
| def wait_for_service(url, timeout=30): | ||
| """Wait for a service to become available.""" | ||
| start_time = time.time() | ||
| while time.time() - start_time < timeout: | ||
| try: | ||
| response = requests.get(f"{url}/health") | ||
| if response.status_code == 200: | ||
| return True | ||
| except requests.exceptions.ConnectionError: | ||
| pass | ||
| time.sleep(1) | ||
| return False | ||
|
|
||
|
|
||
| @pytest.fixture(scope="module") | ||
| def docker_services(): | ||
| """Start Docker services for testing.""" | ||
| # Start services | ||
| subprocess.run(["docker-compose", "up", "-d"], check=True) | ||
|
|
||
| # Wait for Meilisearch to be ready | ||
| if not wait_for_service("http://localhost:7700"): | ||
| subprocess.run(["docker-compose", "down"], check=True) | ||
| pytest.fail("Meilisearch failed to start") | ||
|
|
||
| yield | ||
|
|
||
| # Cleanup | ||
| subprocess.run(["docker-compose", "down", "-v"], check=True) | ||
|
|
||
|
|
||
| def test_docker_build(): | ||
| """Test that the Docker image can be built successfully.""" | ||
| result = subprocess.run( | ||
| ["docker", "build", "-t", "meilisearch-mcp-test", "."], | ||
| capture_output=True, | ||
| text=True | ||
| ) | ||
| assert result.returncode == 0, f"Docker build failed: {result.stderr}" | ||
|
|
||
|
|
||
| def test_meilisearch_connectivity(docker_services): | ||
| """Test that the MCP container can connect to Meilisearch.""" | ||
| # Run a simple connectivity test in the container | ||
| result = subprocess.run( | ||
| [ | ||
| "docker-compose", "run", "--rm", "meilisearch-mcp", | ||
| "python", "-c", | ||
| """ | ||
| import os | ||
| from meilisearch import Client | ||
| client = Client(os.getenv('MEILI_HTTP_ADDR'), os.getenv('MEILI_MASTER_KEY')) | ||
| health = client.health() | ||
| assert health['status'] == 'available' | ||
| print('SUCCESS: Connected to Meilisearch') | ||
| """ | ||
| ], | ||
| capture_output=True, | ||
| text=True | ||
| ) | ||
|
|
||
| assert result.returncode == 0, f"Connectivity test failed: {result.stderr}" | ||
| assert "SUCCESS: Connected to Meilisearch" in result.stdout | ||
coderabbitai[bot] marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
|
|
||
| def test_mcp_server_import(docker_services): | ||
| """Test that the MCP server module can be imported in the container.""" | ||
| result = subprocess.run( | ||
| [ | ||
| "docker-compose", "run", "--rm", "meilisearch-mcp", | ||
| "python", "-c", | ||
| """ | ||
| import src.meilisearch_mcp | ||
| from src.meilisearch_mcp.server import MeilisearchMCPServer | ||
| print('SUCCESS: MCP server imported') | ||
| """ | ||
| ], | ||
| capture_output=True, | ||
| text=True | ||
| ) | ||
|
|
||
| assert result.returncode == 0, f"Import test failed: {result.stderr}" | ||
| assert "SUCCESS: MCP server imported" in result.stdout | ||
coderabbitai[bot] marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
|
|
||
| def test_environment_variables(docker_services): | ||
| """Test that environment variables are correctly set in the container.""" | ||
| result = subprocess.run( | ||
| [ | ||
| "docker-compose", "run", "--rm", "meilisearch-mcp", | ||
| "python", "-c", | ||
| """ | ||
| import os | ||
| assert os.getenv('MEILI_HTTP_ADDR') == 'http://meilisearch:7700' | ||
| assert os.getenv('MEILI_MASTER_KEY') == 'masterKey' | ||
| print('SUCCESS: Environment variables are correct') | ||
| """ | ||
| ], | ||
| capture_output=True, | ||
| text=True | ||
| ) | ||
|
|
||
| assert result.returncode == 0, f"Environment test failed: {result.stderr}" | ||
| assert "SUCCESS: Environment variables are correct" in result.stdout | ||
coderabbitai[bot] marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
|
||
|
|
||
| if __name__ == "__main__": | ||
| # Run tests | ||
| pytest.main([__file__, "-v"]) | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.