LightRAG/starter/Dockerfile.postgres
2025-12-05 14:31:13 +08:00

58 lines
2.2 KiB
Text

# Multi-stage build for PostgreSQL with pgvector and Apache AGE
# Based on official Apache AGE Dockerfile from https://github.com/apache/age/tree/master/docker
FROM postgres:15 AS build
# Install all necessary build dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
bison \
build-essential \
flex \
postgresql-server-dev-15 \
git \
curl \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*
# Build pgvector
WORKDIR /tmp/pgvector
RUN git -c http.sslVerify=false clone --depth 1 https://github.com/pgvector/pgvector.git . && \
make && make install
# Build Apache AGE
WORKDIR /tmp/age
RUN git -c http.sslVerify=false clone --branch PG15/v1.5.0-rc0 --depth 1 https://github.com/apache/age.git . && \
make PG_CONFIG=/usr/lib/postgresql/15/bin/pg_config && \
make PG_CONFIG=/usr/lib/postgresql/15/bin/pg_config install
# Final stage: Create minimal image with both extensions
FROM postgres:15
# Install runtime locales (required for AGE)
RUN apt-get update && apt-get install -y --no-install-recommends locales && \
rm -rf /var/lib/apt/lists/* && \
echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \
locale-gen && \
update-locale LANG=en_US.UTF-8
ENV LANG=en_US.UTF-8
ENV LC_COLLATE=en_US.UTF-8
ENV LC_CTYPE=en_US.UTF-8
# Copy compiled pgvector extension
COPY --from=build /usr/lib/postgresql/15/lib/vector.so /usr/lib/postgresql/15/lib/
COPY --from=build /usr/share/postgresql/15/extension/vector* /usr/share/postgresql/15/extension/
# Copy compiled Apache AGE extension
COPY --from=build /usr/lib/postgresql/15/lib/age.so /usr/lib/postgresql/15/lib/
COPY --from=build /usr/share/postgresql/15/extension/age--*.sql /usr/share/postgresql/15/extension/
COPY --from=build /usr/share/postgresql/15/extension/age.control /usr/share/postgresql/15/extension/
# Verify extensions are in place
RUN ls -la /usr/lib/postgresql/15/lib/vector.so && \
ls -la /usr/lib/postgresql/15/lib/age.so && \
ls -la /usr/share/postgresql/15/extension/vector.control && \
ls -la /usr/share/postgresql/15/extension/age.control
# Start PostgreSQL with AGE shared library loaded
CMD ["postgres", "-c", "shared_preload_libraries=age"]