CentOS部署Minio并基于该部署搭建一层可扩展的web管理系统项目

13 篇文章 0 订阅
1 篇文章 0 订阅

第一步、检查环境

环境为centOS7
可连接网络,可使用ping www.baidu.com 进行检查
支持wget命令,如果不支持可以使用以下命令安装:
yum -y install wget
注意使用root帐号,yum命令也是需要联网的。
一切就绪。

第二步、安装部署

官方地址有说明,可以查看官方网址
首先,使用root帐号登录
执行命令行如下:

wget https://dl.min.io/server/minio/release/linux-amd64/minio

这个时间比较耗时,因为连接的国外网站,请耐心等待。
下载完成后,分配权限,执行命令行如下:

chmod +x minio

这个时候可以通过ls命令看到minio文件颜色由原来的白色边成绿色了
接下来我们把minio文件移动到指定的文件夹中,执行命令如下:

mv minio /usr/bin

进入到usr/bin目录下查看是否存在该文件
接下来回到根目录,并创建一个用来存放minio系统文件的文件,执行命令如下:

mkdir /mnt/minio-data

接下来,请使用目录回到根目录
启动Minio,执行命令如下:

./minio server /mnt/minio-data

意思就是启动minio服务并且将生成的系统文件放到 /mnt/minio-data目录下。

这个时候控制台会输出一部分内容:


[root@node1 ~]# ./minio server /mnt/minio-data
Endpoint:  http://1***我的IP:9000  http://10.0.2.15:9000  http://172.17.0.1:9000  http://127.0.0.1:9000      
AccessKey: minioadmin
SecretKey: minioadmin 

Browser Access:
   http://1***我的IP:9000  http://10.0.2.15:9000  http://172.17.0.1:9000  http://127.0.0.1:9000      
Command-line Access: https://docs.min.io/docs/minio-client-quickstart-guide

注意AccessKey和SecretKey两个内容,是用来登录Mini的管理后台的。
这个时候启动成功了,接下来可以访问了,打开浏览器,访问linux所在IP的地址,端口号为9000

如果访问失败,有可能是防火墙没有开放,可以检查端口号9000状态是不是off,如果是,需要开放端口号,开放端口号的命令如下:

/sbin/iptables -I INPUT -p tcp --dport 9000 -j ACCEPT

再次用浏览器访问9000端口,成功访问,效果如下图:
在这里插入图片描述
输入刚才控制台输出的AccessKey和SecretKey内容即可登录,如图:
在这里插入图片描述
上图中的test是我创建好的一个存储桶,点击图中的“+”号可以创建存储桶,其实就是一个文件夹,用来存放上传的文件的。

这个时候基本上可以正常使用了。但是存在一个问题,如果控制台关闭了,那么服务也就关了,如何后台运行呢?

命令行执行,将Minio设置为后台执行,root帐号进入到根目录,执行命令如下:

nohup ./minio server /mnt/minio-data >/mnt/minio-data/minio_service.log &

将minio设置为后台运行并输出Log日志。
这个时候关闭控制台,再次使用浏览器访问9000端口测试即可,如果正常访问说明设置成功。

这个时候依然存在风险,服务器断电关机了怎么办?
需要开机重启,接下来编辑开机重启的脚本。

root帐号登录后,在home目录下创建一个sh文件:

vim /home/minioSysInit.sh

意思是创建一个minioSysInit.sh文件并直接进入编辑状态,
将下面的内容放进去:

# !/bin/bash
nohup ./minio server /mnt/minio-data >/mnt/minio-data/minio_service.log &

然后保存退出
接下来给该sh文件赋权限:

chmod +x /home/minioSysInit.sh

接下来编辑启动系统文件,执行命令:

vim /etc/rc.d/rc.local

将刚才的sh文件添加进去:

# 开机自启动Minio,此处修改为脚本位置
/home/minioSysInit.sh

OK,搞定。

web项目使用

添加项目依赖

<dependency>
			<groupId>io.minio</groupId>
			<artifactId>minio</artifactId>
			<version>6.0.11</version>
		</dependency>

注意是6.0.11,官方给的是3.+的,比较坑。
如果你是springboot项目可能会存在guava冲突,应该会多出来一个2.0的jar包,去除一个即可。

