孙镇壹队 發表於 2025-8-14 00:00:00

Linux部署minio的详细步骤

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>Linux部署minio详细步骤<ul class="second_class_ul"><li>minio在Linux环境下的单体服务部署</li><li>SpringBoot集成minio</li><li>minio工具类</li></ul></li></ul></div><p class="maodian"></p><h2>Linux部署minio详细步骤</h2>
<p>最近项目上需要用到文件上传和文件下载,想到之前项目用到了minio,于是决定使用它作为我们的文件服务器,为什么选用minio呢,主要的优点就是我之前用过,对于单体小项目非常的方便、轻量级,写一个工具类即可完成文件上传下载。<br />下面我主要会介绍三个部分: <strong>minio在Linux环境下的单体服务部署</strong>&rarr;<strong>SpringBoot集成Mino</strong>&rarr;<strong>基于Minio的文件上传下载工具类</strong>。</p>
<p class="maodian"></p><h3>minio在Linux环境下的单体服务部署</h3>
<p>使用的操作系统是 CentOS Linux 7 (Core)</p>
<p style="text-align:center"><img alt="" src="https://zhuji.jb51.net/uploads/allimg/20250814/2-250Q41140352R.png" /></p>
<p>下载Minio的二进制文件,可以使用命令下载,也可以手动下载后上传到服务器。 下载地址:</p>
<div class="dxycode"><pre class="brush:bash;">wget https://dl.min.io/server/minio/release/linux-amd64/minio</pre></div>
<p>我这里是手动下载Minio的二进制文件后上传到服务器的/usr/local/bin路径下面</p>
<p style="text-align:center"><img alt="" src="https://zhuji.jb51.net/uploads/allimg/20250814/2-250Q4114036449.png" /></p>
<p>文件上传好后记得授予权限。</p>
<div class="dxycode"><pre class="brush:bash;">chmod-X minio</pre></div>
<p>启动前需要把基本数据目录、用户配置目录进行创建 。</p>
<p>数据目录:</p>
<div class="dxycode"><pre class="brush:bash;">mkdir-p /data/minio</pre></div>
<p>用户配置目录:</p>
<div class="dxycode"><pre class="brush:bash;">mkdir-p /etc/minio</pre></div>
<p>创建完基础目录后需要编写minio的 systemd 启动服务配置</p>
<p>首先通过vi命令直接在下面路径创建并且编辑服务配置文件:</p>
<div class="dxycode"><pre class="brush:bash;">vi /etc/systemd/system/minio.service</pre></div>
<p>进入minio.service配置文件后,按insert键把下面的配置进行赋值数据插入:</p>
<div class="dxycode"><pre class="brush:bash;">Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
User=root
Group=root
ExecStart=/usr/local/bin/minio server /data --console-address ":9001"Restart=always
LimitNOFILE=65536EnvironmentFile=-/etc/default/minio
WantedBy=multi-user.target</pre></div>
<p>配置插入好后,点击esc,输入:wq进行退出保存,到本步基本已经完成了基础配置,是不是很简单。</p>
<p>设置开机自启,查看启动状态</p>
<p>开机自启动</p>
<div class="dxycode"><pre class="brush:bash;">sudo systemctl daemon-reload
sudo systemctl enable minio</pre></div>
<p>启动服务</p>
<div class="dxycode"><pre class="brush:bash;">sudo systemctl start minio</pre></div>
<p>查看启动状态</p>
<div class="dxycode"><pre class="brush:bash;">sudo systemctl status minio</pre></div>
<p>当我们看到如下状态即为部署成功:</p>
<p style="text-align:center"><img alt="" src="https://zhuji.jb51.net/uploads/allimg/20250814/2-250Q4114036405.png" /></p>
<p class="maodian"></p><h3>SpringBoot集成minio</h3>
<p>服务部署成功后我们进行代码环境的集成,以SpringBoot为例,这个集成也是比较方便的,简单两步即可配置成功。</p>
<p>pom文件配置</p>
<div class="dxycode"><pre class="brush:xml;">&lt;dependency&gt;
&lt;groupId&gt;io.minio&lt;/groupId&gt;
&lt;artifactId&gt;minio&lt;/artifactId&gt;
&lt;version&gt;8.5.2&lt;/version&gt;&lt;/dependency&gt;</pre></div>
<p>2.application.yml文件配置</p>
<div class="dxycode"><pre class="brush:yaml;">minio:
url: http://127.0.0.1:9000 #ip地址
accessKey: minioadmin #
默认账号
secretKey: minioadmin #
默认密码
secure: false#如果是true,则用的是https而不是http,默认值是true
bucketName: "jyj"
# 桶的名字 相当于文件夹</pre></div>
<p class="maodian"></p><h3>minio工具类</h3>
<p>类似工具类网上也比较多,下面我就贴出一个仅供大家参考,目的是为了大家能够快速使用上手:</p>
<div class="dxycode"><pre class="brush:java;">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&lt;Bucket&gt; 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;
            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&lt;Item&gt; listObjects() {
      Iterable&lt;Result&lt;Item&gt;&gt; results = minioClient.listObjects(
                ListObjectsArgs.builder().bucket(minioConfig.getBucketName()).build());
      List&lt;Item&gt; items = new ArrayList&lt;&gt;();
      try {
            for (Result&lt;Item&gt; 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;
    }
}</pre></div>
<p>到这里分享就结束了,希望大家能有收获!</p>
<p>以上就是Linux部署minio详细步骤的详细内容,更多相关资料请阅读琼殿技术社区其它文章!</p>
頁: [1]
查看完整版本: Linux部署minio的详细步骤