最近研究es,搭建环境的时候发现网上的很多文档大部分都是用来记录自己操作的,不过中间还是出现了很多问题,单独的文档还不能解决这些问题。我决定记录下来中间发生的问题,还有解决方案。还有在windows上docker-compose搭建的,原理一样不过不好操作中间很多问题可能和环境有关系,这里就不记录了,可能以后会记录,如果你在windows的docker上搭建的话,有问题也可以问,我这边已经踩过一次了。
centos7
docker 20.10.6
docker-compose 1.18.0
elasticsearch 8.2.0
kibana 8.2.0
这里看个人情况,我这边把配置文件的目录挂载一下,这样可以不用进入docker容器就能修改文件
mkdir -p elasticsearch/{config,data,plugins}
# 修改权限
chmod -R 777 elastiscsearch
docker-compose.yml
version: '3'
services:
elasticsearch:
image: elasticsearch:8.2.0
container_name: elasticsearch
environment:
- discovery.type=single-node
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
# 如果不挂载这里可以不写volumes
#volumes:
# - /root/elasticsearch/data:/usr/share/elasticsearch/data
# - /root/elasticsearch/config/elasticsearch.yml:/config/elasticsearch.yml
# - /root/elasticsearch/plugins:/usr/share/elasticsearch/plugins
#hostname: elasticsearch
restart: always
ports:
- 9200:9200
- 9300:9300
networks:
- elasticsearch
kibana:
image: kibana:8.2.0
container_name: kibana
environment:
- elasticsearch.hosts=http://elasticsearch:9200
#hostname: kibana
depends_on:
- elasticsearch
restart: always
ports:
- "5601:5601"
networks:
- elasticsearch
networks:
elasticsearch:
external: true
这里的配置文件都可以在容器中修改,如果挂载的话可以在外部修改 config目录下
cluster.name: "docker-cluster"
network.host: 0.0.0.0
xpack.security.enabled: true
xpack.security.http.ssl.enabled: false
xpack.license.self_generated.type: basic
这里的用户名密码查看下面的用户名密码 elastic用户名密码
server.host: "0.0.0.0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
monitoring.ui.container.elasticsearch.enabled: true
# 注意这里的用户名不能用elastic,使用之后会启动报错,看下面的错误2
elasticsearch.username: "kibana_system"
# 这里的密码是在启动时候配置的,如果忘记也没关系
elasticsearch.password: "8X1cLb+-mCx9twnqhHc9"
这里的elasticsearch.password忘记了的话,elastic重置密码
执行: docker-compose up -d
等待成功后命令 docker-compose ps

到这里已经执行完成了,后面需要验证成果的时候了
在页面打开连接 http://ip:9200

进入docker里面的容器
docker exec -it elasticsearch bash
# 创建内置的用户 elastic, kibana等用户都会创建,按照步骤操作即可
elasticsearch-setup-passwords interactive
在页面上输入即可进入

elasticsearch容器的bin目录下执行
elasticsearch-reset-password -u 需要重置密码的用户名

http://ip:5601
用户名用 elastic密码就是之前设置的,如果忘记了,用reset方法

打不开报错 server is not ready yet,这是因为 kibana没有启动成功,去后台查看错误日志
docker logs -f kibana
[2022-07-06T10:21:59.387+00:00][ERROR][elasticsearch-service] Unable to retrieve version information from Elasticsearch nodes. security_exception: [security_exception] Reason: missing authentication credentials for REST request [/_nodes?filter_path=nodes.*.version%2Cnodes.*.http.publish_address%2Cnodes.*.ip]
修改配置文件 elasticsearch.yml
cluster.name: "docker-cluster"
network.host: 0.0.0.0
# 这个需要打开
xpack.security.enabled: true
xpack.security.http.ssl.enabled: false
# basic
xpack.license.self_generated.type: basic
[2022-07-06T10:20:32.437+00:00][ERROR][elasticsearch-service] Unable to retrieve version information from Elasticsearch nodes. connect ECONNREFUSED 172.25.0.2:9200
FATAL CLI ERROR YAMLException: can not read a block mapping entry; a multiline key may not be an implicit key at line 12, column 23:
elasticsearch.username: elastic
kibana.yml中的配置文件 不能使用elastic用户连接

进入之后可以查询所有的数据,到这里基本完成了。
在elasticsearch容器中bin目录下执行
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.2.0/elasticsearch-analysis-ik-8.2.0.zip