个人基于minio搭建了一层管理项目,可直接下载下来使用,开放了公共上传接口,可通过postman测试:http://localhost/oss/ossMinioFile/upload
项目下载地址:点击这里

添加依赖后就可以直接使用了,参考代码:

package com.ruoyi.common.utils.oss;

import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Maps;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import io.minio.MinioClient;
import io.minio.Result;
import io.minio.errors.*;
import io.minio.messages.Item;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.Map;
import java.util.UUID;

/**
 * @ProjectName: RuoYi
 * @Package: com.ruoyi.common.utils.oss
 * @ClassName: MinioUtil
 * @Author: MC
 * @Description: ${description}
 * @Date: 2020/3/31 0031 9:12
 * @Version: 1.0
 */
public class MinioUtil {

    private static volatile MinioClient minioClient;

    private MinioUtil(){}

    @Log(title = "MinioUtil创建MinioClient对象", businessType = BusinessType.MINIO)
    public static MinioClient getMinioClient() throws InvalidPortException, InvalidEndpointException {
        if(minioClient == null){
            synchronized(MinioUtil.class){
                if(minioClient == null){
                    MinioComponent bean = SpringUtils.getBean(MinioComponent.class);
                    minioClient = new MinioClient(bean.getEndpoint(), bean.getAccessKey(), bean.getSecretKey());
                }
            }
        }

        return minioClient;
    }

    public static JSONObject uploaderFile(MultipartFile file, String projName,String bucketName) throws Exception {
        if(file.isEmpty()){
            return null;
        }
        String imgStr = "PNG,png,JPG,jpg,JPEG,jpeg,BMP,bmp,GIF,gif,SVG,svg";
        String videoStr = "mp4,m4v,mov,qt,avi,flv,wmv,asf,mpeg,mpg,vob,mkv,asf,wmv,rm,rmvb,vob,ts,dat";

        String OriginalFilename = file.getOriginalFilename();
        String suffix = OriginalFilename.substring(OriginalFilename.lastIndexOf(".") + 1);
        JSONObject jsonObject;
        if(imgStr.indexOf(suffix) != -1){
            jsonObject = uploadImage(file.getInputStream(),projName,bucketName,OriginalFilename);
            jsonObject.put("fileType","0");
        }else if(videoStr.indexOf(suffix) != -1){
            jsonObject = uploadVideo(file.getInputStream(),projName,bucketName,OriginalFilename);
            jsonObject.put("fileType","1");
        }else{
            jsonObject = uploadFile(file.getInputStream(),projName,bucketName,OriginalFilename);
            jsonObject.put("fileType","3");
        }
        return jsonObject;
    }


    /**
     *
     * @Title: uploadImage
     * @Description:上传图片
     * @param inputStream
     * @param projName
     * @param bucketName
     * @return
     * @throws Exception
     */
    public static JSONObject uploadImage(InputStream inputStream, String projName,String bucketName,String objName) throws Exception {
        return upload(inputStream, projName,bucketName, objName,"image/jpeg");
    }


    /**
     * @Title: uploadVideo
     * @Description:上传视频
     * @param inputStream
     * @param projName
     * @param bucketName
     * @return
     * @throws Exception
     */
    public static JSONObject uploadVideo(InputStream inputStream, String projName,String bucketName,String objName) throws Exception {
        return upload(inputStream, projName,bucketName,objName, "video/mp4");
    }


    /**
     * @Title: uploadVideo
     * @Description:上传文件
     * @param inputStream
     * @param projName
     * @param bucketName
     * @return
     * @throws Exception
     */
    public static JSONObject uploadFile(InputStream inputStream, String projName,String bucketName,String objName) throws Exception {
        return upload(inputStream, projName,bucketName,objName, "application/octet-stream");
    }


    /**
     * 上传字符串大文本内容
     *
     * @Title: uploadString
     * @Description:描述方法
     * @param str
     * @return
     * @throws Exception
     */
    public static JSONObject uploadString(String projName,String bucketName,String str) throws Exception {
        if (StringUtils.isEmpty(str)) {
            return new JSONObject();
        }
        InputStream inputStream = new ByteArrayInputStream(str.getBytes());
        return upload(inputStream, projName,bucketName,"", "text/html");
    }

