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