Skip to content

Commit 727dc18

Browse files
authored
feat: one-click deployment with docker (#133)
* feat: one-click deployment with docker * feat: one-click deployment with docker * feat: one-click deployment with docker * feat: one-click deployment with docker * feat: one-click deployment with docker * feat: one-click deployment with docker * feat: one-click deployment with docker * feat: one-click deployment with docker
1 parent c42bf96 commit 727dc18

File tree

5 files changed

+337
-45
lines changed

5 files changed

+337
-45
lines changed

docker/.env.example

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# MemOS Environment Variables Configuration
2+
3+
# Path to memory storage (e.g. /tmp/data_test)
4+
MOS_CUBE_PATH=
5+
6+
# OpenAI Configuration
7+
OPENAI_API_KEY= # Your OpenAI API key
8+
OPENAI_API_BASE= # OpenAI API base URL (default: https://api.openai.com/v1)
9+
10+
# MemOS Feature Toggles
11+
MOS_ENABLE_DEFAULT_CUBE_CONFIG= # Enable default cube config (true/false)
12+
MOS_ENABLE_SCHEDULER= # Enable background scheduler (true/false)
13+
14+
# Neo4j Configuration
15+
NEO4J_URI= # Neo4j connection URI (e.g. bolt://localhost:7687)
16+
NEO4J_USER= # Neo4j username
17+
NEO4J_PASSWORD= # Neo4j password
18+
MOS_NEO4J_SHARED_DB= # Shared Neo4j database name (if using multi-db)
19+
20+
# MemOS User Configuration
21+
MOS_USER_ID= # Unique user ID
22+
MOS_SESSION_ID= # Session ID for current chat
23+
MOS_MAX_TURNS_WINDOW= # Max number of turns to keep in memory
24+
25+
# Ollama Configuration (for local embedding models)
26+
OLLAMA_API_BASE= # Ollama API base URL (e.g. http://localhost:11434)
27+
28+
# Embedding Configuration
29+
MOS_EMBEDDER_BACKEND= # Embedding backend: openai, ollama, etc.

docker/Dockerfile

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
FROM python:3.11-slim
2+
3+
RUN apt-get update && apt-get install -y \
4+
gcc \
5+
g++ \
6+
build-essential \
7+
libffi-dev \
8+
python3-dev \
9+
curl \
10+
&& rm -rf /var/lib/apt/lists/*
11+
12+
WORKDIR /app
13+
14+
ENV HF_ENDPOINT=https://hf-mirror.com
15+
16+
COPY requirements.txt .
17+
RUN pip install --upgrade pip && pip install --no-cache-dir -r requirements.txt
18+
19+
RUN pip install chonkie
20+
21+
COPY ../. .
22+
ENV PYTHONPATH=/app/src
23+
24+
EXPOSE 8000
25+
CMD ["uvicorn", "memos.api.product_api:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]

docker/docker-compose.yml

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
name: memos-dev
2+
3+
services:
4+
memos:
5+
container_name: memos-api-server
6+
build:
7+
context: ..
8+
dockerfile: Dockerfile
9+
ports:
10+
- "8000:8000"
11+
env_file:
12+
- ../.env
13+
depends_on:
14+
- neo4j
15+
- qdrant
16+
environment:
17+
- PYTHONPATH=/app/src
18+
volumes:
19+
- .:/app
20+
networks:
21+
- memos_network
22+
23+
neo4j:
24+
image: neo4j:5.26.4
25+
container_name: neo4j-server
26+
ports:
27+
- "7474:7474" # HTTP
28+
- "7687:7687" # Bolt
29+
healthcheck:
30+
test: wget http://localhost:7687 || exit 1
31+
interval: 1s
32+
timeout: 10s
33+
retries: 20
34+
start_period: 3s
35+
environment:
36+
NEO4J_ACCEPT_LICENSE_AGREEMENT: "yes"
37+
NEO4J_AUTH: "neo4j/12345678"
38+
volumes:
39+
- neo4j_data:/data
40+
- neo4j_logs:/logs
41+
networks:
42+
- memos_network
43+
44+
qdrant:
45+
image: qdrant/qdrant:v1.15.0
46+
container_name: qdrant-server
47+
ports:
48+
- "6333:6333" # REST API
49+
- "6334:6334" # gRPC API
50+
volumes:
51+
- ./qdrant_data:/qdrant/storage
52+
environment:
53+
QDRANT__SERVICE__GRPC_PORT: 6334
54+
QDRANT__SERVICE__HTTP_PORT: 6333
55+
restart: unless-stopped
56+
networks:
57+
- memos_network
58+
59+
volumes:
60+
neo4j_data:
61+
neo4j_logs:
62+
63+
networks:
64+
memos_network:
65+
driver: bridge

docker/requirements.txt

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
annotated-types==0.7.0 ; python_version >= "3.10" and python_version < "4.0"
2+
anyio==4.9.0 ; python_version >= "3.10" and python_version < "4.0"
3+
attrs==25.3.0 ; python_version >= "3.10" and python_version < "4.0"
4+
authlib==1.6.0 ; python_version >= "3.10" and python_version < "4.0"
5+
certifi==2025.7.14 ; python_version >= "3.10" and python_version < "4.0"
6+
cffi==1.17.1 ; python_version >= "3.10" and python_version < "4.0" and platform_python_implementation != "PyPy"
7+
charset-normalizer==3.4.2 ; python_version >= "3.10" and python_version < "4.0"
8+
click==8.2.1 ; python_version >= "3.10" and python_version < "4.0"
9+
colorama==0.4.6 ; python_version >= "3.10" and python_version < "4.0" and (platform_system == "Windows" or sys_platform == "win32")
10+
cryptography==45.0.5 ; python_version >= "3.10" and python_version < "4.0"
11+
cyclopts==3.22.2 ; python_version >= "3.10" and python_version < "4.0"
12+
distro==1.9.0 ; python_version >= "3.10" and python_version < "4.0"
13+
dnspython==2.7.0 ; python_version >= "3.10" and python_version < "4.0"
14+
docstring-parser==0.16 ; python_version >= "3.10" and python_version < "4.0"
15+
docutils==0.21.2 ; python_version >= "3.10" and python_version < "4.0"
16+
email-validator==2.2.0 ; python_version >= "3.10" and python_version < "4.0"
17+
exceptiongroup==1.3.0 ; python_version >= "3.10" and python_version < "4.0"
18+
fastapi-cli==0.0.8 ; python_version >= "3.10" and python_version < "4.0"
19+
fastapi-cloud-cli==0.1.4 ; python_version >= "3.10" and python_version < "4.0"
20+
fastapi==0.115.14 ; python_version >= "3.10" and python_version < "4.0"
21+
fastmcp==2.10.5 ; python_version >= "3.10" and python_version < "4.0"
22+
filelock==3.18.0 ; python_version >= "3.10" and python_version < "4.0"
23+
fsspec==2025.7.0 ; python_version >= "3.10" and python_version < "4.0"
24+
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")
25+
h11==0.16.0 ; python_version >= "3.10" and python_version < "4.0"
26+
hf-xet==1.1.5 ; python_version >= "3.10" and python_version < "4.0" and (platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "arm64" or platform_machine == "aarch64")
27+
httpcore==1.0.9 ; python_version >= "3.10" and python_version < "4.0"
28+
httptools==0.6.4 ; python_version >= "3.10" and python_version < "4.0"
29+
httpx-sse==0.4.1 ; python_version >= "3.10" and python_version < "4.0"
30+
httpx==0.28.1 ; python_version >= "3.10" and python_version < "4.0"
31+
huggingface-hub==0.33.4 ; python_version >= "3.10" and python_version < "4.0"
32+
idna==3.10 ; python_version >= "3.10" and python_version < "4.0"
33+
itsdangerous==2.2.0 ; python_version >= "3.10" and python_version < "4.0"
34+
jinja2==3.1.6 ; python_version >= "3.10" and python_version < "4.0"
35+
jiter==0.10.0 ; python_version >= "3.10" and python_version < "4.0"
36+
joblib==1.5.1 ; python_version >= "3.10" and python_version < "4.0"
37+
jsonschema-specifications==2025.4.1 ; python_version >= "3.10" and python_version < "4.0"
38+
jsonschema==4.24.1 ; python_version >= "3.10" and python_version < "4.0"
39+
markdown-it-py==3.0.0 ; python_version >= "3.10" and python_version < "4.0"
40+
markupsafe==3.0.2 ; python_version >= "3.10" and python_version < "4.0"
41+
mcp==1.12.0 ; python_version >= "3.10" and python_version < "4.0"
42+
mdurl==0.1.2 ; python_version >= "3.10" and python_version < "4.0"
43+
numpy==2.2.6 ; python_version == "3.10"
44+
numpy==2.3.1 ; python_version >= "3.11" and python_version < "4.0"
45+
ollama==0.4.9 ; python_version >= "3.10" and python_version < "4.0"
46+
openai==1.97.0 ; python_version >= "3.10" and python_version < "4.0"
47+
openapi-pydantic==0.5.1 ; python_version >= "3.10" and python_version < "4.0"
48+
orjson==3.11.0 ; python_version >= "3.10" and python_version < "4.0"
49+
packaging==25.0 ; python_version >= "3.10" and python_version < "4.0"
50+
pycparser==2.22 ; python_version >= "3.10" and python_version < "4.0" and platform_python_implementation != "PyPy"
51+
pydantic-core==2.33.2 ; python_version >= "3.10" and python_version < "4.0"
52+
pydantic-extra-types==2.10.5 ; python_version >= "3.10" and python_version < "4.0"
53+
pydantic-settings==2.10.1 ; python_version >= "3.10" and python_version < "4.0"
54+
pydantic==2.11.7 ; python_version >= "3.10" and python_version < "4.0"
55+
pygments==2.19.2 ; python_version >= "3.10" and python_version < "4.0"
56+
pyperclip==1.9.0 ; python_version >= "3.10" and python_version < "4.0"
57+
python-dotenv==1.1.1 ; python_version >= "3.10" and python_version < "4.0"
58+
python-multipart==0.0.20 ; python_version >= "3.10" and python_version < "4.0"
59+
pywin32==311 ; python_version >= "3.10" and python_version < "4.0" and (platform_system == "Windows" or sys_platform == "win32")
60+
pyyaml==6.0.2 ; python_version >= "3.10" and python_version < "4.0"
61+
referencing==0.36.2 ; python_version >= "3.10" and python_version < "4.0"
62+
regex==2024.11.6 ; python_version >= "3.10" and python_version < "4.0"
63+
requests==2.32.4 ; python_version >= "3.10" and python_version < "4.0"
64+
rich-rst==1.3.1 ; python_version >= "3.10" and python_version < "4.0"
65+
rich-toolkit==0.14.8 ; python_version >= "3.10" and python_version < "4.0"
66+
rich==14.0.0 ; python_version >= "3.10" and python_version < "4.0"
67+
rignore==0.6.2 ; python_version >= "3.10" and python_version < "4.0"
68+
rpds-py==0.26.0 ; python_version >= "3.10" and python_version < "4.0"
69+
safetensors==0.5.3 ; python_version >= "3.10" and python_version < "4.0"
70+
scikit-learn==1.7.0 ; python_version >= "3.10" and python_version < "4.0"
71+
scipy==1.15.3 ; python_version == "3.10"
72+
scipy==1.16.0 ; python_version >= "3.11" and python_version < "4.0"
73+
sentry-sdk==2.33.0 ; python_version >= "3.10" and python_version < "4.0"
74+
shellingham==1.5.4 ; python_version >= "3.10" and python_version < "4.0"
75+
sniffio==1.3.1 ; python_version >= "3.10" and python_version < "4.0"
76+
sqlalchemy==2.0.41 ; python_version >= "3.10" and python_version < "4.0"
77+
sse-starlette==2.4.1 ; python_version >= "3.10" and python_version < "4.0"
78+
starlette==0.46.2 ; python_version >= "3.10" and python_version < "4.0"
79+
tenacity==9.1.2 ; python_version >= "3.10" and python_version < "4.0"
80+
threadpoolctl==3.6.0 ; python_version >= "3.10" and python_version < "4.0"
81+
tokenizers==0.21.2 ; python_version >= "3.10" and python_version < "4.0"
82+
tqdm==4.67.1 ; python_version >= "3.10" and python_version < "4.0"
83+
transformers==4.53.2 ; python_version >= "3.10" and python_version < "4.0"
84+
typer==0.16.0 ; python_version >= "3.10" and python_version < "4.0"
85+
typing-extensions==4.14.1 ; python_version >= "3.10" and python_version < "4.0"
86+
typing-inspection==0.4.1 ; python_version >= "3.10" and python_version < "4.0"
87+
ujson==5.10.0 ; python_version >= "3.10" and python_version < "4.0"
88+
urllib3==2.5.0 ; python_version >= "3.10" and python_version < "4.0"
89+
uvicorn==0.35.0 ; python_version >= "3.10" and python_version < "4.0"
90+
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"
91+
watchfiles==1.1.0 ; python_version >= "3.10" and python_version < "4.0"
92+
websockets==15.0.1 ; python_version >= "3.10" and python_version < "4.0"

0 commit comments

Comments
 (0)