🚀 5 分钟部署 pgvector:从 Supabase 官方镜像提取纯向量数据库

不想折腾编译?不想用 Docker Hub 上来源不明的镜像?这里有一条从官方 Supabase 仓库提取纯净 PostgreSQL + pgvector的捷径。


最终效果

  • ✅ 只跑 1 个容器(原版 Supabase 启动 14 个)
  • ✅ 官方维护的 Postgres 15 + 预置 pgvector
  • ✅ 5432 端口直接暴露,无需 Kong 网关
  • ✅ 数据持久化到本地,重启不丢

一键部署

1. 克隆仓库

git clone --depth 1 https://github.com/supabase/supabase
cd supabase/docker

2. 拉取镜像(约 1GB,耐心等待)

docker compose pull

3. 写入精简配置(只保留数据库)

这里建议先备份

# 2. 备份原文件(以防万一)
cp docker-compose.yml docker-compose.yml.full

停掉所有容器
docker compose down
cat > docker-compose.yml << 'EOF'
name: pgvector

services:
  db:
    container_name: pgvector-db
    image: supabase/postgres:15.8.1.085
    restart: unless-stopped
    ports:
      - "${POSTGRES_PORT:-5432}:5432"
    environment:
      POSTGRES_PASSWORD: "${POSTGRES_PASSWORD:-your_password}"
      POSTGRES_DB: "${POSTGRES_DB:-postgres}"
      PGPORT: 5432
      PGPASSWORD: "${POSTGRES_PASSWORD:-your_password}"
    volumes:
      - ./volumes/db/data:/var/lib/postgresql/data:Z
      - db-config:/etc/postgresql-custom
    healthcheck:
      test: ["CMD", "pg_isready", "-U", "postgres", "-h", "localhost"]
      interval: 5s
      timeout: 5s
      retries: 10
    command:
      - "postgres"
      - "-c"
      - "config_file=/etc/postgresql/postgresql.conf"
      - "-c"
      - "log_min_messages=fatal"

volumes:
  db-config:
EOF

4. 启动服务

docker compose up -d

5. 启用 pgvector 扩展

docker exec -it pgvector-db psql -U postgres -c "CREATE EXTENSION IF NOT EXISTS vector;"

6. 验证安装

docker exec -it pgvector-db psql -U postgres -c "SELECT * FROM pg_extension WHERE extname = 'vector';"

看到输出即成功:

  oid   | extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition 
--------+---------+----------+--------------+----------------+------------+-----------+--------------
 16388  | vector  |       10 |         2200 | t              | 0.7.0      |           | 

7. 如果没有, 则安装 pgvector

在 psql 中执行:

docker exec -it pgvector-db psql -U postgres
CREATE EXTENSION vector;

然后验证:

SELECT * FROM pg_extension WHERE extname = 'vector';

如果看到类似这样的结果,就说明安装成功了:

  oid   | extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition 
--------+---------+----------+--------------+----------------+------------+-----------+--------------
 16388  | vector  |       10 |         2200 | t              | 0.7.0      |           | 
(1 row)

如果报错 “extension ‘vector’ is not available”
说明这个 Supabase 镜像版本可能没有预装 pgvector。

快速测试

docker exec -it pgvector-db psql -U postgres << 'EOF'
CREATE TABLE IF NOT EXISTS items (
    id bigserial PRIMARY KEY,
    embedding vector(3)
);

INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]'), ('[7,8,9]');

SELECT id, embedding, embedding <-> '[3,1,2]' AS distance 
FROM items 
ORDER BY distance 
LIMIT 2;
EOF

连接信息

参数
Hostlocalhost 或服务器 IP
Port5432
Databasepostgres
Usernamepostgres
Passwordyour_password(或 .env 中自定义)

连接字符串:

postgresql://postgres:your_password@localhost:5432/postgres

为什么选这条路?

方案容器数来源备注
Supabase 全套14 个官方Kong 权限问题、资源占用高
ankane/pgvector1 个社区需信任第三方镜像
本方案1 个官方从 Supabase 官方镜像提取,无额外信任成本

清理(如需重装)

# 停止并删除容器
docker compose down

# 删除数据(⚠️ 谨慎操作)
rm -rf ./volumes/db/data

# 重新来过
docker compose up -d
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