2月27

Windows上安装Elasticsearch

23:28运营管理  From: 本站原创
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。

Download Elasticsearch

https://www.elastic.co/cn/downloads/elasticsearch


因为这里本机已经安装运行,为了演示从零开始,我们在Windows沙盒中演示,Win10操作系统的沙盒http://www.javacui.com/tool/660.html 。
因为沙盒开始是一个纯净的系统,所以需要安装ZIP工具,安装文本编辑工具方便修改配置文件。


这里下载了elasticsearch-8.2.2-windows-x86_64,可以根据网站提示下载最新版本,虽然ES依赖JDK,但是ES安装文件内置了JDK,因为纯净的系统上无需安装再次安装JDK,直接运行bin下elasticsearch.bat即可。

初次启动,显示的配置信息,一定要保存下来,以备使用。


访问https://127.0.0.1:9200,注意是HTTPS不是HTTP,用户名密码刚才控制台已经打印出来了。


证明安装成功。


问题1:内存直接占满

此时你打开任务管理器,发现一个问题,ES启动后,占据了沙盒的全部内存。我的本机是32G的,启动也是直接打满,导致系统卡爆。

因此我们需要配置启动内存,配置文件conf/jvm.options


################################################################
## IMPORTANT: JVM heap size
################################################################
##
## The heap size is automatically configured by Elasticsearch
## based on the available memory in your system and the roles
## each node is configured to fulfill. If specifying heap is
## required, it should be done through a file in jvm.options.d,
## which should be named with .options suffix, and the min and
## max should be set to the same value. For example, to set the
## heap to 4 GB, create a new file in the jvm.options.d
## directory containing these lines:
##
-Xms1g
-Xmx1g
在这里修改为合适的内存,这里修改为1G,沙盒全部内存是4G,合理配置即可。


问题2:二次启动报错

修改配置文件后,再次启动,这时不会再次打印第一次启动时的配置信息了。但是报错了


