文章目录
- Solr部署
- Docker部署
- 二进制部署
- Tips:
- Solr设置账号密码
- 方法1:(不使用)
- 方法2:
- Core Admin 添加新的core报错
- Solr数据迁移
Solr部署
Docker部署
docker run -d -p 8983:8983 --name solr solr:latest
docker run -d -p 8983:8983 -v /opt/solr:/var/solr/data --name solr solr:latest
docker run -d -p 8983:8983 --name solr solr:9.5.0
# 部署并挂载数据到本地
docker run -d -p 8983:8983 -v /opt/solr:/var/solr/data --name solr solr:9.5.0
二进制部署
下载Solr
官网下载地址
历史版本下载地址
解压后文件目录
tar xvf solr-8.11.3.tgz
cd solr-8.11.3
关闭错误信息显示(可以不关闭)
vim ./bin/solr.in.sh
SOLR_ULIMIT_CHECKS=false
启动Solr
./bin/solr start -force # 使用root用户必须使用-force
访问测试 http://localhost:8983
Tips:
Solr设置账号密码
方法1:(不使用)
进入到solr的数据文件目录,默认状态在在Solr的/var/solr/data
下,创建security.json
文件
{
"authentication": {
"blockUnknown": true,
"class": "solr.BasicAuthPlugin",
"credentials": {
"solr": "IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="
}
},
"authorization": {
"class": "solr.RuleBasedAuthorizationPlugin",
"permissions": [
{
"name": "security-edit",
"role": "admin"
}
],
"user-role": {
"solr": "admin"
}
}
}
官方默认密码是SolrRocks
上面设置后的密码是123456
自定义密需要手动去生成sha256(password+salt) hash
密码
Java生成密码的代码
pom.xml
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.directory.studio/org.apache.commons.codec -->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.15</version>
</dependency>
</dependencies>
GenerateAuthorizationAuthentication.java
package eace.solr;
import org.apache.commons.codec.binary.Base64;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Random;
public class GenerateAuthorizationAuthentication {
public static void main(String[] args) {
//密码
String password = "123456";
MessageDigest digest; //提供了消息摘要算法(如SHA-1或SHA-256)的功能
try {
digest = MessageDigest.getInstance("SHA-256"); //使用SHA-256
final SecureRandom secureRandom = new SecureRandom(); //构造一个实现默认随机数算法的安全随机数生成器
byte[] salt = new byte[32]; //创建一个字节类型
secureRandom.nextBytes(salt); //生成生成指定数量的随机字节到salt中
digest.reset(); //将摘要重置以供进一步使用。
digest.update(salt); //使用指定的字节数组更新摘要。
byte[] btPass = digest.digest(password.getBytes(StandardCharsets.UTF_8));//使用给定的字符集将此字符串编码为字节序列,并将结果存储在新的字节数组中。
System.out.println(Base64.encodeBase64String(btPass) + "" + Base64.encodeBase64String(salt));
} catch (NoSuchAlgorithmException e) {
System.err.println("Unknown algorithm:" + e.getMessage());
}
}
}
方法2:
vim server/etc/user.properties
创建用户账号密码
#
# 这个文件定义用户名,密码和角色
#
# 格式如下:<username>: <password>[,<rolename> ...]
#用户名:admin 密码:123!@#qwe 角色:admin 自定义与web.xml中role-name保持一致,可以有多个角色
admin:123!@#qwe,admin
vim server/contexts/solr-jetty-context.xml
添加权限验证
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath"><Property name="hostContext" default="/solr"/></Set>
<Set name="war"><Property name="jetty.base"/>/solr-webapp/webapp</Set>
<Set name="defaultsDescriptor"><Property name="jetty.base"/>/etc/webdefault.xml</Set>
<Set name="extractWAR">false</Set>
<!-- 配置账号密码 -->
<Get name="securityHandler">
<Set name="loginService">
<New class="org.eclipse.jetty.security.HashLoginService">
<Set name="name">verify?name</Set>
<Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/user.properties</Set>
</New>
</Set>
</Get>
</Configure>
vim server/solr-webapp/webapp/WEB-INF/web.xml
修改web.xml添加权限拦截
<!-- 以下添加权限拦截 -->
<security-constraint>
<web-resource-collection>
<web-resource-name>solr</web-resource-name>
<url-pattern>/</url-pattern>
</web-resource-collection>
<auth-constraint>
<!-- 配置角色 -->
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>solr admin</realm-name>
</login-config>
</web-app>
添加在文件最后 </web-app>
之前增加即可
配置完成,重启服务,访问后提示出入账号密码!
参考资料:
solr 配置用户名密码以及代码账号密码连接
Core Admin 添加新的core报错
提示缺少配置文件:Error CREATEing SolrCore ‘new_core’: Unable to create core [new_core] Caused by: Can’t find resource ‘solrconfig.xml’ in classpath or ‘/opt/solr-8.11.3/server/solr/new_core’
复制/server/solr/configsets/_default/conf/
下的文件到要创建的core的目录中
cp -r solr-8.11.3/server/solr/configsets/_default/conf/* solr-8.11.3/server/solr/new_core/
Solr数据迁移
2个重要文件
当前版本是7.4.0,进入到Solr的server/solr/
中,备份出来Solr原配置文件信息和Solr原数据文件
可以看到真实数据不在solr-7.4.0/server/solr/procore
文件中,在/mnt/solr/data/prodata/
,我们把配置文件procore
和/mnt/solr/data/prodata/
数据文件夹复制下来
在新的Solr中
cd solr-8.11.3/server/solr
创建新的core文件夹
mkdir procore
复制旧文件的procore/conf
文件夹到新服务中的procore
复制模板文件到procore
文件中
# cp -r /opt/solr7.4.0/server/solr/procore/conf /opt/solr-8.11.3/server/solr/procore/
cp -r ./configsets/_default/conf ./procore/
复制旧文件的原数据文件到新的Solr中
这里可以自己指定数据位置,自己指定的时候创建时填写指定的位置即可
# 复制并重命名为data
cp -r /mnt/solr/data/prodata /opt/solr-8.11.3/server/solr/procore/data
此时在当前core下有2个文件夹,一个是conf,一个是data
进入web页面中创建新的core
- name:当前Core的名称,可随意
- instanceDir:当前Core的文件路径,默认创建路径实在
server/solr
下,这个路径是solr的家目录 - dataDir:Core的文件位置,可以自定义位置
- config:默认路径在当前Core的conf文件中
- schema:默认路径在当前Core的conf文件中,不建议修改,映射的文件为
conf/managed-schema