如何使用免费许可证在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
相关产品推荐
相关产品推荐