    /**
     * @Title: upload
     * @Description:上传主功能
     * @return
     * @throws Exception
     */
    private static JSONObject upload(InputStream inputStream, String projName,String bucketName,String objName, String contentType) throws Exception {
        if(minioClient == null){
            minioClient = getMinioClient();
        }
        String suffix = "txt";//处理后缀名
        if(!StringUtils.isEmpty(objName)){
            suffix = objName.substring(objName.lastIndexOf(".") + 1);
        }
        JSONObject map = new JSONObject();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String ymd = sdf.format(new Date());
        String objectName = ymd + "_"  + (projName != null ? projName : "_")+ UUID.randomUUID().toString()+"."+suffix;
        if(!StringUtils.isEmpty(contentType)){
            minioClient.putObject(projName+bucketName, objectName, inputStream, contentType);
        }else{
            Map<String,String> headerMap = Maps.newHashMap();
            minioClient.putObject(projName+bucketName, objectName, inputStream,headerMap);
        }
        map.put("flag", "0");
        map.put("mess", "上传成功");
        map.put("objectName", objectName);
        map.put("path", projName+bucketName + "/" + objectName);
        return map;
    }

    /**
     * 创建存储桶
     * @param projName
     * @param bucketName
     * @return
     */
    public static boolean createBucket(String projName,String bucketName)throws Exception{
        if(StringUtils.isEmpty(projName) || StringUtils.isEmpty(bucketName)){
            return false;
        }
        if(minioClient == null){
            minioClient = getMinioClient();
        }
        boolean b = minioClient.bucketExists(projName + bucketName);
        if(!b){
            minioClient.makeBucket(projName+bucketName);
        }

        return true;
    }

    /**
     * 删除存储桶及其桶中的所有元素
     * @param projName
     * @param bucketName
     * @return
     * @throws Exception
     */
    public static boolean removeBucket(String projName,String bucketName)throws Exception{
        if(StringUtils.isEmpty(projName) || StringUtils.isEmpty(bucketName)){
            return false;
        }
        if(minioClient == null){
            minioClient = getMinioClient();
        }
        boolean b = minioClient.bucketExists(projName + bucketName);
        if(!b){
            Iterable<Result<Item>> results = minioClient.listObjects(projName + bucketName);
            Iterator<Result<Item>> iterator = results.iterator();
            while(iterator.hasNext()){
                Result<Item> next = iterator.next();
                Item item = next.get();
                minioClient.removeObject(projName + bucketName,item.objectName());
            }
            minioClient.removeBucket(projName + bucketName);
        }
        return true;
    }


    /**
     * 获取对象流
     * @param projName
     * @param bucketName
     * @param objectName
     * @return
     * @throws Exception
     */
    public static InputStream getObject(String projName,String bucketName,String objectName) throws Exception{
        if(StringUtils.isEmpty(projName) || StringUtils.isEmpty(bucketName) || StringUtils.isEmpty(objectName)){
            return null;
        }
        if(minioClient == null){
            minioClient = getMinioClient();
        }
        return minioClient.getObject(projName + bucketName,objectName);
    }

    /**
     * 获取对象签名URL,默认有效时长为7天
     * @param projName
     * @param bucketName
     * @param objectName
     * @return
     * @throws Exception
     */
    public static String getObjectSignUrl(String projName,String bucketName,String objectName) throws Exception{
        if(StringUtils.isEmpty(projName) || StringUtils.isEmpty(bucketName) || StringUtils.isEmpty(objectName)){
            return null;
        }
        if(minioClient == null){
            minioClient = getMinioClient();
        }
        return minioClient.presignedGetObject(projName + bucketName,objectName);
    }


    /**
     * 删除存储桶中的元素
     * @param projName
     * @param bucketName
     * @param objectName
     * @return
     * @throws Exception
     */
    public static boolean removeObject(String projName,String bucketName,String objectName)throws Exception{
        if(StringUtils.isEmpty(projName) || StringUtils.isEmpty(bucketName) || StringUtils.isEmpty(objectName)){
            return false;
        }
        if(minioClient == null){
            minioClient = getMinioClient();
        }
        minioClient.removeObject(projName + bucketName,objectName);
        return true;
    }


}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不能吃辣的JAVA程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值