Linux部署minio的详细步骤

Linux部署minio详细步骤

最近项目上需要用到文件上传和文件下载,想到之前项目用到了minio,于是决定使用它作为我们的文件服务器,为什么选用minio呢,主要的优点就是我之前用过,对于单体小项目非常的方便、轻量级,写一个工具类即可完成文件上传下载。
下面我主要会介绍三个部分: minio在Linux环境下的单体服务部署SpringBoot集成Mino基于Minio的文件上传下载工具类

minio在Linux环境下的单体服务部署

使用的操作系统是 CentOS Linux 7 (Core)

Linux部署minio的详细步骤

下载Minio的二进制文件,可以使用命令下载,也可以手动下载后上传到服务器。 下载地址:

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

我这里是手动下载Minio的二进制文件后上传到服务器的/usr/local/bin路径下面

Linux部署minio的详细步骤

文件上传好后记得授予权限。

chmod-X minio

启动前需要把基本数据目录、用户配置目录进行创建 。

数据目录:

mkdir-p /data/minio

用户配置目录:

mkdir-p /etc/minio

创建完基础目录后需要编写minio的 systemd 启动服务配置

首先通过vi命令直接在下面路径创建并且编辑服务配置文件:

vi /etc/systemd/system/minio.service

进入minio.service配置文件后,按insert键把下面的配置进行赋值数据插入:

[Unit]Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
[Service]User=root
Group=root
ExecStart=/usr/local/bin/minio server /data --console-address ":9001"Restart=always
LimitNOFILE=65536EnvironmentFile=-/etc/default/minio
[Install]WantedBy=multi-user.target

配置插入好后,点击esc,输入:wq进行退出保存,到本步基本已经完成了基础配置,是不是很简单。

设置开机自启,查看启动状态

开机自启动

sudo systemctl daemon-reload
sudo systemctl enable minio

启动服务

sudo systemctl start minio

查看启动状态

sudo systemctl status minio

当我们看到如下状态即为部署成功:

Linux部署minio的详细步骤

SpringBoot集成minio

服务部署成功后我们进行代码环境的集成,以SpringBoot为例,这个集成也是比较方便的,简单两步即可配置成功。

pom文件配置

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

2.application.yml文件配置

minio:
url: http://127.0.0.1:9000 #ip地址
accessKey: minioadmin #
默认账号
secretKey: minioadmin #
默认密码
secure: false#如果是true,则用的是https而不是http,默认值是true
bucketName: "jyj"
# 桶的名字 相当于文件夹

minio工具类

类似工具类网上也比较多,下面我就贴出一个仅供大家参考,目的是为了大家能够快速使用上手:

