跳到主要内容

如何安装项目需要的中间件环境

项目中涉及到的中间件有 Mysql、PostgresSql、Redis、MinIO、Zookeeper、Kafka、Elasticsearch、Kibana,本文介绍如何在本地通过 Docker 安装这些中间件。

安装 Mysql

下载镜像

docker pull mysql:5.7

创建数据卷

docker volume create mysql57-data

启动容器

docker run -d \
--name mysql57 \
-p 3306:3306 \
--restart unless-stopped \
-e MYSQL_ROOT_PASSWORD='设置你的密码' \
-e MYSQL_ROOT_HOST='%' \
-e TZ='Asia/Shanghai' \
-v mysql57-data:/var/lib/mysql \
mysql:5.7 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
  • --name mysql57 容器名为mysql
  • -p 3306:3306 映射宿主机和容器的端口号
  • -e MYSQL_ROOT_PASSWORD='设置你的密码' 要设置你的数据库密码
  • -v mysql57-data:/var/lib/mysql 将Mysql的数据卷持久化到宿主机

安装 PostgresSql

项目里的向量数据使用的是 PostgreSQL + PGVector,所以这里推荐直接使用已经内置 vector 扩展的 Docker 镜像。

下载镜像

docker pull pgvector/pgvector:pg17

创建数据卷

docker volume create pgvector-data

启动容器

docker run -d \
--name pgvector \
-p 5432:5432 \
--restart unless-stopped \
-e POSTGRES_USER='postgres' \
-e POSTGRES_PASSWORD='设置你的密码' \
-e TZ='Asia/Shanghai' \
-v pgvector-data:/var/lib/postgresql/data \
pgvector/pgvector:pg17
  • --name pgvector 容器名为 pgvector
  • -p 5432:5432 映射宿主机和容器的 PostgreSQL 端口
  • -e POSTGRES_USER='postgres' 设置 PostgreSQL 登录用户名
  • -e POSTGRES_PASSWORD='设置你的密码' 设置 PostgreSQL 登录密码
  • -v pgvector-data:/var/lib/postgresql/data 将 PostgresSql 数据卷持久化到宿主机

初始化 PGVector 扩展

容器启动成功后,可以先进入默认的 postgres 数据库验证扩展是否可用:

docker exec -it pgvector psql -U postgres -d postgres

执行下面的 SQL:

CREATE EXTENSION IF NOT EXISTS vector;
SELECT extname, extversion FROM pg_extension WHERE extname = 'vector';

如果能查到 vector 扩展版本,说明 PGVector 安装成功

安装 Redis

下载镜像

docker pull redis:6.0.8

启动容器

docker run -d \
--name redis \
-p 0.0.0.0:6379:6379 \
--restart unless-stopped \
redis:6.0.8 \
redis-server --requirepass "修改成你自己的密码" --bind 0.0.0.0

安装 MinIO

MinIO 用来做对象存储,项目中的原始文件和解析后的文件内容都可以落到这里。

下载镜像

docker pull minio/minio:RELEASE.2024-01-01T16-36-33Z

创建数据卷

docker volume create minio-data

启动容器

docker run -d \
--name minio \
-p 9000:9000 \
-p 9001:9001 \
--restart unless-stopped \
-e MINIO_ROOT_USER='设置你的账号' \
-e MINIO_ROOT_PASSWORD='设置你的密码' \
-v minio-data:/data \
minio/minio:RELEASE.2024-01-01T16-36-33Z \
server /data --console-address ":9001"
  • -p 9000:9000 MinIO 的 API 端口,项目连接对象存储时使用这个端口
  • -p 9001:9001 MinIO 的控制台端口,浏览器登录管理后台时使用这个端口
  • -e MINIO_ROOT_USER='设置你的账号' 设置 MinIO 登录账号
  • -e MINIO_ROOT_PASSWORD='设置你的密码' 设置 MinIO 登录密码
  • -v minio-data:/data 将 MinIO 的数据卷持久化到宿主机

登录控制台

启动成功后,在浏览器访问 http://ip:9001,输入刚才设置的账号和密码登录 MinIO 控制台。

安装 Zookeeper

下载镜像

docker search zookeeper
docker pull zookeeper

配置文件

新建文件夹

mkdir -p /usr/local/zookeeper/conf

将zookeeper的配置文件放入此文件夹内

配置文件 文件名zoo.cfg

# The number of  milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true

