一、下载安装文件minio
wget https://dl.minio.io/server/minio/release/linux-amd64/minio
下载该文件,可能网络慢,不好下载,这时候,可以通过下载工具下载minio安装包到本地,直接复制wget 后面的链接即可
如果太慢可以用我的网盘地址:补上
安装minio服务
1、将文件上传到服务器,我的放在/opt/minio下,没有的话自己创建文件夹
2、将minio文件放在minio下,在minio文件夹下创面data ,(mkdir data)创建/data目录,用来作为minio的存储目录
3、chmod +x minio
4、启动minio服务 ,这个启动只是临时的,关闭xshell页面服务停止
./minio server /data
5、启动如下图所示,如果要后台运行,可以使用下面命令。
nohup minio server /data &
5.2后台运行也可这么配置
nohup /opt/minio server /opt/minio/data > /opt/data/minio.log 2>&1 &
会生成nohup.out文件夹,里面包含accesskey和secretkey
需要打开9000端口,端口可以修改
修改配置文件:
自定义MINIO_ACCESS_KEY和MINIO_SECRET_KEY
export MINIO_ACCESS_KEY=minio
export MINIO_SECRET_KEY=miniostorage
export MINIO_VOLUMES="/opt/data" // 自定义文件夹地址
重新启动:nohup minio server /data &
自定义端口
nohup minio server --address IP:PORT /data &
配置https访问
在项目使用minio服务器上传下载文件的过程中发现,由于网站使用的是https访问模式,而minio使用的是http访问方式,在https直接跳转http会出现安全性问题。这个问题的解决方案网上有很多回答,大部分都是说加访问头,还有就是通过表单请求,或者通过nginx重定向。这写方法总是治标而不治本,考虑minio一个这么流行的分布式服务器不可能不支持主流的https访问方式,网上查资料较少。直接去官方文档查看,果然发现相应的minio配置方式,最后采用openssl的方式加入证书,将minio访问方式改为https,从而解决该问题。
使用 OpenSSL:
生成私钥:
Copyopenssl genrsa -out private.key 2048
生成自签名证书:
Copyopenssl req -new -x509 -days 3650 -key private.key -out public.crt -subj “/C=US/ST=state/L=location/O=organization/CN=domain”
其中,3650是证书有效期天数,state所在省,location所在市,orgnization组织,domain 域
将生成的私钥和公钥放在 Minio的config/certs文件夹中
官网相关信息地址如下:
https://docs.min.io/cn/how-to-secure-access-to-minio-server-with-tls
https://docs.min.io/cn/minio-server-configuration-guide.html
去掉ssl验证
/**
* 注入minio 客户端
*
* @return
*/
@Bean
public MinioClient minioClient() throws Exception {
SSLClient.sslClient();
return MinioClient.builder()
.endpoint(endpoint)
.credentials(accessKey, secretKey)
.httpClient(getUnsafeOkHttpClent())
.build();
}
public static OkHttpClient getUnsafeOkHttpClent() throws KeyManagementException {
try {
final TrustManager[] trustAllCerts = new TrustManager[]{x509TrustManager()};
final SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new SecureRandom());
final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.sslSocketFactory(sslSocketFactory, x509TrustManager());
builder.hostnameVerifier((s, sslSession) -> true);
return builder.build();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
private static X509TrustManager x509TrustManager() {
X509TrustManager x509TrustManager = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) {
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[]{};
}
};
return x509TrustManager;
}