You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用免费许可证在Docker中部署ElasticSearch 8.4适配Spring Boot

使用免费许可证在Docker部署Elasticsearch 8.4及Spring Boot代码适配

Docker部署Elasticsearch 8.4(免费Basic许可证)

Elasticsearch 8.x默认提供免费的Basic许可证,涵盖绝大多数核心搜索、索引功能,完全满足开发需求,无需付费。部署步骤如下:

  • 拉取官方8.4版本镜像:

    docker pull docker.elastic.co/elasticsearch/elasticsearch:8.4.3
    

    注:指定8.4标签会自动拉取该大版本下的最新小版本,直接用8.4.3可锁定具体版本

  • 启动单节点ES容器(开发环境推荐):

    docker run -d \
      --name es-8.4 \
      -p 9200:9200 \
      -p 9300:9300 \
      -e "discovery.type=single-node" \
      -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
      -v es-data-8.4:/usr/share/elasticsearch/data \
      docker.elastic.co/elasticsearch/elasticsearch:8.4.3
    

    参数说明:

    • discovery.type=single-node:单节点模式,跳过集群发现逻辑,适合开发场景
    • ES_JAVA_OPTS:设置JVM堆内存,根据主机配置调整,避免内存溢出
    • -v es-data-8.4:/usr/share/elasticsearch/data:挂载本地数据卷,持久化ES索引数据
  • 验证许可证状态:
    先通过容器日志获取自动生成的elastic用户初始密码:

    docker logs es-8.4 | grep "generated password"
    

    再进入容器执行命令查看许可证类型:

    docker exec -it es-8.4 curl -u elastic:你的密码 http://localhost:9200/_license
    

    返回结果中status为active、type为basic,即表示当前使用免费许可证。

  • (可选)开发环境禁用安全配置:
    如果觉得HTTPS和账号认证增加开发复杂度,可在启动命令中添加以下环境变量关闭安全:

    -e "xpack.security.enabled=false" \
    -e "xpack.security.http.ssl.enabled=false"
    

Spring Boot代码适配操作

1. 依赖版本对齐

确保项目依赖的Elasticsearch Java Client版本与服务器版本完全一致,以Maven为例,在pom.xml中添加:

<dependency>
    <groupId>co.elastic.clients</groupId>
    <artifactId>elasticsearch-java</artifactId>
    <version>8.4.3</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.4</version>
</dependency>

2. 连接配置

在application.yml中配置ES连接信息:

  • 禁用安全时的配置:
elasticsearch:
  uris: http://localhost:9200
  • 启用默认安全(HTTPS+账号密码)时的配置:
elasticsearch:
  uris: https://localhost:9200
  username: elastic
  password: 你的elastic用户密码
  ssl:
    verification-mode: none # 开发环境跳过SSL证书验证,生产环境需配置信任证书

3. 客户端实例配置

创建配置类生成ElasticsearchClient实例,供业务代码调用:

import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.json.jackson.JacksonJsonpMapper;
import co.elastic.clients.transport.ElasticsearchTransport;
import co.elastic.clients.transport.rest_client.RestClientTransport;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.elasticsearch.client.RestClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ElasticsearchConfig {

    @Value("${elasticsearch.uris}")
    private String esUri;

    @Value("${elasticsearch.username:}")
    private String username;

    @Value("${elasticsearch.password:}")
    private String password;

    @Value("${elasticsearch.ssl.verification-mode:none}")
    private String sslVerificationMode;

    @Bean
    public ElasticsearchClient elasticsearchClient() {
        RestClient.Builder builder = RestClient.builder(HttpHost.create(esUri));

        // 配置账号密码认证
        if (!username.isEmpty() && !password.isEmpty()) {
            CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
            credentialsProvider.setCredentials(AuthScope.ANY,
                    new UsernamePasswordCredentials(username, password));
            builder.setHttpClientConfigCallback(httpClientBuilder ->
                    httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider));
        }

        // 配置SSL验证策略
        if ("none".equals(sslVerificationMode)) {
            builder.setHttpClientConfigCallback(httpClientBuilder ->
                    httpClientBuilder.setSSLHostnameVerifier((hostname, session) -> true));
        }

        RestClient restClient = builder.build();
        ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
        return new ElasticsearchClient(transport);
    }
}

4. 规避付费功能

Basic许可证不支持跨集群搜索、机器学习、高级安全管控等付费功能,代码中不要调用这类API,否则会触发许可证验证错误。核心的索引CRUD、全文搜索、聚合分析等功能均可正常使用。

内容的提问来源于stack exchange,提问作者Saverio Mirko Viola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:10:49