ClickHouse 一键部署:VPS 上跑起超高速列式数据库

概述

你处理过大量日志数据吗?普通 MySQL 查几千万条记录,慢到让人怀疑人生。ClickHouse 就是为这种场景生的——列式存储,查询速度比 MySQL 快几十倍,写入也不拖后腿。

很多人不知道的是,ClickHouse 还特别适合存 AI 的 embedding 向量。配合 ONNX 算余弦相似度,比 pgvector 还快。今天用 Docker 一键把 ClickHouse 跑起来。

准备工作

  • 一台 VPS(1 核 CPU、2 GB 内存即可,推荐 2核4G)
  • 已安装 Docker(没装的话跑 curl -fsSL https://get.docker.com | sudo sh)
  • sudo 权限

步骤

第一步:创建项目目录

mkdir -p ~/clickhouse && cd ~/clickhouse

第二步:写 docker-compose.yml

version: '3.8'

services:
  clickhouse:
    image: clickhouse/clickhouse-server:24.8
    container_name: clickhouse
    restart: unless-stopped
    environment:
      CLICKHOUSE_DB: ai_data
      CLICKHOUSE_USER: default
      CLICKHOUSE_PASSWORD: ck2024pass!
    volumes:
      - ch_data:/var/lib/clickhouse
      - ch_logs:/var/log/clickhouse-server
    ports:
      - "8123:8123"
      - "9000:9000"

volumes:
  ch_data:
  ch_logs:

把 CLICKHOUSE_PASSWORD 改成你自己的强密码。

第三步:启动服务

docker compose up -d

启动后等几秒,检查容器状态:

docker compose ps

看到 clickhouse 状态是 healthy 就说明跑起来了。

第四步:连接测试

用 HTTP 方式连一下:

curl -u default:ck2024pass! "http://localhost:8123/?format=JSON" --data "SELECT 1"

返回 {"data":[[1]],"meta":[{"name":"1","type":"UInt8"}],"rows":1} 就对了。

也可以用客户端连:

docker exec -it clickhouse clickhouse-client -s

进入后跑一句测试:

SELECT 1;

第五步:建一张测试表看看速度

CREATE DATABASE ai_data;

CREATE TABLE ai_embeddings (
    id UInt64,
    created_at DateTime DEFAULT now(),
    model_id String,
    embedding Float32 array(1536),
    content_text String,
    metadata JSON
) ENGINE = MergeTree()
ORDER BY (model_id, created_at)
SETTINGS index_granularity = 8192;

插入 100 万条随机向量测试性能:

INSERT INTO ai_embeddings
SELECT
    number as id,
    now() - INTERVAL (number % 86400) SECOND as created_at,
    ['text-embedding-3-small', 'bge-m3'][toInt64(number) % 2 + 1] as model_id,
    arrayMap(x -> rand() / 2147483647.0, range(1536)) as embedding,
    '这是第' || toString(number) || '条测试数据' as content_text,
    '{"source":"test","score":' || toString(rand() % 100) || '}' as metadata
FROM numbers(1000000);

查一下速度:

SELECT model_id, count() as cnt
FROM ai_embeddings
WHERE created_at > now() - INTERVAL 1 HOUR
GROUP BY model_id
ORDER BY cnt DESC;

几百万数据毫秒级返回,这就是 ClickHouse 的威力。

第六步:配置远程访问(可选)

ClickHouse 默认只监听本地。远程访问需要改配置:

docker exec -it clickhouse sed -i 's|<listen_host>::</listen_host>|<listen_host>0.0.0.0</listen_host>|' /etc/clickhouse-server/users.xml
docker exec -it clickhouse sed -i 's|<listen_host>::</listen_host>|<listen_host>0.0.0.0</listen_host>|' /etc/clickhouse-server/config.xml
docker compose restart clickhouse

确认防火墙开了 8123 和 9000 端口。

验证

三种方式验证是否成功:

# 1. HTTP 接口测试
curl -u default:ck2024pass! "http://localhost:8123/"
# 返回 OK

# 2. 容器健康检查
docker inspect --format='{{.State.Health.Status}}' clickhouse
# 返回 healthy

# 3. 查询数据量
docker exec -it clickhouse clickhouse-client -s --query "SELECT count() FROM ai_data.ai_embeddings"
# 返回 1000000

常见问题

Q: 磁盘空间不够怎么办?

ClickHouse 数据默认存在 /var/lib/clickhouse,也就是 Docker volume。想换到其他盘:

# 先停容器
docker compose down

# 修改 compose 文件,把 volume 路径改成大磁盘位置
# 例如:
# volumes:
#   - /data/clickhouse:/var/lib/clickhouse

Q: 内存占用太大,VPS 只有 1G 怎么办?

修改配置限制内存:

docker exec -it clickhouse mkdir -p /etc/clickhouse-server/conf.d
cat <<'EOF' | docker exec -i clickhouse tee /etc/clickhouse-server/conf.d/max_memory_usage.xml
<clickhouse>
    <profiles>
        <default>
            <max_memory_usage>500000000</max_memory_usage>
        </default>
    </profiles>
</clickhouse>
EOF
docker compose restart clickhouse

上面把单查询最大内存限制在 500MB,按你 VPS 的内存调整数字。

Q: 密码忘了怎么办?

# 进入容器
docker exec -it clickhouse clickhouse-client -s

# 修改密码(需要先进入容器)
docker exec -it clickhouse bash -c "clickhouse-client -s --query 'ALTER USER default IDENTIFIED BY '\''newpassword'\'''"

Q: 怎么备份数据?

# 备份
docker exec clickhouse clickhouse-client --query "BACKUP DATABASE ai_data TO Disk('backups', 'backup_$(date +%Y%m%d)')"

# 恢复
docker exec clickhouse clickhouse-client --query "RESTORE DATABASE ai_data FROM Disk('backups', 'backup_20260811')"

Q: 和 PostgreSQL 比,该用哪个?

  • MySQL 兼容、事务多 → PostgreSQL
  • 日志分析、时序数据、海量向量 → ClickHouse
  • 两者不冲突,很多生产环境同时用:PG 存业务数据,ClickHouse 做分析

小结

一行 docker-compose 搞定 ClickHouse,2G 内存就能跑。建表、插数据、查几百万行毫秒级返回,做 AI 向量存储或日志分析都够用。

你的 VPS 上打算用 ClickHouse 干什么?

这篇文章对你有帮助吗?