痘痘飞 2024-02-02 16:43 采纳率: 50%
浏览 5
已结题

如何在NW.js项目中捆绑ElasticSearch?

我有两个问题想问。

我现在想将一个ElasticSearch的完整包捆绑到NW.js应用中,在启动应用的时候同时启动ElasticSearch,实现在nwjs应用中离线集成es实现全文检索功能。

我尝试过一些办法,比如在node-main中调用一个js,利用node原生API的spawn命令启动本地文件: elasticSearch/bin/elasticsearch,但是启动的时候会提示一连串错误:

img

img

img

img

首先第一个问题就是:这些错误弹窗能不能忽略掉?

在我一个接一个的点取消之后,es似乎是正常启动了,因为我可以在浏览器访问 http://localhost:9200/ 。注意此时是没有身份认证的模式,可以正常使用。
但是当我想启用身份认证的时候我就有点迷糊了,不知道应该怎么设置elastic的初始密码。

discovery.type: single-node
network.host: 0.0.0.0
xpack.security.enabled: true
xpack.security.enrollment.enabled: true
xpack.security.http.ssl.enabled: false

这个是我开启身份认证的elasticsearch.yml配置文件,应用启动后权限拦截是打开了的,访问 http://localhost:9200/ 提示我输入密码,不输入的话会报错401。

我的想法是通过命令行执行elasticsearch-setup-passwords或者是 elasticsearch-reset-password的方式设置密码,但是命令行的方式都需要交互,也就是需要手动输入密码。
所以我的第二个问题是:如何对elasticSearch的密码进行初始化?

  • 写回答

3条回答 默认 最新

  • 叫兽-郭老师 Java领域新星创作者 2024-02-02 16:45
    关注

    参考通义千问和郭老师的小迷弟雅思莫了-编写提供,主要是为了帮助您快速解决问题,如下回答,您可以参考下,如有问题,评论区留言。

    对于您的两个问题,我会分别进行解答:

    问题一:关于NW.js中Elasticsearch启动错误弹窗 在NW.js环境中启动Elasticsearch时出现的错误弹窗可能与环境变量、权限或其他依赖有关。尽管您可以忽略这些错误并继续使用(如您所述,Elasticsearch似乎已成功启动),但这并不是一个理想的解决方案。为了确保稳定运行,建议您仔细查看错误信息,确保所有必要的Java环境和系统依赖都已正确安装,并且配置文件中的路径对NW.js应用来说是可访问的。

    问题二:如何初始化Elasticsearch的密码 由于命令行交互式输入密码的方式在非交互环境下无法直接使用,您需要通过编程方式来实现自动设置密码。Elasticsearch提供了API来进行密码初始化操作。具体步骤如下:

    1. 首先,确保xpack.security.enabled: true,同时关闭HTTP SSL(生产环境应启用)。

    2. 启动Elasticsearch后,可以使用Elasticsearch的内部API来设置密码。例如,使用curl或者Node.js的http模块向/_security/user/elastic/_password发送POST请求以设置用户“elastic”的密码:

    # 使用curl示例:
    curl -X POST -u "elastic:" --insecure "http://localhost:9200/_security/user/elastic/_password" -H 'Content-Type: application/json' -d'
    {
      "password": "your_password"
    }'
    

    在Node.js中,可以通过以下代码片段实现:

    const http = require('http');
    
    const options = {
      hostname: 'localhost',
      port: 9200,
      path: '/_security/user/elastic/_password',
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
    };
    
    const req = http.request(options, (res) => {
      // 处理响应...
    });
    
    req.on('error', (error) => {
      console.error(error);
    });
    
    req.write(JSON.stringify({ password: 'your_password' }));
    req.end();
    

    请注意,这种方式要求在调用API时Elasticsearch已经启动并且启用了无认证模式以便设置初始密码。在实际项目中,您可能需要在首次启动时检查是否存在密码,如果没有,则通过API创建默认用户和密码,然后重启Elasticsearch以启用安全认证。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月30日
  • 创建了问题 2月2日

悬赏问题

  • ¥15 使用STM32F103C6微控制器设计两个从0到F计数的一位数计数器(数字),同时,有一个控制按钮,可以选择哪个计数器工作:需要两个七段显示器和一个按钮。
  • ¥15 在yolo1到yolo11网络模型中,具体有哪些模型可以用作图像分类?
  • ¥15 AD9910输出波形向上偏移,波谷不为0V
  • ¥15 淘宝自动下单XPath自动点击插件无法点击特定<span>元素,如何解决?
  • ¥15 曙光1620-g30服务器安装硬盘后 看不到硬盘
  • ¥15 抖音直播广场scheme
  • ¥15 为什么我明明有这个文件调试器还显示错误?
  • ¥15 软件工程用例图的建立(相关搜索:软件工程用例图|画图)
  • ¥15 如何在arcgis中导出拓扑关系表
  • ¥15 处理数据集文本挖掘代码