import io.minio.*;
import io.minio.http.Method;
import io.minio.messages.Bucket;
import io.minio.messages.Item;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.util.FastByteArrayOutputStream;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
@Slf4j
@Component
public class MinIOUtil {
    @Resource
    private MinioConfig minioConfig;
    @Resource
    private MinioClient minioClient;
    /**
     * 查看存储bucket是否存在
     *
     * @param bucketName 存储桶名称
     * @return boolean
     */
    public Boolean bucketExists(String bucketName) {
        Boolean found;
        try {
            found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return found;
    }
    /**
     * 创建存储bucket
     *
     * @param bucketName 存储桶名称
     * @return Boolean
     */
    public Boolean makeBucket(String bucketName) {
        try {
            minioClient.makeBucket(MakeBucketArgs.builder()
                    .bucket(bucketName)
                    .build());
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
    /**
     * 删除存储bucket
     *
     * @param bucketName 存储桶名称
     * @return Boolean
     */
    public Boolean removeBucket(String bucketName) {
        try {
            minioClient.removeBucket(RemoveBucketArgs.builder()
                    .bucket(bucketName)
                    .build());
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
    /**
     * 获取全部bucket
     *
     * @return 存储桶列表
     */
    public List<Bucket> getAllBuckets() {
        try {
            return minioClient.listBuckets();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 文件上传
     *
     * @param file 文件
     * @return 文件对象名称
     */
    public String upload(MultipartFile file) {
        String originalFilename = file.getOriginalFilename();
        System.out.println(originalFilename);
        if (!StringUtils.hasText(originalFilename)) {
            throw new RuntimeException();
        }
        String fileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));
        String prefix = new SimpleDateFormat("yyyy/MM/dd").format(new Date());
        String objectName = prefix + "/" + fileName;
        try {
            PutObjectArgs objectArgs = PutObjectArgs.builder().bucket(minioConfig.getBucketName()).object(objectName)
                    .stream(file.getInputStream(), file.getSize(), -1).contentType(file.getContentType()).build();
            // 文件名称相同会覆盖
            minioClient.putObject(objectArgs);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return objectName;
    }
    /**
     * 预览图片
     *
     * @param fileName 文件名称
     * @return 文件预览链接
     */
    public String preview(String fileName) {
        // 查看文件地址
        GetPresignedObjectUrlArgs build = GetPresignedObjectUrlArgs
                .builder()
                .bucket(minioConfig.getBucketName())
                .object(fileName).method(Method.GET).build();
        try {
            String url = minioClient.getPresignedObjectUrl(build);
            return url;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 文件下载
     *
     * @param fileName 文件名称
     * @param res      response
     */
    public void download(String fileName, HttpServletResponse res) {
        GetObjectArgs objectArgs = GetObjectArgs.builder().bucket(minioConfig.getBucketName())
                .object(fileName).build();
        try (GetObjectResponse response = minioClient.getObject(objectArgs)) {
            byte[] buf = new byte[1024];
            int len;
            try (FastByteArrayOutputStream os = new FastByteArrayOutputStream()) {
                while ((len = response.read(buf)) != -1) {
                    os.write(buf, 0, len);
                }
                os.flush();
                byte[] bytes = os.toByteArray();
                res.setCharacterEncoding("utf-8");
                res.addHeader("Content-Disposition", "attachment;fileName=" + fileName);
                try (ServletOutputStream stream = res.getOutputStream()) {
                    stream.write(bytes);
                    stream.flush();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 查看文件对象
     *
     * @return 存储bucket内文件对象信息
     */
    public List<Item> listObjects() {
        Iterable<Result<Item>> results = minioClient.listObjects(
                ListObjectsArgs.builder().bucket(minioConfig.getBucketName()).build());
        List<Item> items = new ArrayList<>();
        try {
            for (Result<Item> result : results) {
                items.add(result.get());
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return items;
    }
    /**
     * 删除
     *
     * @param fileName 文件名称
     * @return 是否删除成功
     */
    public boolean remove(String fileName) {
        try {
            minioClient.removeObject(RemoveObjectArgs.builder()
                    .bucket(minioConfig.getBucketName())
                    .object(fileName)
                    .build());
        } catch (Exception e) {
            return false;
        }
        return true;
    }
}

到这里分享就结束了,希望大家能有收获!

以上就是Linux部署minio详细步骤的详细内容,更多相关资料请阅读主机测评网其它文章!

原创文章,作者:admin,如若转载,请注明出处:https://hostingchat.cn/3087.html

(0)
admin的头像admin
上一篇 2025年8月13日 上午12:00
下一篇 2025年8月15日 上午12:00

相关推荐

  • Linux系统inodes资源耗尽问题

    1. inodes介绍 Linux系统下文件数据储存在"块"中,文件的元信息,例如文件的创建者、文件的创建日期、文件的大小等。这种储存文件元信息的区域就叫做in…

    2024年7月27日
    000
  • 检查Linux中的磁盘使用的四种方法

    有时你需要下载一些重要文件或将一些照片传输到你的Linux系统,但面临磁盘空间不足的问题。你前往你的文件管理器删除你不再需要的大文件,但你不知道其中哪些占用了你大部分的磁盘空间。在…

    2025年9月27日
    000
  • Centos登录提示cannot change locale (en_US.UTF-8)解决方法

    一、问题背景 在CentOS系统上登录时,用户可能会收到以下类似的错误消息: -bash: warning: setlocale: LC_CTYPE: cannot change …

    2024年3月22日
    000
  • CentOS 7.4升级Curl版本

    一、Curl简介 Curl是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称Curl为下载工具。Cur…

    2020年5月9日
    000
  • Linux终端小工具tldr

    在终端上使用各种命令执行重要任务是 Linux 桌面体验中不可或缺的一部分。Linux 这个开源操作系统拥有丰富的命令,任何用户都无法全部记住所有这些命令。而使事情变得更复杂的是,…

    2019年7月23日
    000
  • Linux环境变量与程序地址空间详解

    一、环境变量:系统的“运行说明书” 你可以把环境变量理解成Linux系统的“小记事本”——里面记满了程序运行…

    2025年9月18日
    000
  • Linux 服务配置实践之NTP时间同步与SSH免密登录

    1. 配置ntp时间服务器,确保客户端主机和服务端主机同步时间。 2. 配置ssh免密登录,能够实现客户端主机通过服务器端的redhat账户进行基于公钥验证方式的远程连接。 一、背…

    2025年8月12日
    000
  • linux安装部署shadowsocks

    一、Shadowsocks简介 Shadowsocks(中文名称:影梭)是一个跨平台软件、基于Apache许可证的开放源代码软件,用于保护网络流量、加密数据传输。Shadowsoc…

    2020年7月30日
    000
  • Linux必备命令(二)

    一、mv命令 mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source表示源文件或目录,target表示目标文件或目录。如果将一个文件移到一个已经存在的…

    2017年12月14日
    000
  • CentOS 7处理systemctl status执行慢的问题

    一、这个问题和systemd-journald有关,故我们先简单了解下: 过去只有rsyslogd的年代中,由于rsyslogd必须要开机完成并且执行了 rsyslogd这个dae…

    2022年12月3日
    000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注