数据库架构选择和配置

需求是存储用户文件和向量数据,使用 PostgreSQL(作为向量存储和元数据管理)和 MinIO(作为对象存储)就可以满足你的需求。以下是完整的安装和安全配置指南。


1. 准备工作

  • 一台云服务器(例如 AWS、阿里云、腾讯云)。
  • 已安装的 Ubuntu(或其他 Linux 系统)。
  • 确保拥有 sudo 权限,并更新软件包管理器:
    1
    2
    3
    sudo apt update
    sudo apt upgrade -y


2. 安装和配置 PostgreSQL

2.1 安装 PostgreSQL

1
2
sudo apt install postgresql postgresql-contrib -y

2.2 启用 pgvector 扩展

  1. 安装构建工具(如果未安装):
1
sudo apt install postgresql-server-dev-$(pg_config --version | cut -d'.' -f1,2) build-essential -y
  1. 安装 pgvector
    1
    2
    3
    4
    git clone https://github.com/pgvector/pgvector.git
    cd pgvector
    make
    sudo make install
  2. 启用 pgvector: 切换到 PostgreSQL 用户并进入数据库管理工具:
1
2
sudo -i -u postgres
psql

启用扩展:

1
CREATE EXTENSION vector;

退出命令行:

1
\q

2.3 配置远程访问

  1. **修改 postgresql.conf**:
    1
    sudo vim /etc/postgresql/$(pg_config --version | cut -d'.' -f1,2)/main/postgresql.conf

找到 listen_addresses,将其设置为:

1
listen_addresses = '*'
  1. **修改 pg_hba.conf**:
    1
    sudo vim /etc/postgresql/$(pg_config --version | cut -d'.' -f1,2)/main/pg_hba.conf

添加以下内容(允许从特定 IP 段访问):
host all all 0.0.0.0/0 md5

  1. 重启 PostgreSQL

    sudo systemctl restart postgresql

  2. 设置用户密码

    sudo -i -u postgres psql ALTER USER postgres PASSWORD 'your_password'; \q

  3. 防火墙设置: 允许 5432 端口(PostgreSQL 默认端口):

    sudo ufw allow 5432

Pasted image 20241207175619


3. 安装和配置 MinIO

3.1 安装 MinIO (可直接跳到3.4)

  1. 下载 MinIO 服务端

    1
    wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x minio sudo mv minio /usr/local/bin/
  2. 创建数据存储目录

    1
    sudo mkdir -p /mnt/data/minio sudo chown -R $USER:$USER /mnt/data/minio
  3. 运行 MinIO

    1
    export MINIO_ROOT_USER=your_access_key export MINIO_ROOT_PASSWORD=your_secret_key minio server /mnt/data/minio

    默认情况下,MinIO 会在端口 9000 启动。


3.2 配置为服务

将 MinIO 配置为系统服务以在重启后自动运行:

1
sudo nano /etc/systemd/system/minio.service

添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
[Unit]  
Description=Minio
Documentation=https://docs.minio.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio

[Service]
WorkingDirectory=/usr/local/

User=minio-user
Group=minio-user

PermissionsStartOnly=true

EnvironmentFile=-/etc/default/minio
ExecStartPre=/bin/bash -c "[ -n \"${MINIO_VOLUMES}\" ] || echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\""

ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES

StandardOutput=journal
StandardError=inherit

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536

# Disable timeout logic and wait until process is stopped
TimeoutStopSec=0

# SIGTERM signal is used to stop Minio
KillSignal=SIGTERM

SendSIGKILL=no

SuccessExitStatus=0

[Install]
WantedBy=multi-user.target

创建用户和目录权限:

1
sudo useradd -r minio-user sudo chown -R minio-user:minio-user /mnt/data/minio sudo systemctl daemon-reload sudo systemctl start minio sudo systemctl enable minio

3.3 配置防火墙

允许 9000 端口(MinIO 默认端口):

sudo ufw allow 9000

3.4 Docker 安装 MinIO (一步到位)

1
2
3
4
5
6
7
8
docker run -d -p 9000:9000 -p 50000:50000 --name minio 
-e "MINIO_ROOT_USER=xxxx"
-e "MINIO_ROOT_PASSWORD=xxxx"
--restart=always
-v /root/minio/data:/data
-v /root/minio/config:/root/.minio
--privileged=true
minio/minio server --console-address ":50000" /data

4. 安全配置

4.1 PostgreSQL 的安全建议

  • 强密码:确保 PostgreSQL 用户密码强度足够高。

  • IP 限制:在 pg_hba.conf 中,只允许特定的 IP 地址段访问。

  • SSL 加密:启用 SSL 确保传输安全:

    1
    sudo nano /etc/postgresql/$(pg_config --version | cut -d'.' -f1,2)/main/postgresql.conf

    启用 SSL:

    找到conf文件内ssl字段并配置ssl = on

    然后配置 SSL 证书(可以使用 Let’s Encrypt 或自签名证书)。

4.2 MinIO 的安全建议

  • 强密钥:设置复杂的 MINIO_ROOT_USERMINIO_ROOT_PASSWORD

  • 启用 HTTPS:配置 MinIO 的 HTTPS 访问,保护文件传输:

    1
    minio server --certs-dir /path/to/certs /mnt/data/minio
  • 访问控制:设置桶权限为私有,只允许授权用户访问。


5. 测试和验证

  1. 测试 PostgreSQL 连接

    • 本地:

      1
      psql -U postgres -h localhost
    • 远程:

      1
      psql -U postgres -h <server_ip> -p 5432
  2. 测试 MinIO 连接

    • 在浏览器访问:http://:9000
    • 使用设置的 MINIO_ROOT_USERMINIO_ROOT_PASSWORD 登录。

6. 使用建议

  • 文件存储:通过 MinIO 存储文件,使用 PostgreSQL 保存文件路径及元数据。
  • 向量存储:将嵌入向量存储在 PostgreSQL,使用索引优化检索性能。
  • 整合 API:构建统一的 API 接口,将文件上传、路径记录、向量生成整合在一起。