创建网络

让 zookeeper 和 kafka 容器可以通信

docker network create kafka-net

启动容器

docker run -d \
--name zookeeper \
--network kafka-net \
--privileged=true \
-p 2181:2181 \
--restart=always \
-v /usr/local/zookeeper/data:/data \
-v /usr/local/zookeeper/conf:/conf \
-v /usr/local/zookeeper/logs:/datalog \
zookeeper

安装 Kafka

下载镜像

docker search wurstmeister/kafka
docker pull wurstmeister/kafka

启动容器

docker run -d --name kafka \
--network kafka-net \
-p 9092:9092 \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://本地ip:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka
  • -e KAFKA_ADVERTISED_LISTENERS Kafka 的一个环境变量,用于指定 Kafka 将如何通告客户端它在外部可访问的地址。如果是云服务器,则得是公网ip,因为客户端连接的kafka地址要和这个一样

安装 ElasticSearch

为了和后续的Kibana相通信,需要先用 docker 创建一个网络

建立容器间的通信

docker network create elk

下载镜像

docker pull elasticsearch:8.5.2

启动容器

docker run -d --name es \
--net elk \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms768m -Xmx768m" \
-e "xpack.security.http.ssl.enabled=false" \
-e "xpack.security.enrollment.enabled=true" \
elasticsearch:8.5.2
  • -p (小写)映射端口号,主机端口:容器端口
  • -P(大写)随机为容器指定端口号
  • –name 指定容器别名
  • –net 连接指定网络
  • -e 指定启动容器时的环境变量
  • -d 后台运行容器
  • xpack.security.http.ssl.enabled=false 关闭https访问
  • xpack.security.enrollment.enabled=true 设置为true,可设置密码

设置密码

# 进入容器
docker exec -it es /bin/bash
# 执行命令配置密码
./bin/elasticsearch-setup-passwords interactive

设置成功后,输入地址 ip:9200,登入密码看到如下页面说明安装成功

安装IK分词器

IK分词器是Elasticsearch中常用的中文分词插件,关键词搜索功能需要用到

进入容器安装插件

# 进入ES容器
docker exec -it es /bin/bash

# 使用插件管理器安装IK分词器(版本需与ES版本一致)
./bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.5.2

# 退出容器
exit

重启容器使插件生效

docker restart es

验证安装

# 查看已安装的插件
docker exec -it es ./bin/elasticsearch-plugin list

能看到 analysis-ik 说明安装成功

测试分词效果

# 测试ik_smart分词(粗粒度,适合搜索)
curl -X POST "localhost:9200/_analyze" -H 'Content-Type: application/json' -d'
{
"analyzer": "ik_smart",
"text": "中华人民共和国"
}'

# 测试ik_max_word分词(细粒度,适合索引)
curl -X POST "localhost:9200/_analyze" -H 'Content-Type: application/json' -d'
{
"analyzer": "ik_max_word",
"text": "中华人民共和国"
}'

安装 Kibana

这里Kibana的版本最好和ElasticSearch的版本一致

下载镜像

docker pull kibana:8.5.2

启动容器

docker run -d --name kibana \
--net elk \
-p 5601:5601 \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
-e ELASTICSEARCH_USERNAME="kibana_system" \
-e ELASTICSEARCH_PASSWORD="密码" \
-e "I18N_LOCALE=zh-CN" \
kibana:8.5.2
  • -p 5601:5601 映射端口号
  • -e ELASTICSEARCH_HOSTS=http://es:9200 指定ElasticSearch地址,docker可以直接用容器名访问
  • -e ELASTICSEARCH_USERNAME="kibana_system" 指定ElasticSearch账户
  • -e ELASTICSEARCH_PASSWORD="密码" 指定ElasticSearch账户密码
  • I18N_LOCALE=zh-CN 开启 kibana 的汉化

启动kibana后,输入地址 ip:5601,出现如下页面说明启动成功

安装 Neo4j

下载镜像

docker pull neo4j:5.22-community

启动容器

docker run -d \
--name neo4j \
-p 7474:7474 \
-p 7687:7687 \
-e NEO4J_AUTH=neo4j/your_password \
-e NEO4J_PLUGINS='["apoc"]' \
-v neo4j_data:/data \
neo4j:5.22-community

启动后访问 http://localhost:7474 可以打开Neo4j的Web管理界面,直接在里面写Cypher查询。

🎁优惠