from elasticsearch import Elasticsearch
es = Elasticsearch(hosts=('http://ip地址:9200'),request_timeout=1000,basic_auth=('elastic','密码'))
data = {
"name": "张三",
"age": "16",
"sex": "m",
"address": "beijing",
"create_time": "2022-7-07 10:34:47",
"modify_time": "2022-4-18 14:34:52"
}
response = es.index(index="test_index", body=data)
print(response)
执行结果
{
"_index": "test_index",
"_id": "tcuX1oEBYruXjblhr1rE",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
在kibana查看结果

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。问题1)我想知道rubyonrails是否有功能类似于primefaces的gem。我问的原因是如果您使用primefaces(http://www.primefaces.org/showcase-labs/ui/home.jsf),开发人员无需担心javascript或jquery的东西。据我所知,JSF是一个规范,基于规范的各种可用实现,prim
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
我的项目布局如下:-Project-css-import.scss-_sass/main.scssimport.scss的内容是:------@import"main.scss";我期望发生的是将main.scss导入到import.scss中,然后,import.scss将在生成的_site/目录中编译为import.css。相反,我收到以下错误Conversionerror:Therewasanerrorconverting'css/import.scss'.jekyll2.0.3|Error:InvalidCSSafter"-":expectednumberorfunction,
不知何故,我似乎无法获得包含我的聚合的响应...使用curl它按预期工作:HBZUMB01$curl-XPOST"http://localhost:9200/contents/_search"-d'{"size":0,"aggs":{"sport_count":{"value_count":{"field":"dwid"}}}}'我收到回复:{"took":4,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":90,"max_score":0.0,"hits":[]},"a
1.回顾.TransportServicepublicclassTransportServiceextendsAbstractLifecycleComponentTransportService:方法:1publicfinalTextendsTransportResponse>voidsendRequest(finalTransport.Connectionconnection,finalStringaction,finalTransportRequestrequest,finalTransportRequestOptionsoptions,TransportResponseHandlerT>
我想在AmazonOpsWorks上使用Ruby2.0,所以我正在尝试以下操作:选择自定义Recipe并将它们设置到我的forkhttps://github.com/aws/opsworks-cookbooks在此处更新所有版本号https://github.com/aws/opsworks-cookbooks/blob/master/ruby/attributes/ruby.rb到2.0值。虽然这似乎没有任何效果。自定义说明书是否会覆盖其内置的说明书?OpsWorks是否使用Recipe中的Ruby配方来进行基本的Ruby设置?同样的问题也适用于Nginx-我可以通过更改Recipe
我正在尝试使用docker运行一个Rails应用程序。通过github的sshurl安装的gem很少,如下所示:Gemfilegem'swagger-docs',:git=>'git@github.com:xyz/swagger-docs.git',:branch=>'my_branch'我在docker中添加了keys,它能够克隆所需的repo并从git安装gem。DockerfileRUNmkdir-p/root/.sshCOPY./id_rsa/root/.ssh/id_rsaRUNchmod700/root/.ssh/id_rsaRUNssh-keygen-f/root/.ss
我正在尝试将Ruby1.9.3应用程序升级到2.0,除了一个小问题外,一切似乎都很顺利。我写了一个模块,我将其包含在我的模型中以覆盖activerecorddestroy。它将现有的destroy方法别名为destroy!,然后覆盖destroy以更改记录上的deleted_at时间戳。仅当我升级到ruby2.0时,destroy!不再破坏记录,但其行为就像我的新覆盖方法一样。知道为什么会这样吗?下面是更相关的代码部分。完整要点here.defself.included(base)base.class_evaldoalias_method:destroy!,:destroyalia
我有一个Rails应用程序,现在设置了ElasticSearch和Tiregem以在模型上进行搜索,我想知道我应该如何设置我的应用程序以对模型中的某些索引进行模糊字符串匹配。我将我的模型设置为索引标题、描述等内容,但我想对其中一些进行模糊字符串匹配,但我不确定在何处进行此操作。如果您想发表评论,我将在下面包含我的代码!谢谢!在Controller中:defsearch@resource=Resource.search(params[:q],:page=>(params[:page]||1),:per_page=>15,load:true)end在模型中:classResource'Us
我在Heroku上构建了一个必须在Docker容器内运行的RoR应用程序。为此,我使用officialDockerfile.因为它在Heroku中很常见,所以我需要一些附加组件才能使这个应用程序完全运行。在生产中,变量DATABASE_URL在我的应用程序中可用。但是,如果我尝试其他一些使用环境变量(在我的例子中是Mailtrap)的加载项,变量不会在运行时复制到实例中。所以我的问题很简单:如何让docker实例在Heroku上执行时知道环境变量?您可能会问,我已经知道我们可以在docker-compose.yml中指定一个environment指令。我想避免这种情况,以便能够通过项目