diff --git a/docker/.env.example b/.env.example similarity index 100% rename from docker/.env.example rename to .env.example diff --git a/docker/Dockerfile b/docker/Dockerfile index ea158b111..29636881c 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,5 +1,7 @@ +# Base image FROM python:3.11-slim +# Install dependencies RUN apt-get update && apt-get install -y \ gcc \ g++ \ @@ -9,17 +11,25 @@ RUN apt-get update && apt-get install -y \ curl \ && rm -rf /var/lib/apt/lists/* +# Set working directory WORKDIR /app +# Set Hugging Face mirror ENV HF_ENDPOINT=https://hf-mirror.com -COPY requirements.txt . +# Install Python packages +COPY docker/requirements.txt . RUN pip install --upgrade pip && pip install --no-cache-dir -r requirements.txt -RUN pip install chonkie +# Copy application code +COPY docker/ ./docker/ +COPY src/ ./src/ -COPY ../. . +# Set Python import path ENV PYTHONPATH=/app/src +# Expose port EXPOSE 8000 + +# Start the docker CMD ["uvicorn", "memos.api.product_api:app", "--host", "0.0.0.0", "--port", "8000", "--reload"] diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 64d383a25..d8998b6f7 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -2,10 +2,10 @@ name: memos-dev services: memos: - container_name: memos-api-server + container_name: memos-api-docker build: context: .. - dockerfile: Dockerfile + dockerfile: docker/Dockerfile ports: - "8000:8000" env_file: @@ -15,14 +15,16 @@ services: - qdrant environment: - PYTHONPATH=/app/src + - HF_ENDPOINT=https://hf-mirror.com volumes: - - .:/app + - ../src:/app/src + - .:/app/docker networks: - memos_network neo4j: image: neo4j:5.26.4 - container_name: neo4j-server + container_name: neo4j-docker ports: - "7474:7474" # HTTP - "7687:7687" # Bolt @@ -43,7 +45,7 @@ services: qdrant: image: qdrant/qdrant:v1.15.0 - container_name: qdrant-server + container_name: qdrant-docker ports: - "6333:6333" # REST API - "6334:6334" # gRPC API diff --git a/docker/requirements.txt b/docker/requirements.txt index 596e94b47..211ec3cae 100644 --- a/docker/requirements.txt +++ b/docker/requirements.txt @@ -2,24 +2,33 @@ annotated-types==0.7.0 ; python_version >= "3.10" and python_version < "4.0" anyio==4.9.0 ; python_version >= "3.10" and python_version < "4.0" attrs==25.3.0 ; python_version >= "3.10" and python_version < "4.0" authlib==1.6.0 ; python_version >= "3.10" and python_version < "4.0" +beautifulsoup4==4.13.4 ; python_version >= "3.10" and python_version < "4.0" certifi==2025.7.14 ; python_version >= "3.10" and python_version < "4.0" cffi==1.17.1 ; python_version >= "3.10" and python_version < "4.0" and platform_python_implementation != "PyPy" +cfgv==3.4.0 ; python_version >= "3.10" and python_version < "4.0" charset-normalizer==3.4.2 ; python_version >= "3.10" and python_version < "4.0" +chonkie==1.1.1 ; python_version >= "3.10" and python_version < "4.0" click==8.2.1 ; python_version >= "3.10" and python_version < "4.0" +cobble==0.1.4 ; python_version >= "3.10" and python_version < "4.0" colorama==0.4.6 ; python_version >= "3.10" and python_version < "4.0" and (platform_system == "Windows" or sys_platform == "win32") +coloredlogs==15.0.1 ; python_version >= "3.10" and python_version < "4.0" cryptography==45.0.5 ; python_version >= "3.10" and python_version < "4.0" cyclopts==3.22.2 ; python_version >= "3.10" and python_version < "4.0" +defusedxml==0.7.1 ; python_version >= "3.10" and python_version < "4.0" +distlib==0.4.0 ; python_version >= "3.10" and python_version < "4.0" distro==1.9.0 ; python_version >= "3.10" and python_version < "4.0" dnspython==2.7.0 ; python_version >= "3.10" and python_version < "4.0" docstring-parser==0.16 ; python_version >= "3.10" and python_version < "4.0" docutils==0.21.2 ; python_version >= "3.10" and python_version < "4.0" email-validator==2.2.0 ; python_version >= "3.10" and python_version < "4.0" +et-xmlfile==2.0.0 ; python_version >= "3.10" and python_version < "4.0" exceptiongroup==1.3.0 ; python_version >= "3.10" and python_version < "4.0" fastapi-cli==0.0.8 ; python_version >= "3.10" and python_version < "4.0" fastapi-cloud-cli==0.1.4 ; python_version >= "3.10" and python_version < "4.0" fastapi==0.115.14 ; python_version >= "3.10" and python_version < "4.0" fastmcp==2.10.5 ; python_version >= "3.10" and python_version < "4.0" filelock==3.18.0 ; python_version >= "3.10" and python_version < "4.0" +flatbuffers==25.2.10 ; python_version >= "3.10" and python_version < "4.0" fsspec==2025.7.0 ; python_version >= "3.10" and python_version < "4.0" greenlet==3.2.3 ; python_version >= "3.10" and python_version < "3.14" and (platform_machine == "aarch64" or platform_machine == "ppc64le" or platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "AMD64" or platform_machine == "win32" or platform_machine == "WIN32") h11==0.16.0 ; python_version >= "3.10" and python_version < "4.0" @@ -29,24 +38,44 @@ httptools==0.6.4 ; python_version >= "3.10" and python_version < "4.0" httpx-sse==0.4.1 ; python_version >= "3.10" and python_version < "4.0" httpx==0.28.1 ; python_version >= "3.10" and python_version < "4.0" huggingface-hub==0.33.4 ; python_version >= "3.10" and python_version < "4.0" +humanfriendly==10.0 ; python_version >= "3.10" and python_version < "4.0" +identify==2.6.12 ; python_version >= "3.10" and python_version < "4.0" idna==3.10 ; python_version >= "3.10" and python_version < "4.0" +iniconfig==2.1.0 ; python_version >= "3.10" and python_version < "4.0" itsdangerous==2.2.0 ; python_version >= "3.10" and python_version < "4.0" jinja2==3.1.6 ; python_version >= "3.10" and python_version < "4.0" jiter==0.10.0 ; python_version >= "3.10" and python_version < "4.0" joblib==1.5.1 ; python_version >= "3.10" and python_version < "4.0" jsonschema-specifications==2025.4.1 ; python_version >= "3.10" and python_version < "4.0" jsonschema==4.24.1 ; python_version >= "3.10" and python_version < "4.0" +lxml==6.0.0 ; python_version >= "3.10" and python_version < "4.0" +magika==0.6.2 ; python_version >= "3.10" and python_version < "4.0" +mammoth==1.9.1 ; python_version >= "3.10" and python_version < "4.0" markdown-it-py==3.0.0 ; python_version >= "3.10" and python_version < "4.0" +markdownify==1.1.0 ; python_version >= "3.10" and python_version < "4.0" +markitdown==0.1.2 ; python_version >= "3.10" and python_version < "4.0" markupsafe==3.0.2 ; python_version >= "3.10" and python_version < "4.0" mcp==1.12.0 ; python_version >= "3.10" and python_version < "4.0" mdurl==0.1.2 ; python_version >= "3.10" and python_version < "4.0" +mpmath==1.3.0 ; python_version >= "3.10" and python_version < "4.0" +neo4j==5.28.1 ; python_version >= "3.10" and python_version < "4.0" +nodeenv==1.9.1 ; python_version >= "3.10" and python_version < "4.0" numpy==2.2.6 ; python_version == "3.10" numpy==2.3.1 ; python_version >= "3.11" and python_version < "4.0" ollama==0.4.9 ; python_version >= "3.10" and python_version < "4.0" +onnxruntime==1.22.1 ; python_version >= "3.10" and python_version < "4.0" openai==1.97.0 ; python_version >= "3.10" and python_version < "4.0" openapi-pydantic==0.5.1 ; python_version >= "3.10" and python_version < "4.0" +openpyxl==3.1.5 ; python_version >= "3.10" and python_version < "4.0" orjson==3.11.0 ; python_version >= "3.10" and python_version < "4.0" packaging==25.0 ; python_version >= "3.10" and python_version < "4.0" +pandas==2.3.1 ; python_version >= "3.10" and python_version < "4.0" +pdfminer-six==20250506 ; python_version >= "3.10" and python_version < "4.0" +pillow==11.3.0 ; python_version >= "3.10" and python_version < "4.0" +platformdirs==4.3.8 ; python_version >= "3.10" and python_version < "4.0" +pluggy==1.6.0 ; python_version >= "3.10" and python_version < "4.0" +pre-commit==4.2.0 ; python_version >= "3.10" and python_version < "4.0" +protobuf==6.31.1 ; python_version >= "3.10" and python_version < "4.0" pycparser==2.22 ; python_version >= "3.10" and python_version < "4.0" and platform_python_implementation != "PyPy" pydantic-core==2.33.2 ; python_version >= "3.10" and python_version < "4.0" pydantic-extra-types==2.10.5 ; python_version >= "3.10" and python_version < "4.0" @@ -54,8 +83,14 @@ pydantic-settings==2.10.1 ; python_version >= "3.10" and python_version < "4.0" pydantic==2.11.7 ; python_version >= "3.10" and python_version < "4.0" pygments==2.19.2 ; python_version >= "3.10" and python_version < "4.0" pyperclip==1.9.0 ; python_version >= "3.10" and python_version < "4.0" +pyreadline3==3.5.4 ; python_version >= "3.10" and python_version < "4.0" and sys_platform == "win32" +pytest-asyncio==0.23.8 ; python_version >= "3.10" and python_version < "4.0" +pytest==8.4.1 ; python_version >= "3.10" and python_version < "4.0" +python-dateutil==2.9.0.post0 ; python_version >= "3.10" and python_version < "4.0" python-dotenv==1.1.1 ; python_version >= "3.10" and python_version < "4.0" python-multipart==0.0.20 ; python_version >= "3.10" and python_version < "4.0" +python-pptx==1.0.2 ; python_version >= "3.10" and python_version < "4.0" +pytz==2025.2 ; python_version >= "3.10" and python_version < "4.0" pywin32==311 ; python_version >= "3.10" and python_version < "4.0" and (platform_system == "Windows" or sys_platform == "win32") pyyaml==6.0.2 ; python_version >= "3.10" and python_version < "4.0" referencing==0.36.2 ; python_version >= "3.10" and python_version < "4.0" @@ -66,27 +101,37 @@ rich-toolkit==0.14.8 ; python_version >= "3.10" and python_version < "4.0" rich==14.0.0 ; python_version >= "3.10" and python_version < "4.0" rignore==0.6.2 ; python_version >= "3.10" and python_version < "4.0" rpds-py==0.26.0 ; python_version >= "3.10" and python_version < "4.0" +ruff==0.11.13 ; python_version >= "3.10" and python_version < "4.0" safetensors==0.5.3 ; python_version >= "3.10" and python_version < "4.0" +schedule==1.2.2 ; python_version >= "3.10" and python_version < "4.0" scikit-learn==1.7.0 ; python_version >= "3.10" and python_version < "4.0" scipy==1.15.3 ; python_version == "3.10" scipy==1.16.0 ; python_version >= "3.11" and python_version < "4.0" sentry-sdk==2.33.0 ; python_version >= "3.10" and python_version < "4.0" shellingham==1.5.4 ; python_version >= "3.10" and python_version < "4.0" +six==1.17.0 ; python_version >= "3.10" and python_version < "4.0" sniffio==1.3.1 ; python_version >= "3.10" and python_version < "4.0" +soupsieve==2.7 ; python_version >= "3.10" and python_version < "4.0" sqlalchemy==2.0.41 ; python_version >= "3.10" and python_version < "4.0" sse-starlette==2.4.1 ; python_version >= "3.10" and python_version < "4.0" starlette==0.46.2 ; python_version >= "3.10" and python_version < "4.0" +sympy==1.14.0 ; python_version >= "3.10" and python_version < "4.0" tenacity==9.1.2 ; python_version >= "3.10" and python_version < "4.0" threadpoolctl==3.6.0 ; python_version >= "3.10" and python_version < "4.0" tokenizers==0.21.2 ; python_version >= "3.10" and python_version < "4.0" +tomli==2.2.1 ; python_version == "3.10" tqdm==4.67.1 ; python_version >= "3.10" and python_version < "4.0" transformers==4.53.2 ; python_version >= "3.10" and python_version < "4.0" typer==0.16.0 ; python_version >= "3.10" and python_version < "4.0" typing-extensions==4.14.1 ; python_version >= "3.10" and python_version < "4.0" typing-inspection==0.4.1 ; python_version >= "3.10" and python_version < "4.0" +tzdata==2025.2 ; python_version >= "3.10" and python_version < "4.0" ujson==5.10.0 ; python_version >= "3.10" and python_version < "4.0" urllib3==2.5.0 ; python_version >= "3.10" and python_version < "4.0" uvicorn==0.35.0 ; python_version >= "3.10" and python_version < "4.0" uvloop==0.21.0 ; python_version >= "3.10" and python_version < "4.0" and platform_python_implementation != "PyPy" and sys_platform != "win32" and sys_platform != "cygwin" +virtualenv==20.31.2 ; python_version >= "3.10" and python_version < "4.0" watchfiles==1.1.0 ; python_version >= "3.10" and python_version < "4.0" websockets==15.0.1 ; python_version >= "3.10" and python_version < "4.0" +xlrd==2.0.2 ; python_version >= "3.10" and python_version < "4.0" +xlsxwriter==3.2.5 ; python_version >= "3.10" and python_version < "4.0"