mirror of
https://github.com/cpacker/MemGPT.git
synced 2025-06-03 04:30:22 +00:00
114 lines
2.9 KiB
Docker
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"]
|