实现开源minio-AWS-S3存储

2017/10/13 Linux

minio 简介

对象储存是将文件按对象储存, 每一个对象包含文件原始数据与元数据. 综合了块储存与文件储存的优势, 具有速度快,方便共

享。代表性的对象储存系统有Amazon S3、阿里云 OSS。minio是一个开源的对象储存系统,支持Windows、Linux平台,兼容、

Amazon S3 API。

minio 服务器搭建

下载 Minio

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

赋予可执行权限 chmod +x minio

现在,将文件移动到Minio的系统启动脚本期望找到的/usr/local/bin目录中:

mv minio /usr/local/bin

以后台方式启动一个 minio 服务器

nohup minio server /home/minio > /home/minio/minio.log 2>&1 &

192.168.10.2 服务器的minio 信息

Endpoint:  http://192.168.10.2:9000  http://127.0.0.1:9000
AccessKey: UQF6IFAOBQDYAL4ZHYU7 
SecretKey: f57wQZg/MbrnMOB9FTJ0hWX0pwUnjMlWOhLd+vKh 

Browser Access:
   http://192.168.10.2:9000  http://127.0.0.1:9000

Command-line Access: https://docs.minio.io/docs/minio-client-quickstart-guide
   $ mc config host add myminio http://192.168.10.2:9000 UQF6IFAOBQDYAL4ZHYU7 f57wQZg/MbrnMOB9FTJ0hWX0pwUnjMlWOhLd+vKh

Object API (Amazon S3 compatible):
   Go:         https://docs.minio.io/docs/golang-client-quickstart-guide
   Java:       https://docs.minio.io/docs/java-client-quickstart-guide
   Python:     https://docs.minio.io/docs/python-client-quickstart-guide
   JavaScript: https://docs.minio.io/docs/javascript-client-quickstart-guide
   .NET:       https://docs.minio.io/docs/dotnet-client-quickstart-guide

Drive Capacity: 435 GiB Free, 463 GiB Total

mc 客户端通过 config host add 指令增加 minio 服务器,其实质操作是向 ~/.mc/config.json 文件中加入新的 json 串,以下为增加一个 minio 服务器示例,相关参数可从服务端输出日志中找到

返回创建成功后可登陆 ui 查看

minio 服务器ui

mc客户端操作

首先下载 mc 客户端

wget https://dl.minio.io/client/mc/release/linux-amd64/mc

增加可执行权限

chmod +x mc

现在,将文件移动到Minio的系统启动脚本期望找到的/usr/local/bin目录中:

mv mc /usr/local/bin

minio 服务开机自启

编辑/etc/rc.d/rc.local加入要执行的命令。

nohup minio server /home/minio > /home/minio/minio.log 2>&1 &

使用mino

mc 客户端通过 config host add 指令增加 minio 服务器,其实质操作是向 ~/.mc/config.json 文件中加入新的 json 串,以下为增加一个 minio 服务器示例,

相关参数可从服务端输出日志中找到

mc config host add myminio http://192.168.10.2:9000 UQF6IFAOBQDYAL4ZHYU7 f57wQZg/MbrnMOB9FTJ0hWX0pwUnjMlWOhLd+vKh

在mymino 服务器上增加桶index

mc mb myminio/index

在myminio 服务器上复制文件进入桶

mc cp minio.log myminio/index

在myminio 服务器上查看桶

mc ls myminio

示例:将匿名存储桶策略设置为仅下载 现在,子目录下的对象可以公开访问

mc policy download myminio/index

minio nginx 配置

server
    {
        #listen 80 default_server;
        listen 80;
        listen 443 ssl;
        ssl        on;
        ssl_certificate         XXXX.pem;
        ssl_certificate_key     XXXX.key;
        #listen [::]:80 default_server ipv6only=on;
        server_name minio.com;

        #URL重写  目录/a 下代理到index桶下/a路径
        location /a {
	proxy_pass http://localhost:9000/index/a;
       	proxy_set_header Host $host;
      	proxy_set_header X-Real-IP $remote_addr;
       	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       	proxy_set_header X-Forwarded-Proto $scheme;
	}        
}

PHP上传文件至minio 操作

参考

aws-sdk-php:https://github.com/aws/aws-sdk-php/releases

需要aws的sdk文件

wget https://github.com/aws/aws-sdk-php/releases/download/3.36.26/aws.phar

代码

function upload_minio($pre_path,$file,$class){

    //因为a/b/c 是名字实际不存在
    $real_file = substr($file,6);

    require_once './aws.phar';
    $class = new Aws\S3\S3Client([
        'version' => 'latest',
        'region'  => 'us-east-1',
        'endpoint' => 'http://127.0.0.1:9000',
        'use_path_style_endpoint' => true,
        'credentials' => [
            'key'    => 'UQF6IFAOBQDYAL4ZHYU7',
            'secret' => 'f57wQZg/MbrnMOB9FTJ0hWX0pwUnjMlWOhLd+vK',
        ],
    ]);

    try{
        $class->putObject([
            'Bucket' => 'index',
            'Key'    => $file,
            'Body'   => fopen($pre_path.$real_file, 'r'),
            'ACL'    => 'public-read-write',
        ]);
    }catch (Exception $e){
//        echo "There was an error uploading the file.\n";
        return false;
    }
//    echo "OK";
    return true;
}

Search

    Post Directory