[2022-06-16T10:40:55,562][ERROR][o.e.i.g.GeoIpDownloader  ] [06A8DD4C-A847-4] exception during geoip databases update
org.elasticsearch.ElasticsearchException: not all primary shards of [.geoip_databases] index are active
        at org.elasticsearch.ingest.geoip.GeoIpDownloader.updateDatabases(GeoIpDownloader.java:135) ~[ingest-geoip-8.2.2.jar:8.2.2]
        at org.elasticsearch.ingest.geoip.GeoIpDownloader.runDownloader(GeoIpDownloader.java:275) [ingest-geoip-8.2.2.jar:8.2.2]
        at org.elasticsearch.ingest.geoip.GeoIpDownloaderTaskExecutor.nodeOperation(GeoIpDownloaderTaskExecutor.java:102) [ingest-geoip-8.2.2.jar:8.2.2]
        at org.elasticsearch.ingest.geoip.GeoIpDownloaderTaskExecutor.nodeOperation(GeoIpDownloaderTaskExecutor.java:48) [ingest-geoip-8.2.2.jar:8.2.2]
        at org.elasticsearch.persistent.NodePersistentTasksExecutor$1.doRun(NodePersistentTasksExecutor.java:42) [elasticsearch-8.2.2.jar:8.2.2]
        at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:773) [elasticsearch-8.2.2.jar:8.2.2]
        at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26) [elasticsearch-8.2.2.jar:8.2.2]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) [?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [?:?]
        at java.lang.Thread.run(Thread.java:833) [?:?]
因为他启动时会去更新地图的一些数据库,这里直接禁掉即可,用到时再说,配置文件conf/elasticsearch.yml,增加配置

ingest.geoip.downloader.enabled: false


问题3:本地测试不想用用户密码和SSL

本身ES服务器也不会对外开放,增加用户密码和SSL对于初学来说,徒增不必要的麻烦,这里直接干掉,还是那句话,用到再说。

配置文件conf/elasticsearch.yml,修改配置

# Enable security features
xpack.security.enabled: false

xpack.security.enrollment.enabled: false

# Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
xpack.security.http.ssl:
  enabled: false
  keystore.path: certs/http.p12

# Enable encryption and mutual authentication between cluster nodes
xpack.security.transport.ssl:
  enabled: false
  verification_mode: certificate
  keystore.path: certs/transport.p12
  truststore.path: certs/transport.p12
# Create a new cluster with the current node only
# Additional nodes can still join the cluster later
cluster.initial_master_nodes: ["06A8DD4C-A847-4"]

# Allow HTTP API connections from anywhere
# Connections are encrypted and require user authentication
http.host: 0.0.0.0

# Allow other nodes to join the cluster from anywhere
# Connections are encrypted and mutually authenticated
#transport.host: 0.0.0.0
原来都是true,这里都改成了false,前面是要求用户登录的,后面是要求SSL的,没必要,干掉。

再次启动访问http://127.0.0.1:9200 ,可以直接打开使用。

2月22

nginx目录穿越漏洞

10:59Web开发  From: 本站原创
漏洞原理
nginx在配置别名(Alias)的时候忘记加/,则可能实现目录穿越
配置中设置目录别名时/files配置为/home/的别名,那么当我们访问
/files…/时,nginx实际处理的路径时/home/…/,从而实现了穿越目录

location /file{
autoindex on;
alias /home/;
}

所以修复这个漏洞也就是将上面的/file/闭合成这样,就不支持../这些回上一层目录的操作了。
1月12
MinIO 服务器配置文件(config.json)存储在 --config-dir 指定的配置目录中,--config-dir 默认值为 ${HOME}/.minio(笔者的目录为 C:\Users\Administrator\.minio)。

但是从 RELEASE.2018-08-18T03-49-57Z 之后的版本开始,配置文件已迁移到存储数据的 .minio.sys/config 目录(存储后端是启动服务器时传递给 MinIO 服务器的目录)。如果使用如下命令启动 MinIO 服务:


minio.exe server D:/tmp/data
则配置文件位于 D:\tmp\data\.minio.sys\config 目录中。

注意:你可以使用 mc -h 命令查看当前 MinIO 的版本信息,如下:


D:\server\minio>mc -h
NAME:
  mc - MinIO Client for cloud storage and filesystems.
...
VERSION:
  RELEASE.2021-06-13T17-48-22Z
您可以使用 --config-dir 指定现有配置的位置,MinIO 会自动将 config.json 迁移到您的后端存储。您当前 --config-dir 指定的 config.json 配置文件将在成功迁移后重命名为 config.json.deprecated。

如果你的配置文件位于 C:\Users\Administrator\.minio\config.json,MinIO 会自动将 config.json 中的配置迁移到 D:\tmp\data\.minio.sys\config\config.json 文件,然后将 C:\Users\Administrator\.minio\config.json 重命名为 C:\Users\Administrator\.minio\config.json.deprecated。

此外 --config-dir 现在是一个遗留选项,计划在将来删除,因此请相应地更新您的本地启动和 ansible 脚本。使用如下命令去启动 MinIO 服务:

minio.exe server D:\tmp\data
上面命令,将创建的存储桶以及存储桶中的对象放到 D:\tmp\data 目录,并且配置信息均位于 D:\tmp\data\.minio.sys 目录。

1月12

Linux安装MinIO

13:06运维管理  From: 本站原创
第一步,进入/opt 目录,创建minio文件夹
cd /opt
mkdir minio
第二步,wget下载安装包:
https://dl.minio.io/server/minio/release/linux-amd64/minio

第三步,进入minio文件夹创建log文件
cd /minio
touch minio.log


第四步,赋予minio文件执行权限

chmod 777 minio
第五步,启动minio
./minio server /opt/minio/data (/opt/minio/data 为你存放静态文件的目录)


这个时候我们看下面爆红的提示,说的是:
警告:控制台端点正在侦听动态端口 (39175),请使用 --console-address “:PORT” 选择静态端口。
警告:检测到默认凭据“minioadmin:minioadmin”,我们建议您使用“MINIO_ROOT_USER”和“MINIO_ROOT_PASSWORD”环境变量更改这些值

所以我们按照提示来:


export MINIO_ROOT_USER=fileadmin
export MINIO_ROOT_PASSWORD=fileadmin
第六步,重新启动minio
./minio server /opt/minio/data (/opt/minio/data 为你存放静态文件的目录)
第七步,设置环境变量
vim /etc/profile
添加

# set minio environment
export MINIO_ROOT_USER=fileadmin
export MINIO_ROOT_PASSWORD=fileadmin
生效:source /etc/profile;

第 七步,设置minio后台启动(指定端口)
vim start.sh

nohup /opt/minio/minio server  /opt/minio/data --console-address ":35555" > /opt/minio/minio.log 2>&1 &
('2>&1’表示现在标准输出直接输入到/opt/minio/minio.log 中,而2>&1是将标准错误重定向到标准输出,‘nohup’和末尾’&'组合使用表示脱离终端后继续执行)
1月10
系统中对密码复杂度的校验是比较常见的工作,往往我们可以通过正则来实现,或者基于规则而实现特定的算法来满足需求。

下面我来介绍两个开源的解决方案。

1.使用vt-password来实现密码复杂度的检查
VT 密码是一个 Java 库,用于验证密码是否符合定义的规则集。
该库包括以下规则实现:

AllowedCharacterRule - 密码是否只包含特定的字符列表
AlphabeticalSequenceRule - 密码是否包含字母顺序
CharacterCharacteristicRule - 密码是否包含所需的字符类型组合
DictionaryRule - 密码是否与字典中的单词匹配
DictionarySubstringRule - 密码是否包含字典中的单词
DigitCharacterRule - 密码是否包含数字
HistoryRule - 密码是否与以前的密码匹配,支持散列
IllegalCharacterRule - 密码是否包含非法字符
LengthRule - 是一定长度的密码
LowercaseCharacterRule - 密码是否包含小写字符
NonAlphanumericCharacterRule - 密码是否包含非字母数字字符
NumericalSequenceRule - 密码是否包含数字序列
RegexRule - 密码是否与正则表达式匹配
RepeatCharacterRegexRule - 密码是否包含重复字符
SequenceRule - 密码是否包含键盘序列
SourceRule - 密码是否与来自另一个系统或来源的密码匹配
QwertySequenceRule - 密码是否包含 QWERTY 键盘序列
UppercaseCharacterRule - 密码是否包含大写字符
UsernameRule - 密码是否包含用户名
WhitespaceRule - 密码是否包含空格
如果你想在你的Maven构建中使用这个项目,请在你的pom.xml 中包含以下内容:

<dependency>
  <groupId>edu.vt.middleware</groupId>
  <artifactId>vt-password</artifactId>
  <version>3.1.2</version>
</dependency>
12月12
让bat批处理以管理员权限运行的实现方法
有的电脑是非管理员登录,运行程序时,需要提示是否运行运行。解决方法如下:
在批处理开头加上:
适用于无参数

%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c "^&chr(34)^&"%~0"^&chr(34)^&" ::","%cd%","runas",1)(window.close)&&exit

适用于有参数

%2 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c "^&chr(34)^&"%~0"^&chr(34)^&" "^&chr(34)^&"%~1"^&chr(34)^&" ::","%cd%","runas",1)(window.close)&&exit

更多参数的以此类推
运行批处理时多加一个参数::,这句就不会执行
为了兼容8.3短路径,可把%~0等换成%~s0等
理论上是没问题,但启动路径有时不可靠,之后可能还要pushd或cd /d

bat文件以管理员权限运行的几种方式

1、创建bat快捷方式,然后右键快捷方式-->properties-->advanced-->Run as administrator。
2、下载bat转成exe工具,将bat转成exe,然后右键exe-->properties-->Compatibility-->Run as administrator。
3、以管理员权限运行cmd,然后dos框中运行相应的bat。
12月9
想更改hosts文件添加域名与地址ip、由于hosts文件受保护并且是只读属性。因此需要先赋予权限,并取消只读属性才能正常写入
   /E            编辑 ACL 而不替换。
   /G    赋予指定用户访问权限。
   F    完全权限。
点击在新窗口中浏览此图片
Administrators、SYSTEM、Users(是windows用户组需要什么加什么)

attrib 是控制文件属性的

  + 添加文件属性

        -  删除文件属性

        R 只读文件属性

        A 存档文件属性

        S 系统文件属性

        H 隐藏文件属性

         I 无连接属性

@echo
@echo 127.0.0.1 .heckjj.com >>E:hosts(这是我们要写入的内容)

虽然脚本比较笨拙,但是亲测有效,若是找不到好的方法可以选择试一下O(∩_∩)O
======================================================================================
1、新建记事本输入一下内容
bat脚本代码如下:

set HOSTS=C:\Windows\System32\drivers\etc\hosts
echo Y|cacls %HOSTS% /E /G Administrators:F
echo Y|cacls %HOSTS% /E /G SYSTEM:F
echo Y|cacls %HOSTS% /E /G Users:F

attrib -r -h %HOSTS%

@echo
@echo.>>%HOSTS%


@echo 127.0.0.1 heckjj.com >>%HOSTS%

attrib +r +h %HOSTS%

title 刷新本地dns缓存并退出
echo 查看修改后的hosts文件内容,1秒后退出!
type "%HOSTS%" |findstr /v "^#"|findstr "[0-9]"
ping -n 1 127.0.0.1>nul
ipconfig /flushdns
echo 刷新本地缓存成功,即将退出!
ping -n 2 127.0.0.1>nul
echo.
exit
2、将记事本后缀名改为.bat格式的文件,然后双击即可完成修改。
12月9
公司有个项目不能解析内网所以需要对本地hosts文件进行修改,添加一条本地域名解析记录,如果让客户去操作,很容易破坏掉原先的hosts文件,用户只需要以管理员权限运行即可,如果记录存在则替换掉。
由于办公电脑都使用信创麒麟的系统,所以最好做一个deb的安装包,通过程序写修改的,在信创麒麟的系统电脑下载安装即可执行。
下面是实现逻辑,要将java打包成deb安装包就需要使用jdeb的maven插件来打包。
我使用的是1.8的版本,具体配置就不贴上来了,需要的联系我。
               <artifactId>jdeb</artifactId>
                <groupId>org.vafer</groupId>
                <version>1.8</version>


package com.nine.rivers.jdeb;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IORuntimeException;
import cn.hutool.core.util.StrUtil;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
* @Description 不破坏原有hosts文件,支持新host绑定或修改支持host解绑
* @Date 2022/12/9 16:42
* @Author heck
**/
public class HostUtil {

    public static final String LINUX = "linux";
    public static final String LINUX_HOSTS_PATH = "/etc/hosts";
    public static final String WINDIR = "windir";
    public static final String WIN_HOSTS_PATH = "\\system32\\drivers\\etc\\hosts";
    public static final String OS_NAME = "os.name";

    /**
     * 获取host文件路径
     *
     * @return
     */
    public static String getHostFile() {
        String fileName = null;
        // 判断系统
        if (LINUX.equalsIgnoreCase(System.getProperty(OS_NAME))) {
            fileName = LINUX_HOSTS_PATH;
        } else {
            fileName = System.getenv(WINDIR) + WIN_HOSTS_PATH;
        }
        return fileName;
    }
12月7
点击在新窗口中浏览此图片
使用Navicat连接SQLserver时,具体报错信息如下:

Installation of this product failed because it is not
supported on this operating system. For information on supported configurations,
see the product documentation.

点击在新窗口中浏览此图片
解决方法:
这个要安装一个叫做sqlncli_x64.msi的东西,手动安装,它在你的Navicat的安装目录下面,比如我的在:

D:\Program Files\PremiumSoft\Navicat Premium

点击在新窗口中浏览此图片

如果你的电脑是64位的,就运行安装那个64位的(我电脑是64位,就只标记出了64位的),如果是32 的就运行那个sqlncli.msi。

然后再进行Sqlserver的链接就不再提示安装出错了。
12月7
有时候我们在打字的时候打了拼音第一个字母的时候可以输入第二个字母直接变成了另外一个字,原因是因为后面的字母上有数字开启了FN+Num Lk变成了数字,变成了选择第几个汉字啦。
点击在新窗口中浏览此图片
1、第一种方法:先尝试按键盘的Fn+NumLock(有些是直接按NumLock),具体看键盘颜色就可以了
2、如果不行来这个基本都行的,请往下看:
3、第二种方法:按快捷键windows+R,打开开运行窗
4、然后在运行里输入osk后,按Enter回车键,打开屏幕键盘,
5、然后点击选项,打开设置窗口,把这个“打开数字小键盘”勾勾去掉即可。
分页: 4/67 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]