MemGPT/Dockerfile
2024-12-11 16:31:52 -08:00

114 lines
2.9 KiB
Docker

# Start with pgvector base for builder
FROM ankane/pgvector:v0.5.1 AS builder
# Install dependencies and Python 3.12
RUN apt-get update && apt-get install -y \
wget \
build-essential \
libssl-dev \
zlib1g-dev \
libncurses5-dev \
libncursesw5-dev \
libreadline-dev \
libsqlite3-dev \
libgdbm-dev \
libdb5.3-dev \
libbz2-dev \
libexpat1-dev \
liblzma-dev \
libffi-dev \
libpq-dev \
&& rm -rf /var/lib/apt/lists/*
# Download and install Python 3.12
RUN wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz \
&& tar xzf Python-3.12.0.tgz \
&& cd Python-3.12.0 \
&& ./configure --enable-optimizations \
&& make -j $(nproc) \
&& make altinstall \
&& cd .. \
&& rm -rf Python-3.12.0 Python-3.12.0.tgz \
&& ln -s /usr/local/bin/python3.12 /usr/local/bin/python3 \
&& ln -s /usr/local/bin/pip3.12 /usr/local/bin/pip3
ARG LETTA_ENVIRONMENT=PRODUCTION
ENV LETTA_ENVIRONMENT=${LETTA_ENVIRONMENT} \
POETRY_NO_INTERACTION=1 \
POETRY_VIRTUALENVS_IN_PROJECT=1 \
POETRY_VIRTUALENVS_CREATE=1 \
POETRY_CACHE_DIR=/tmp/poetry_cache
WORKDIR /app
# Create and activate virtual environment
RUN python3.12 -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
# Install poetry in the virtual environment
RUN pip3 install --no-cache-dir poetry==1.8.2
# Copy dependency files first
COPY pyproject.toml poetry.lock ./
# Then copy the rest of the application code
COPY . .
RUN poetry lock --no-update && \
poetry install --all-extras && \
rm -rf $POETRY_CACHE_DIR
# Runtime stage
FROM ankane/pgvector:v0.5.1 AS runtime
# Install Python 3.12 dependencies in runtime stage
RUN apt-get update && apt-get install -y \
wget \
build-essential \
libssl-dev \
zlib1g-dev \
libncurses5-dev \
libncursesw5-dev \
libreadline-dev \
libsqlite3-dev \
libgdbm-dev \
libdb5.3-dev \
libbz2-dev \
libexpat1-dev \
liblzma-dev \
libffi-dev \
&& rm -rf /var/lib/apt/lists/*
# Install Python 3.12 in runtime stage
RUN wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz \
&& tar xzf Python-3.12.0.tgz \
&& cd Python-3.12.0 \
&& ./configure --enable-optimizations \
&& make -j $(nproc) \
&& make altinstall \
&& cd .. \
&& rm -rf Python-3.12.0 Python-3.12.0.tgz \
&& ln -s /usr/local/bin/python3.12 /usr/local/bin/python3 \
&& mkdir -p /app
ARG LETTA_ENVIRONMENT=PRODUCTION
ENV LETTA_ENVIRONMENT=${LETTA_ENVIRONMENT} \
VIRTUAL_ENV="/app/.venv" \
PATH="/app/.venv/bin:$PATH" \
POSTGRES_USER=letta \
POSTGRES_PASSWORD=letta \
POSTGRES_DB=letta
WORKDIR /app
# Copy virtual environment and app from builder
COPY --from=builder /app .
# Copy initialization SQL if it exists
COPY init.sql /docker-entrypoint-initdb.d/
EXPOSE 8283 5432
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
CMD ["./letta/server/startup.sh"]