FROM python:3.11-slim-bookworm
# Use USTC Debian mirror for faster downloads in China
RUN sed -i 's|deb.debian.org|mirrors.ustc.edu.cn|g' /etc/apt/sources.list.d/debian.sources 2>/dev/null; \
sed -i 's|deb.debian.org|mirrors.ustc.edu.cn|g' /etc/apt/sources.list 2>/dev/null; \
true
RUN apt-get update && \
apt-get install -y --no-install-recommends libpq-dev curl && \
apt-get clean && rm -rf /var/lib/apt/lists/*
RUN pip install --no-cache-dir \
-i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com \
--timeout 120 \
flask gunicorn openai psycopg2-binary pyagfs rich requests apscheduler httpx pyyaml jinja2 \
json-repair "volcengine-python-sdk[ark]"
# Copy oGMemory source
COPY core/ /opt/ogmem/core/
COPY retrieval/ /opt/ogmem/retrieval/
COPY extraction/ /opt/ogmem/extraction/
COPY commit/ /opt/ogmem/commit/
COPY index/ /opt/ogmem/index/
COPY providers/ /opt/ogmem/providers/
COPY service/ /opt/ogmem/service/
COPY fs/ /opt/ogmem/fs/
COPY server/ /opt/ogmem/server/
COPY session/ /opt/ogmem/session/
COPY scripts/ /opt/ogmem/scripts/
# lifecycle/ removed — not present in this workspace
COPY perf/ /opt/ogmem/perf/
# Copy AGFS binary and config
COPY agfs/agfs-server /opt/agfs/agfs-server
COPY config/agfs/config.reference.yaml /opt/agfs/config.yaml
# Copy entrypoint
COPY docker/entrypoint-standalone.sh /opt/entrypoint.sh
RUN chmod 755 /opt/entrypoint.sh /opt/agfs/agfs-server
# Copy default config (user can override via volume mount)
COPY deploy/ogmemory.example.yaml /etc/ogmem/config.yaml
# Create data directory
RUN mkdir -p /data/agfs && useradd -m ogmem && chown -R ogmem:ogmem /data/agfs /opt/agfs /opt/ogmem /etc/ogmem
RUN chmod -R 755 /opt/agfs /opt/ogmem
# Environment defaults (kept for backward compat; YAML config takes priority)
ENV PYTHONPATH=/opt/ogmem
ENV OGMEM_CONFIG=/etc/ogmem/config.yaml
ENV AGFS_BASE_URL=http://127.0.0.1:1833
ENV AGFS_MOUNT_PREFIX=/local/plugin
ENV CONTEXTENGINE_PROVIDER=openai
ENV VECTOR_DB_TYPE=opengauss
ENV INDEX_INTERVAL=15
ENV OG_ACCOUNT_ID=acct-demo
ENV OGMEM_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
ENV OGMEM_EMBEDDING_MODEL=text-embedding-v2
ENV OGMEM_HTTP_PORT=8090
USER ogmem
EXPOSE 8090
ENTRYPOINT ["/opt/entrypoint.sh"]