centos7下Laravel Minio 安装使用+supervisor后台服务监控

一 centos7 安装minio + supervisor

1 创建目录

#安装mini目录
mkdir /usr/local/minio 
#存放数据
mkdir /usr/local/minio/data 

2 进入安装目录

cd /usr/local/minio

3下载minio

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

4 赋权限

chmod +x minio

5 配置 supervisor

[program:minio]
command = /usr/local/minio/minio server /usr/local/minio/data
user = root
;supervisor启动的时候是否随着同时启动,默认True
autostart = true
;程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
autorestart = true
;这个选项是子进程启动多少秒之后,此时状态如果是running,则我们认为启动成功了。默认值为1
startsecs = 5
;把stderr重定向到stdout,默认 false
redirect_stderr = true
;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
stopasgroup = true
;默认为false,向进程组发送kill信号,包括子进程
killasgroup = true
;stdout日志文件大小,默认 50MB
stdout_logfile_maxbytes = 50MB
;stdout日志文件备份数
stdout_logfile_backups = 10
;日志输出
stdout_logfile = /var/log/supervisor/minio.log

supervisor修改配置文件之后,执行如下命令

supervisorctl reload

6 开放公共链接

如果前端想通过文件链接直接下载浏览图片,需要配置minio bucket策略,默认情况下,minio没有配置匿名读写的权限。

如下图所示,在bucket菜单栏中点击Edit policy,新增Read权限,即可通过链接的方式直接访问该文件。

访问格式 域名+端口+bucket名称+文件名

centos7下Laravel Minio 安装使用+supervisor后台服务监控_第1张图片
centos7下Laravel Minio 安装使用+supervisor后台服务监控_第2张图片
7修改MINIO_ACCESS_KEY、 MINIO_SECRET_KEY

#Access key长度最小是5个字符
export MINIO_ACCESS_KEY=xxxxxx
#Secret key长度最小是8个字符
export MINIO_SECRET_KEY=12345678

注:如果使用surpervisor已经启动了minio,需要关闭surpervisor的所有后台任务,然后kill掉surpervisor,最后重启surpervisor,相关命令如下:

#supervisorctl 停止所有后台任务
supervisorctl stop all

#查看supervisor PID
pgrep supervisor

#杀掉supervisor进程
kill -9 xxxpid

#重启supervisor
supervisord -c /etc/supervisord.conf

二 laravel下minio的使用

2.1 minio 简介

minio是基于Apache Licence v2.0开源协议的对象存储服务,兼容亚马逊S3云存储服务接口,minio官方只提供了js、java、python、Golang、.Net的SDK,并未提供PHP版的SDK,不过因为兼容亚马逊S3云存储服务接口,所以可以使用亚马逊提供的aws-sdk-php SDK,具体可参考Minio Cookbook 中文版。

AWS针对laravel使用aws-sdk-php又做了再次封装,github地址为aws-sdk-php-laravel。

centos7下Laravel Minio 安装使用+supervisor后台服务监控_第3张图片

2.2 安装aws-sdk-php-laravel三方库

1 composer.json 添加

{
     
    "require": {
     
        "aws/aws-sdk-php-laravel": "~3.0"
    }
}

执行composer 更新命令

php composer.phar update

2 配置config/app.php 和 AWS Facade

'providers' => array(
        // ...
        Aws\Laravel\AwsServiceProvider::class,
    )
'aliases' => array(
        // ...
        'AWS' => Aws\Laravel\AwsFacade::class,
    )

3 生成configuration文件

php artisan vendor:publish  --provider="Aws\Laravel\AwsServiceProvider"

centos7下Laravel Minio 安装使用+supervisor后台服务监控_第4张图片

  • AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY 就是minio web客户端登录时使用的 Access
    Key和Secret Key.
  • endpoint 新创建的配置文件默认没有这个配置项,需要手动添加(至少我是这样的),添加的就是minio的访问地址
  • 具体的配置项可以参考AWS SDK for PHP版本 3 的配置

2.3 SDK使用

aws-sdk-php-laravel中给的demo比较简单,实际开发可能会使用更多的功能,具体参考AWS SDK for PHP 3.x。

下面给出几个我自己编写的工具方法,仅供参考,其他的都是一个套路。

1 多张图片同时上传

/**
     * 多图上传
     * @param $request
     * @param string $field
     * @return array|null
     */
    public function multipleStoragePhoto($request, $field = "uploadFile")
    {
     

        if (!$request->hasFile($field)) {
     

            return null;
        }

        $files = $request->file('uploadFile');
        #路径数组
        $keyArr = array();
        $s3 = AwsFacade::createClient('s3');

        foreach ($files as $photo) {
     

            if ($photo->isValid()) {
     

                //文件扩展名
                $extend = $photo->extension();
                # 自定义文件名
                $fileName = date('Ymd') . '-' . uniqid() . '.' . $extend;

                $s3_return = $s3->putObject([
                    'Bucket' => 'bucket_test', //存储桶名称
                    'Key' => $fileName, //文件名(包括后缀名)
                    'Body' => file_get_contents($photo) //要上传的文件
                ]);

                if ($s3_return['@metadata']['statusCode'] == 200) {
     

                    $keyArr[] = 'bucket_test' . '/' . $fileName;
                } else {
     
                    \Log::info('图片上传失败');
                    continue;
                }

            }

        }

        return $keyArr;
    }

2 删除图片

/**
     * 删除图片
     * @param $url
     */
    public function deletePhoto($url)
    {
     
        $s3 = AwsFacade::createClient('s3');

        $s3->deleteObject([
            'Bucket' => 'bucket_test', //存储桶名称
            'Key' => strrchr($url, '/'), //文件名 去掉time-management
        ]);

    }

3 批量删除图片

/**
     * 删除多张图片
     * @param $urls
     */
    public function deletePhotos($urls)
    {
     
        $keys = array();
        foreach ($urls as $url) {
     

            $keys[] = array('Key' => strrchr($url, '/'));
        }

        $s3 = AwsFacade::createClient('s3');

        $s3->deleteObjects([
            'Bucket' => 'bucket_test', //存储桶名称 
            'Delete' => [ 'Objects' => $keys ] ]); 
}

4 批量复制

/**
     * 批量复制图片
     * @param $sourceUrls
     * @return array key数组
     */
    public function copyPhotos($sourceUrls)
    {
     

        $keyArr = array();
        $s3 = AwsFacade::createClient('s3');

        foreach ($sourceUrls as $sourceUrl) {
     

            #文件扩展名
            $extend = strrchr($sourceUrl, '.');

            # 自定义文件名
            $fileName = date('Ymd') . '-' . uniqid() . $extend;

            $s3->copyObject([
                'Bucket' => 'bucket_test', //存储桶名称
                'CopySource' => $sourceUrl,
                'Key' => $fileName,
            ]);

            $keyArr[] = 'bucket_test' . '/' . $fileName;

        }


        return $keyArr;

    }

你可能感兴趣的:(Laravel,php,laravel,分布式存储,linux)