文章目录
- 1 docker-compose 安装 PostgreSQL + 容器内安装 pgvector
- 1.1 基于 docker-compose 安装 PostgreSQL 数据库
- 1.2 容器内配置 pgvector
- 2. docker-compose + Dockerfile 形式直接配置PostgreSQL数据库及 pgvector
- 参考资料
PostgreSQL是一种功能强大的开源关系数据库管理系统,广泛应用于各种应用程序中。PostgresStore 提供持久化存储功能,支持层次命名空间和可选的向量搜索(通过 pgvector 扩展),适合需要长时记忆的 AI 应用,如聊天机器人或自动化工作流。
- PostgreSQL 官网:https://www.postgresql.org/
- pgvector Github项目地址:https://github.com/pgvector/pgvector
1 docker-compose 安装 PostgreSQL + 容器内安装 pgvector
1.1 基于 docker-compose 安装 PostgreSQL 数据库
参考博客:
- https://github.com/NanGePlus/LangGraphChatBot
下面介绍如何以 docker compose
形式启动PostgreSQL服务。
- 安装相关依赖包,推荐使用系统自带的 docker compose:
sudo apt-get update
sudo apt-get install docker-compose-plugin # 新版本
注意: 这里,如果安装的是新版本的 docker-compose-plugin
,后续命令为 docker compose
(没有中间的横线-)
注意事项:
- 不要使用 pip 安装 docker compose,特别是当您使用 Anaconda 环境时。
- 使用系统包管理器(apt/yum)安装 docker compose
这里,笔者之前在 Anaconda 的虚拟环境中 使用
pip install docker-compose
就出现了报错,所以大家最好 使用 系统包管理器(apt/yum)来安装 docker-compose。
- 编写 docker-compose 所需的配置文件。
这里我们的配置文件为docker-compose.yaml
,文件内容为:
services:
postgres:
image: postgres:15 # 指定具体版本
container_name: postgres_db
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
TZ: Asia/Shanghai # 设置时区
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
restart: unless-stopped
healthcheck: # 健康检查
test: ["CMD", "pg_isready", "-U", "nange"]
interval: 10s
timeout: 5s
retries: 5
command: ["postgres", "-c", "max_connections=200"] # 自定义配置
volumes:
pgdata:
这里,我们配置的容器名称为 postgres_db
。
- 运行下面命令启动PostgreSQL数据库服务:
sudo docker compose up -d
这个命令会:
- 以后台模式 (-d) 启动所有定义的服务
- 如果本地有 postgres:15 镜像,则直接加载使用。若没有 postgres:15 镜像,会自动从镜像仓库拉取。
- 创建名为 pgdata 的持久化卷
- 启动容器并应用所有配置
运行成功的话会出现如下界面:
- 检查容器是否正常运行:
docker compose ps
或查看所有容器状态:
docker ps
- 连接数据库
您可以通过以下方式连接数据库:
方式一:在容器内使用 psql
docker compose exec postgres psql -U postgres
方式二:从外部客户端连接
使用任何 PostgreSQL 客户端工具连接,如Navicat可视化工具。
- 停止服务(当需要时)
docker compose down
如果要同时删除数据卷(慎用,会删除所有数据):
docker compose down --volumes
1.2 容器内配置 pgvector
在容器中按照如下步骤进行操作。
- 进入容器:
docker exec -it postgres_db bash
- 容器内安装依赖
apt update
apt install -y git build-essential postgresql-server-dev-15
这里,笔者运行时出现报错:
W: Failed to fetch http://deb.debian.org/debian/dists/bookworm/InRelease Could not connect to debian.map.fastlydns.net:80 (151.101.90.132)
W: Failed to fetch http://apt.postgresql.org/pub/repos/apt/dists/bookworm-pgdg/InRelease Could not connect to apt.postgresql.org:80 (151.101.91.52), connection timed out
需要检查下服务器是否开通了 http://deb.debian.org
和 http://apt.postgresql.org
的访问权限。如果没有权限,可以申请开通,或者使用国内清华或阿里云的镜像源。
- 容器内编译并安装 pgvector
这里主要参考 pgvector 官网:https://github.com/pgvector/pgvector
cd /tmp
git clone https://github.com/pgvector/pgvector.git
cd pgvector
make
make install
- 检查扩展文件是否安装成功
ls -l /usr/share/postgresql/15/extension/vector*
- 启用pgvector扩展
psql -U postgres -d mydatabase
-- 在psql中执行
CREATE EXTENSION vector;
- 验证安装
基于SQL语句验证:
SELECT * FROM pg_extension WHERE extname = 'vector';
2. docker-compose + Dockerfile 形式直接配置PostgreSQL数据库及 pgvector
参考博客:
- docker-compose安装pgsql和pgvector
- 2-PostgreSQL docker compose 安装教程-Pgvector
- 创建 Dockerfile
# 使用 PostgreSQL 15 基础镜像
FROM postgres:15
# 安装 pgvector
RUN apt-get update && \
apt-get install -y postgresql-16-pgvector && \
rm -rf /var/lib/apt/lists/*
# 设置启动命令
CMD ["postgres"]
- 创建 docker-compose.yaml
services:
postgres:
build:
context: .
dockerfile: Dockerfile
container_name: postgres_db
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
TZ: Asia/Shanghai # 设置时区
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
restart: always
healthcheck: # 健康检查
test: ["CMD", "pg_isready", "-U", "nange"]
interval: 10s
timeout: 5s
retries: 5
command: ["postgres", "-c", "max_connections=200"] # 自定义配置
volumes:
pgdata:
- 构建Dockerfile
docker compose build
- 运行
docker compose up -d
- 进入postgres容器
docker exec -it postgres psql -U postgres -d postgres
- 判断vector工具是否安装成功
CREATE EXTENSION IF NOT EXISTS vector;
参考资料
- https://github.com/NanGePlus/LangGraphChatBot
- docker-compose安装pgsql和pgvector
- 2-PostgreSQL docker compose 安装教程-Pgvector