PostgreSQL容器部署分词等
# 第一阶段:构建扩展
FROM postgres:16 AS builder
# 安装构建工具和依赖
RUN apt-get update && apt-get install -y \
postgresql-server-dev-16 \
build-essential \
git \
curl \
wget \
bzip2 \
libcurl4-openssl-dev \
&& rm -rf /var/lib/apt/lists/*
# 安装 SCWS
RUN wget -q -O - http://www.xunsearch.com/scws/down/scws-1.2.3.tar.bz2 | tar -xjf - \
&& cd scws-1.2.3 \
&& ./configure \
&& make install \
&& rm -rf /scws-1.2.3
# 安装 pgvector 扩展
RUN git clone https://github.com/pgvector/pgvector.git /tmp/pgvector \
&& cd /tmp/pgvector \
&& make && make install \
&& rm -rf /tmp/pgvector
# 安装 zhparser 扩展
RUN git clone https://github.com/amutu/zhparser.git /tmp/zhparser \
&& cd /tmp/zhparser \
&& make && make install \
&& rm -rf /tmp/zhparser
# 添加 Citus 的官方仓库并安装 Citus
RUN curl https://install.citusdata.com/community/deb.sh > add-citus-repo.sh \
&& bash add-citus-repo.sh \
&& apt-get -y install postgresql-16-citus-12.1 \
&& rm -rf /var/lib/apt/lists/*
# 第二阶段:创建最终镜像
FROM postgres:16
# 安装 libcurl 以确保 Citus 扩展可以找到所需的库
RUN apt-get update && apt-get install -y \
libcurl4 \
&& rm -rf /var/lib/apt/lists/*
# 从构建阶段复制已安装的扩展和 SCWS 库
COPY --from=builder /usr/lib/postgresql/16/lib/ /usr/lib/postgresql/16/lib/
COPY --from=builder /usr/share/postgresql/16/extension/ /usr/share/postgresql/16/extension/
COPY --from=builder /usr/local/lib/libscws.* /usr/local/lib/
COPY --from=builder /usr/share/postgresql/16/extension/zhparser* /usr/share/postgresql/16/extension/
COPY --from=builder /usr/lib/postgresql/16/lib/bitcode/zhparser* /usr/lib/postgresql/16/lib/bitcode/
COPY --from=builder /usr/share/postgresql/16/tsearch_data/ /usr/share/postgresql/16/tsearch_data/
COPY --from=builder /var/lib/postgresql/data/base/ /var/lib/postgresql/data/base/
# 设置环境变量
ENV POSTGRES_USER=${DB_ROOT_USER:-db_user}
ENV POSTGRES_PASSWORD=${DB_ROOT_PASSWORD:-db_password}
# 设置 Citus 为 shared_preload_libraries
RUN echo "shared_preload_libraries = 'citus'" >> /usr/share/postgresql/postgresql.conf.sample
# 优化 PostgreSQL 性能
RUN echo "shared_buffers = 256MB" >> /usr/share/postgresql/postgresql.conf.sample \
&& echo "work_mem = 4MB" >> /usr/share/postgresql/postgresql.conf.sample \
&& echo "maintenance_work_mem = 64MB" >> /usr/share/postgresql/postgresql.conf.sample \
&& echo "effective_cache_size = 512MB" >> /usr/share/postgresql/postgresql.conf.sample \
&& echo "max_connections = 200" >> /usr/share/postgresql/postgresql.conf.sample
# 请自己执行启用插件
# CREATE EXTENSION vector
# CREATE EXTENSION citext
# CREATE EXTENSION zhparser
# CREATE EXTENSION citus
# Select * FROM pg_extension