<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>minio &#8211; wqh博客</title>
	<atom:link href="https://wangqianhong.com/tag/minio/feed/" rel="self" type="application/rss+xml" />
	<link>https://wangqianhong.com</link>
	<description>和而不同</description>
	<lastBuildDate>Thu, 30 May 2024 23:55:29 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://wangqianhong.com/wp-content/uploads/2020/09/cropped-1-1-1-32x32.png</url>
	<title>minio &#8211; wqh博客</title>
	<link>https://wangqianhong.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>对象存储minio（六） &#124; Go SDK</title>
		<link>https://wangqianhong.com/2022/04/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e5%85%ad%ef%bc%89-go-sdk/</link>
					<comments>https://wangqianhong.com/2022/04/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e5%85%ad%ef%bc%89-go-sdk/#respond</comments>
		
		<dc:creator><![CDATA[wqh_work]]></dc:creator>
		<pubDate>Fri, 08 Apr 2022 10:15:00 +0000</pubDate>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[minio]]></category>
		<guid isPermaLink="false">https://wangqianhong.com/?p=3052</guid>

					<description><![CDATA[<p>minio提供了多种语言的SDK（https://min.io/docs/minio/linux/d&#8230; <a href="https://wangqianhong.com/2022/04/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e5%85%ad%ef%bc%89-go-sdk/" class="more-link read-more" rel="bookmark">继续阅读 <span class="screen-reader-text">对象存储minio（六） &#124; Go SDK</span><i class="fa fa-arrow-right"></i></a></p>
<p><a rel="nofollow" href="https://wangqianhong.com/2022/04/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e5%85%ad%ef%bc%89-go-sdk/">对象存储minio（六） | Go SDK</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>minio提供了多种语言的SDK（<a href="https://min.io/docs/minio/linux/developers/go/minio-go.html" target="_blank" rel="noreferrer noopener">https://min.io/docs/minio/linux/developers/minio-drivers.html</a>），这里我选择Go SDK（<a href="https://www.bookstack.cn/read/MinioCookbookZH/26.md" target="_blank" rel="noreferrer noopener">https://www.bookstack.cn/read/MinioCookbookZH/26.md</a>）</p>



<h3>创建Client</h3>



<pre class="wp-block-code"><code>ctx := context.Background()
endpoint := "localhost:9090"
accessKeyID := "对应用户的AK"
secretAccessKey := "对应用户的SK"
useSSL := false

// Initialize minio client object.
minioClient, err := minio.New(
	endpoint,
	&amp;minio.Options{
		Creds:  credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
		Secure: useSSL,
	},
)
if err != nil {
	fmt.Println(err)
	return
}

bucketName := "images"

// Check to see if we already own this bucket (which happens if you run this twice)
exists, err := minioClient.BucketExists(ctx, bucketName)
if err != nil || !exists {
	fmt.Println(err)
	return
}</code></pre>



<h3>创建Bucket</h3>



<pre class="wp-block-code"><code>// Make a new bucket called testbucket.
bucketName := "testbucket"
location := "us-east-1"

err = minioClient.MakeBucket(ctx, bucketName, minio.MakeBucketOptions{Region: location})
if err != nil {
	// Check to see if we already own this bucket (which happens if you run this twice)
	exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
	if errBucketExists == nil &amp;&amp; exists {
		fmt.Printf("We already own %s\n", bucketName)
	} else {
		fmt.Println(err)
		return 
	}
} else {
	fmt.Printf("Successfully created %s\n", bucketName)
}</code></pre>



<h3>上传Object</h3>



<pre class="wp-block-code"><code>n, err := minioClient.FPutObject(ctx, "my-bucketname", "my-objectname", "my-filename.png", minio.PutObjectOptions{
    ContentType: "application/octet-stream",
});
if err != nil {
    fmt.Println(err)
    return
}
fmt.Println("Successfully uploaded bytes: ", n)</code></pre>



<h3>获取Object</h3>



<pre class="wp-block-code"><code>err = minioClient.FGetObject(ctx, "mybucket", "myobject", "/tmp/myobject", minio.GetObjectOptions{})
if err != nil {
    fmt.Println(err)
    return
}</code></pre>



<h3>临时访问</h3>



<p>生成一个用于HTTP GET操作的presigned URL。浏览器/移动客户端可以在即使存储桶为私有的情况下也可以通过这个URL进行下载。这个presigned URL可以有一个过期时间，默认是7天</p>



<pre class="wp-block-code"><code>// Set request parameters for content-disposition.
reqParams := make(url.Values)
reqParams.Set("response-content-disposition", "attachment; filename=\"your-filename.txt\"")
// Generates a presigned url which expires in a day.
presignedURL, err := minioClient.PresignedGetObject("mybucket", "myobject", time.Second * 24 * 60 * 60, reqParams)
if err != nil {
    fmt.Println(err)
    return
}
fmt.Println("Successfully generated presigned URL", presignedURL)</code></pre>
<p><a rel="nofollow" href="https://wangqianhong.com/2022/04/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e5%85%ad%ef%bc%89-go-sdk/">对象存储minio（六） | Go SDK</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wangqianhong.com/2022/04/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e5%85%ad%ef%bc%89-go-sdk/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>对象存储minio（五） &#124; 权限管理</title>
		<link>https://wangqianhong.com/2022/04/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e4%ba%94%ef%bc%89-%e6%9d%83%e9%99%90%e7%ae%a1%e7%90%86/</link>
					<comments>https://wangqianhong.com/2022/04/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e4%ba%94%ef%bc%89-%e6%9d%83%e9%99%90%e7%ae%a1%e7%90%86/#respond</comments>
		
		<dc:creator><![CDATA[wqh_work]]></dc:creator>
		<pubDate>Sun, 03 Apr 2022 01:54:00 +0000</pubDate>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[minio]]></category>
		<guid isPermaLink="false">https://wangqianhong.com/?p=3031</guid>

					<description><![CDATA[<p>minio的权限管理主要由policy（策略）和identity（身份）构成 Policy（策略验证&#8230; <a href="https://wangqianhong.com/2022/04/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e4%ba%94%ef%bc%89-%e6%9d%83%e9%99%90%e7%ae%a1%e7%90%86/" class="more-link read-more" rel="bookmark">继续阅读 <span class="screen-reader-text">对象存储minio（五） &#124; 权限管理</span><i class="fa fa-arrow-right"></i></a></p>
<p><a rel="nofollow" href="https://wangqianhong.com/2022/04/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e4%ba%94%ef%bc%89-%e6%9d%83%e9%99%90%e7%ae%a1%e7%90%86/">对象存储minio（五） | 权限管理</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>minio的权限管理主要由policy（策略）和identity（身份）构成</p>



<h3>Policy（策略验证）</h3>



<p>minio使用基于策略的访问控制（<a href="https://min.io/docs/minio/linux/reference/minio-mc-admin/mc-admin-policy.html" target="_blank" rel="noreferrer noopener">https://min.io/docs/minio/linux/reference/minio-mc-admin/mc-admin-policy.html</a>），来定义经过身份验证的用户可以访问的授权操作和资源。每个策略都描述了一个或多个操作和条件，这些操作和条件概述了用户或用户组的权限。<br>每个用户只能访问内置角色明确授予的资源和操作。默认情况下，MinIO拒绝访问任何其他资源或操作。</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" src="https://wangqianhong.com/wp-content/uploads/2024/05/image-9.png" alt="" class="wp-image-3034" width="813" height="473" srcset="https://wangqianhong.com/wp-content/uploads/2024/05/image-9.png 817w, https://wangqianhong.com/wp-content/uploads/2024/05/image-9-768x447.png 768w, https://wangqianhong.com/wp-content/uploads/2024/05/image-9-515x300.png 515w" sizes="(max-width: 813px) 100vw, 813px" /></figure>



<p>不同的策略就可设置不同的Actions，从而提供不同的操作权限</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" src="https://wangqianhong.com/wp-content/uploads/2024/05/image-10.png" alt="" class="wp-image-3035" width="806" height="416" srcset="https://wangqianhong.com/wp-content/uploads/2024/05/image-10.png 1111w, https://wangqianhong.com/wp-content/uploads/2024/05/image-10-768x397.png 768w, https://wangqianhong.com/wp-content/uploads/2024/05/image-10-581x300.png 581w" sizes="(max-width: 806px) 100vw, 806px" /></figure>



<p>可以看到readonly只能进行GetObject和GetBucketLocation的操作</p>



<h3>Identity（身份验证）</h3>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" src="https://wangqianhong.com/wp-content/uploads/2024/05/image-14.png" alt="" class="wp-image-3044" width="798" height="565" srcset="https://wangqianhong.com/wp-content/uploads/2024/05/image-14.png 839w, https://wangqianhong.com/wp-content/uploads/2024/05/image-14-768x545.png 768w, https://wangqianhong.com/wp-content/uploads/2024/05/image-14-423x300.png 423w" sizes="(max-width: 798px) 100vw, 798px" /></figure>



<p>User：由唯一的访问密钥（用户名）和相应的密钥（密码）组成。客户端必须通过指定现有MinIO用户的有效访问密钥（用户名）和相应的密钥（密码）来验证其身份。<br>每个用户都可以有一个或多个分配的策略，这些策略明确列出该用户可以访问的操作和资源。</p>



<p>用户还可以从他们所属的组继承策略。</p>



<p>Group：一个组可以有一个附加的IAM策略，其中该组中具有成员身份的所有用户都继承该策略。组支持对minio的用户权限进行更简化的管理。</p>



<p>可以简单理解为角色。</p>



<h3>Service Accounts</h3>



<p>有时候服务器需要操作minio，需要创建对应用户的AK和SK</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" src="https://wangqianhong.com/wp-content/uploads/2024/05/image-15.png" alt="" class="wp-image-3050" width="818" height="248" srcset="https://wangqianhong.com/wp-content/uploads/2024/05/image-15.png 1901w, https://wangqianhong.com/wp-content/uploads/2024/05/image-15-768x234.png 768w, https://wangqianhong.com/wp-content/uploads/2024/05/image-15-1536x467.png 1536w, https://wangqianhong.com/wp-content/uploads/2024/05/image-15-850x258.png 850w" sizes="(max-width: 818px) 100vw, 818px" /></figure>



<p>创建好之后，也要把AK和SK保存在本地，方便后续使用</p>
<p><a rel="nofollow" href="https://wangqianhong.com/2022/04/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e4%ba%94%ef%bc%89-%e6%9d%83%e9%99%90%e7%ae%a1%e7%90%86/">对象存储minio（五） | 权限管理</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wangqianhong.com/2022/04/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e4%ba%94%ef%bc%89-%e6%9d%83%e9%99%90%e7%ae%a1%e7%90%86/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>对象存储minio（四） &#124; Objects 对象</title>
		<link>https://wangqianhong.com/2022/03/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e5%9b%9b%ef%bc%89-objects-%e5%af%b9%e8%b1%a1/</link>
					<comments>https://wangqianhong.com/2022/03/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e5%9b%9b%ef%bc%89-objects-%e5%af%b9%e8%b1%a1/#respond</comments>
		
		<dc:creator><![CDATA[wqh_work]]></dc:creator>
		<pubDate>Sat, 26 Mar 2022 02:49:00 +0000</pubDate>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[minio]]></category>
		<guid isPermaLink="false">https://wangqianhong.com/?p=3018</guid>

					<description><![CDATA[<p>可以把对象就理解成平时Windows系统里文件夹下的文件 Object的属性 对象（Object）是&#8230; <a href="https://wangqianhong.com/2022/03/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e5%9b%9b%ef%bc%89-objects-%e5%af%b9%e8%b1%a1/" class="more-link read-more" rel="bookmark">继续阅读 <span class="screen-reader-text">对象存储minio（四） &#124; Objects 对象</span><i class="fa fa-arrow-right"></i></a></p>
<p><a rel="nofollow" href="https://wangqianhong.com/2022/03/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e5%9b%9b%ef%bc%89-objects-%e5%af%b9%e8%b1%a1/">对象存储minio（四） | Objects 对象</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>可以把对象就理解成平时Windows系统里文件夹下的文件</p>



<h3>Object的属性</h3>



<p>对象（Object）是对象存储的基本单元，可理解为任何格式类型的数据，例如图片、文档和音视频文件等。存储桶（Bucket）是对象的载体，每个存储桶可容纳任意数量的对象。</p>



<p>每个对象都由对象键（ObjectKey）、对象值（Value）、和对象元数据（Metadata）组成。</p>



<ul><li><strong>对象键（ObjectKey）</strong><strong>：</strong>对象键是对象在存储桶中的唯一标识，可以通俗的理解为文件路径。</li><li><strong>对象值（Value）</strong><strong>：</strong>即上传的对象本身，可以通俗的理解为文件内容（Object Content）。</li><li><strong>对象元数据（Metadata）：</strong>是一组键值对，可以通俗的理解为文件的属性，例如：文件的修改时间、存储类型等，您可以在上传对象后对其进行查询。</li></ul>



<h3>Object基本信息</h3>



<p>点击对象，在右侧可以看到基本信息和常用操作</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="352" height="840" src="https://wangqianhong.com/wp-content/uploads/2024/05/image-8.png" alt="" class="wp-image-3026" srcset="https://wangqianhong.com/wp-content/uploads/2024/05/image-8.png 352w, https://wangqianhong.com/wp-content/uploads/2024/05/image-8-126x300.png 126w" sizes="(max-width: 352px) 100vw, 352px" /></figure>



<p>Download：下载</p>



<p>Share：分享给其他人，其他人可以通过分享链接下载</p>



<p>Preview：预览</p>



<p>Tags：打标签</p>



<p>Inspect：加密</p>



<h3>Object的访问</h3>



<p>存储桶默认是private，直接通过url访问会报错<a href="http://localhost:9090/images/CountryFlags/flag_australia.png" target="_blank" rel="noreferrer noopener">http://localhost:9090/images/CountryFlags/flag_australia.png</a></p>



<pre class="wp-block-preformatted">This XML file does not appear to have any style information associated with it. The document tree is shown below.

&lt;Error&gt;
&lt;Code&gt;AccessDenied&lt;/Code&gt;
&lt;Message&gt;Access Denied.&lt;/Message&gt;
&lt;Key&gt;CountryFlags/flag_australia.png&lt;/Key&gt;
&lt;BucketName&gt;images&lt;/BucketName&gt;
&lt;Resource&gt;/images/CountryFlags/flag_australia.png&lt;/Resource&gt;
&lt;RequestId&gt;17D3E1BABA783085&lt;/RequestId&gt;
&lt;HostId&gt;e318e4cd5089903a714f2d5585fb1c70bf1ed0af4fc8fea5b3775a5a687fd040&lt;/HostId&gt;
&lt;/Error&gt;</pre>



<p>为了测试方便，可以设置成public，这样我们就可以直接通过url访问对象</p>
<p><a rel="nofollow" href="https://wangqianhong.com/2022/03/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e5%9b%9b%ef%bc%89-objects-%e5%af%b9%e8%b1%a1/">对象存储minio（四） | Objects 对象</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wangqianhong.com/2022/03/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e5%9b%9b%ef%bc%89-objects-%e5%af%b9%e8%b1%a1/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>对象存储minio（三） &#124; Buckets 存储桶</title>
		<link>https://wangqianhong.com/2022/03/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e4%b8%89%ef%bc%89-buckets-%e5%ad%98%e5%82%a8%e6%a1%b6/</link>
					<comments>https://wangqianhong.com/2022/03/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e4%b8%89%ef%bc%89-buckets-%e5%ad%98%e5%82%a8%e6%a1%b6/#respond</comments>
		
		<dc:creator><![CDATA[wqh_work]]></dc:creator>
		<pubDate>Thu, 17 Mar 2022 01:44:00 +0000</pubDate>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[minio]]></category>
		<guid isPermaLink="false">https://wangqianhong.com/?p=3006</guid>

					<description><![CDATA[<p>minio使用bucket来存储对象。bucket类似于文件系统中的文件夹或目录，其中每个bucke&#8230; <a href="https://wangqianhong.com/2022/03/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e4%b8%89%ef%bc%89-buckets-%e5%ad%98%e5%82%a8%e6%a1%b6/" class="more-link read-more" rel="bookmark">继续阅读 <span class="screen-reader-text">对象存储minio（三） &#124; Buckets 存储桶</span><i class="fa fa-arrow-right"></i></a></p>
<p><a rel="nofollow" href="https://wangqianhong.com/2022/03/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e4%b8%89%ef%bc%89-buckets-%e5%ad%98%e5%82%a8%e6%a1%b6/">对象存储minio（三） | Buckets 存储桶</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>minio使用bucket来存储对象。bucket类似于文件系统中的文件夹或目录，其中每个bucket可以容纳任意数量的对象。</p>



<h3>存储桶</h3>



<p>Buckets -&gt; Create Bucket</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" src="https://wangqianhong.com/wp-content/uploads/2024/05/image-2.png" alt="" class="wp-image-3008" width="785" height="439" srcset="https://wangqianhong.com/wp-content/uploads/2024/05/image-2.png 1260w, https://wangqianhong.com/wp-content/uploads/2024/05/image-2-768x430.png 768w, https://wangqianhong.com/wp-content/uploads/2024/05/image-2-535x300.png 535w" sizes="(max-width: 785px) 100vw, 785px" /></figure>



<p>创建成功之后，可以在Object Browser中查看所有的Buckets</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" src="https://wangqianhong.com/wp-content/uploads/2024/05/image-3.png" alt="" class="wp-image-3010" width="769" height="160" srcset="https://wangqianhong.com/wp-content/uploads/2024/05/image-3.png 1910w, https://wangqianhong.com/wp-content/uploads/2024/05/image-3-768x161.png 768w, https://wangqianhong.com/wp-content/uploads/2024/05/image-3-1536x322.png 1536w, https://wangqianhong.com/wp-content/uploads/2024/05/image-3-850x178.png 850w" sizes="(max-width: 769px) 100vw, 769px" /></figure>



<h3>Upload（上传）</h3>



<p>点击Bucket，进入存储桶界面，可以上传单个文件或文件夹</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" src="https://wangqianhong.com/wp-content/uploads/2024/05/image-5.png" alt="" class="wp-image-3013" width="780" height="182" srcset="https://wangqianhong.com/wp-content/uploads/2024/05/image-5.png 1663w, https://wangqianhong.com/wp-content/uploads/2024/05/image-5-768x179.png 768w, https://wangqianhong.com/wp-content/uploads/2024/05/image-5-1536x358.png 1536w, https://wangqianhong.com/wp-content/uploads/2024/05/image-5-850x198.png 850w" sizes="(max-width: 780px) 100vw, 780px" /></figure>



<p>上传完成之后，可以在控制台查看文件，并对文件进行操作</p>



<h3>Configure（设置）</h3>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" src="https://wangqianhong.com/wp-content/uploads/2024/05/image-6.png" alt="" class="wp-image-3015" width="833" height="300" srcset="https://wangqianhong.com/wp-content/uploads/2024/05/image-6.png 1668w, https://wangqianhong.com/wp-content/uploads/2024/05/image-6-768x277.png 768w, https://wangqianhong.com/wp-content/uploads/2024/05/image-6-1536x554.png 1536w, https://wangqianhong.com/wp-content/uploads/2024/05/image-6-831x300.png 831w" sizes="(max-width: 833px) 100vw, 833px" /></figure>



<p>Summary：基本设置，包括设置桶的可见性，加密等</p>



<p>Events：允许管理员就某些对象或存储桶事件向支持的外部服务发送通知</p>



<p>Replication：源存储桶和目标存储桶之间对对象进行服务器端和客户端复制</p>



<p>Lifecycle：允许创建基于时间或日期的对象自动转换或到期规则，例如设置对象过期时间</p>



<p>Access：配置各种访问许可，包括策略和用户</p>



<p>Anonymous：匿名访问规则</p>
<p><a rel="nofollow" href="https://wangqianhong.com/2022/03/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e4%b8%89%ef%bc%89-buckets-%e5%ad%98%e5%82%a8%e6%a1%b6/">对象存储minio（三） | Buckets 存储桶</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wangqianhong.com/2022/03/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e4%b8%89%ef%bc%89-buckets-%e5%ad%98%e5%82%a8%e6%a1%b6/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>对象存储minio（二） &#124; docker配置</title>
		<link>https://wangqianhong.com/2022/03/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e4%ba%8c%ef%bc%89-docker%e9%85%8d%e7%bd%ae/</link>
					<comments>https://wangqianhong.com/2022/03/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e4%ba%8c%ef%bc%89-docker%e9%85%8d%e7%bd%ae/#respond</comments>
		
		<dc:creator><![CDATA[wqh_work]]></dc:creator>
		<pubDate>Sun, 13 Mar 2022 13:41:00 +0000</pubDate>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[minio]]></category>
		<guid isPermaLink="false">https://wangqianhong.com/?p=2982</guid>

					<description><![CDATA[<p>MinIO (https://min.io/) 是一种高性能、兼容亚马逊 S3 协议的对象存储服务，&#8230; <a href="https://wangqianhong.com/2022/03/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e4%ba%8c%ef%bc%89-docker%e9%85%8d%e7%bd%ae/" class="more-link read-more" rel="bookmark">继续阅读 <span class="screen-reader-text">对象存储minio（二） &#124; docker配置</span><i class="fa fa-arrow-right"></i></a></p>
<p><a rel="nofollow" href="https://wangqianhong.com/2022/03/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e4%ba%8c%ef%bc%89-docker%e9%85%8d%e7%bd%ae/">对象存储minio（二） | docker配置</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>MinIO (<a rel="noreferrer noopener" href="https://min.io" target="_blank">https://min.io</a>/) 是一种高性能、兼容亚马逊 S3 协议的对象存储服务，非常适合于存储大容量非结构化的数据，例如图片、视频、日志文件、备份数据和容器 / 虚拟机镜像等，而一个对象文件可以是任意大小，从几 Kb 到最大 5T 不等。而且天然支持分布式，并可在任何云或本地基础设施上运行。</p>



<p>MinIO主要采用Golang语言实现，整个系统都运行在操作系统的用户态空间，客户端与存储服务器之间采用http/https通信协议。</p>



<h3>Docker运行</h3>



<p>编写minio.yml文件：</p>



<pre class="wp-block-code"><code>services:
  minio:
    image: 'minio/minio:latest'
    container_name: minio
    restart: always
    ports:
      - '9090:9090' #api
      - '9091:9091' #控制台
    volumes:
      - ~/minio/data:/data  #数据目录
      - ~/minio/config:/root/.minio  #配置目录
    environment:
      - MINIO_ROOT_USER=test  #控制台用户名
      - MINIO_ROOT_PASSWORD=test123  #控制台用户密码
    command: server --address ':9090' --console-address ':9091' /data</code></pre>



<p><code>docker compose -f minio.yml up -d</code> 运行镜像</p>



<h3>通过控制台访问</h3>



<p><a href="http://localhost:13013/login"><code>http://localhost:9091/login</code></a></p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1772" height="897" src="https://wangqianhong.com/wp-content/uploads/2024/05/image.png" alt="" class="wp-image-2983" srcset="https://wangqianhong.com/wp-content/uploads/2024/05/image.png 1772w, https://wangqianhong.com/wp-content/uploads/2024/05/image-768x389.png 768w, https://wangqianhong.com/wp-content/uploads/2024/05/image-1536x778.png 1536w, https://wangqianhong.com/wp-content/uploads/2024/05/image-593x300.png 593w" sizes="(max-width: 1772px) 100vw, 1772px" /></figure>



<p>输入控制台用户密码即可登录</p>



<h3>创建api SK</h3>



<p>Access Keys -&gt; Create access key</p>



<figure class="wp-block-image size-large"><img loading="lazy" width="1265" height="683" src="https://wangqianhong.com/wp-content/uploads/2024/05/image-1.png" alt="" class="wp-image-2987" srcset="https://wangqianhong.com/wp-content/uploads/2024/05/image-1.png 1265w, https://wangqianhong.com/wp-content/uploads/2024/05/image-1-768x415.png 768w, https://wangqianhong.com/wp-content/uploads/2024/05/image-1-556x300.png 556w" sizes="(max-width: 1265px) 100vw, 1265px" /></figure>



<p>把生成的AK和SK保存到本地，方便后续使用，<strong>因为SK为了安全，在控制台是没有办法查看的</strong></p>



<h3>https配置</h3>



<p>如果要开启https访问，要把公私密钥重命名为<code>private.key</code>和<code>public.crt</code>，放到config/certs目录下：</p>



<pre class="wp-block-preformatted">CAs
private.key
public.crt</pre>



<p>在yml配置中加入https配置</p>



<pre class="wp-block-code"><code>environment:
      ...
      - MINIO_SERVER_URL=https://you.domain.com:9090
      - MINIO_BROWSER_REDIRECT_URL=https://you.domain.com:9091
healthcheck:
      test: &#91;"CMD", "curl", "-f", "https://you.domain.com:9090/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3</code></pre>



<p>增加healthcheck用于心跳检测</p>



<p><code>docker compose -f minio.yml up -d</code> 更新镜像</p>



<p>就可以通过https://you.domain.com:9091访问</p>
<p><a rel="nofollow" href="https://wangqianhong.com/2022/03/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e4%ba%8c%ef%bc%89-docker%e9%85%8d%e7%bd%ae/">对象存储minio（二） | docker配置</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wangqianhong.com/2022/03/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e4%ba%8c%ef%bc%89-docker%e9%85%8d%e7%bd%ae/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>对象存储minio（一） &#124; 对象存储</title>
		<link>https://wangqianhong.com/2022/03/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e4%b8%80%ef%bc%89-%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8/</link>
					<comments>https://wangqianhong.com/2022/03/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e4%b8%80%ef%bc%89-%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8/#respond</comments>
		
		<dc:creator><![CDATA[wqh_work]]></dc:creator>
		<pubDate>Fri, 04 Mar 2022 01:39:00 +0000</pubDate>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[minio]]></category>
		<guid isPermaLink="false">https://wangqianhong.com/?p=2992</guid>

					<description><![CDATA[<p>常见的存储方式 块存储 ：像是一块块硬盘直接挂载在主机上，以卷或硬盘形式体现，对于存储的数据内容和格&#8230; <a href="https://wangqianhong.com/2022/03/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e4%b8%80%ef%bc%89-%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8/" class="more-link read-more" rel="bookmark">继续阅读 <span class="screen-reader-text">对象存储minio（一） &#124; 对象存储</span><i class="fa fa-arrow-right"></i></a></p>
<p><a rel="nofollow" href="https://wangqianhong.com/2022/03/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e4%b8%80%ef%bc%89-%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8/">对象存储minio（一） | 对象存储</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<h3>常见的存储方式</h3>



<ul><li><strong>块存储 ：</strong>像是一块块硬盘直接挂载在主机上，以<strong>卷或硬盘</strong>形式体现，对于存储的数据内容和格式一无所知，只关心读取和写入，不关心关系和用途，数据按字节来访问，性能很高，但是太偏向于底层，不利于扩展，常见的有DAS（直连式存储）、SAN（存储区域网络）。</li><li><strong>文件存储：</strong>一般以<strong>文件和目录</strong>形式体现，有多级访问路径和基于文件系统的目录结构，数据以文件的形式进行存取，也可以进行一些高级管理功能，比如文件层面的访问权限控制等。文件存储可以很方便的进行共享，用途也非常广泛，但是其读写速度相对较慢，常见的有NAS(网络附加存储服务器)。</li><li><strong>对象存储：</strong>是一种基于对象的存储设备，综合了上面2种存储的优点，同时具有块存储的高速直接访问和文件存储的分布式数据共享等优势。适合存储海量图片、视频、日志文件、备份数据、容器镜像等。</li></ul>



<h3>对象存储结构</h3>



<p>Bucket：存储空间是用于存储对象（Object）的容器，所有的对象都必须隶属于某个存储空间。</p>



<p>Object：对象（Object）是存储数据的基本单元，和传统的文件系统不同，Object没有文件目录层级结构的关系。</p>



<pre class="wp-block-preformatted">Key：可以理解文件名，是该对象的全局唯一标识符（UID）
Data：用户数据本体
Metadata：它是对象存储一个非常独特的概念，元数据有点类似数据的标签，标签的条目类型和数量是没有限制的，可以是对象的各种描述信息。</pre>



<p>对象存储空间是一个“桶”（bucket），可以往“桶”里面放“对象（Object）”，这个对象包括三个部分：Key、Data、Metadata。</p>



<h3>对象存储优点</h3>



<ul><li><strong>易用性</strong>：提供标准的RESTful API接口、丰富的SDK包、客户端工具、控制台。可以像使用文件一样方便地上传、下载、检索、管理用于Web网站或者移动应用的海量数据</li><li><strong>安全可靠：</strong>数据访问方面，所有的桶和对象都有ACL等访问控制策略，所有的连接都支持SSL加密，OBS系统会对访问用户进行身份鉴权，因为数据是分片存储在不同硬盘上的，所以即使有坏人偷了硬盘，也无法还原出完整的对象数据</li><li><strong>扩展性：</strong>对象存储的所有业务、存储节点采用分布式集群方式工作，各功能节点、集群都可以独立扩容，从理论上来说，某个对象存储系统或单个桶（bucket），并没有总数据容量和对象数量的限制</li></ul>
<p><a rel="nofollow" href="https://wangqianhong.com/2022/03/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e4%b8%80%ef%bc%89-%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8/">对象存储minio（一） | 对象存储</a>最先出现在<a rel="nofollow" href="https://wangqianhong.com">wqh博客</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://wangqianhong.com/2022/03/%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8minio%ef%bc%88%e4%b8%80%ef%bc%89-%e5%af%b9%e8%b1%a1%e5%ad%98%e5%82%a8/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
