--- title: "05-如何安装项目需要的中间件环境" created: 2026-05-18 aliases: - 如何安装项目需要的中间件环境 tags: - 项目 --- # 如何安装项目需要的中间件环境 项目中涉及到的中间件有 Mysql、PostgresSql、Redis、MinIO、Zookeeper、Kafka、Elasticsearch、Kibana,本文介绍如何在本地通过 Docker 安装这些中间件。 ## 安装 Mysql ### 下载镜像 ```bash docker pull mysql:5.7 ``` ### 创建数据卷 ```bash docker volume create mysql57-data ``` ### 启动容器 ```bash 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 镜像。 ### 下载镜像 ```bash docker pull pgvector/pgvector:pg17 ``` ### 创建数据卷 ```bash docker volume create pgvector-data ``` ### 启动容器 ```bash 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` 数据库验证扩展是否可用: ```bash docker exec -it pgvector psql -U postgres -d postgres ``` 执行下面的 SQL: ```sql CREATE EXTENSION IF NOT EXISTS vector; SELECT extname, extversion FROM pg_extension WHERE extname = 'vector'; ``` 如果能查到 `vector` 扩展版本,说明 PGVector 安装成功 ## 安装 Redis ### 下载镜像 ```bash docker pull redis:6.0.8 ``` ### 启动容器 ```bash 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 用来做对象存储,项目中的原始文件和解析后的文件内容都可以落到这里。 ### 下载镜像 ```bash docker pull minio/minio:RELEASE.2024-01-01T16-36-33Z ``` ### 创建数据卷 ```bash docker volume create minio-data ``` ### 启动容器 ```bash 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 控制台。 ![[Fu98VfK3tDwQYDm8x14aasKwcvSb-6413152c.png]] ## 安装 Zookeeper ### 下载镜像 ```bash docker search zookeeper docker pull zookeeper ``` ### 配置文件 新建文件夹 ```bash mkdir -p /usr/local/zookeeper/conf ``` 将zookeeper的配置文件放入此文件夹内 ### 配置文件 文件名zoo.cfg ```text # 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 容器可以通信 ```bash docker network create kafka-net ``` ### 启动容器 ```bash 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 ### 下载镜像 ```bash docker search wurstmeister/kafka docker pull wurstmeister/kafka ``` ### 启动容器 ```bash 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 创建一个网络 ### 建立容器间的通信 ```bash docker network create elk ``` ### 下载镜像 ```bash docker pull elasticsearch:8.5.2 ``` ### 启动容器 ```bash 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,可设置密码 ### 设置密码 ```bash # 进入容器 docker exec -it es /bin/bash # 执行命令配置密码 ./bin/elasticsearch-setup-passwords interactive ``` ![[FjBuT8BAft4xLfCccysiis48_kv4-81f4cfc0.png]] 设置成功后,输入地址 ip:9200,登入密码看到如下页面说明安装成功 ![[FsswkwsERa-fto5DxUmOEnt2Ugkh-ed52906c.png]] ### 安装IK分词器 IK分词器是Elasticsearch中常用的中文分词插件,关键词搜索功能需要用到 #### 进入容器安装插件 ```bash # 进入ES容器 docker exec -it es /bin/bash # 使用插件管理器安装IK分词器(版本需与ES版本一致) ./bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/8.5.2 # 退出容器 exit ``` #### 重启容器使插件生效 ```bash docker restart es ``` #### 验证安装 ```bash # 查看已安装的插件 docker exec -it es ./bin/elasticsearch-plugin list ``` 能看到 `analysis-ik` 说明安装成功 #### 测试分词效果 ```bash # 测试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的版本一致 ### 下载镜像 ```bash docker pull kibana:8.5.2 ``` ### 启动容器 ```bash 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**](http://es:9200/) 指定ElasticSearch地址,docker可以直接用容器名访问 - **-e ELASTICSEARCH\_USERNAME="kibana\_system"** 指定ElasticSearch账户 - **-e ELASTICSEARCH\_PASSWORD="密码"** 指定ElasticSearch账户密码 - **I18N\_LOCALE=zh-CN** 开启 kibana 的汉化 启动kibana后,输入地址 ip:5601,出现如下页面说明启动成功 ![[FrRvwG8LHbAo0lqNn_jtXrfNi2a2-b0fd85cd.png]] ## 安装 Neo4j ### 下载镜像 ```bash docker pull neo4j:5.22-community ``` ### 启动容器 ```bash 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查询。 ![[2-Learning/05-项目/08-企业级项目深读/01-SuperAgent/07-项目源码深读/03-项目启动讲解/assets/Fv3XsAHkkU1QbfxGqpffwXGBQCs4-f71d287d.png]] --- **企业级项目导航**:⬅️ [[04-后端项目部署启动|04-后端项目部署启动]] | 05-如何安装项目需要的中间件环境 | ➡️ [[06-申请AI模型调用|06-申请AI模型调用]]