目录
- 一、适用于 Linux 的 MinIO 对象存储
- 1.Minio服务安装
- 2.Minio环境配置
- 2.1 创建minio启动文件
- 2.2 创建minio服务文件
- 3.3 启动minio服务
- 3.创建存储桶
- 3.1 进入web端创建存储桶
- 3.2 Minio Client(mc)创建存储桶
- 4. s3fs-fuse 文件挂载
- 4.1 s3fs-fuse配置
- 4.2 执行s3fs挂载
- 4.3 开机自动挂载
- 二、适用于 Docker 的 MinIO 对象存储
- 1.Minio环境配置
- 1.1 拉取Minio基础镜像
- 1.2 创建文件目录
- 1.3 启动Minio服务
- 1.4 访问Minio
- 2.创建Minio存储桶并挂载
- 2.1 创建Dockerfile文本文件
- 2.2 基于Dockerfile构建镜像
- 2.3 启动MC容器创建存储桶
- 3.启动S3FS容器进行挂载
- Minio 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
- Minio是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。
一、适用于 Linux 的 MinIO 对象存储
1.Minio服务安装
- 使用 RPM、DEB 或二进制文件将 MinIO 安装到 64 位 Linux 操作系统上(amd64(Intel或AMD64位处理器))
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio_20240510014138.0.0_amd64.deb -O minio.deb
sudo dpkg -i minio.deb
wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20240510014138.0.0-1.x86_64.rpm -O minio.rpm
sudo dnf install minio.rpm
2.Minio环境配置
2.1 创建minio启动文件
mkdir -p /usr/local/minio
cp minio mc /usr/local/minio/
chmod +x minio mc
mkdir -p /data/miniodata/data{1..4}
mkdir -p /usr/local/minio/log/
touch /usr/local/minio/log/minio_server.log
- 在当前文件夹下创建 run.sh 文件,chmod +x run.sh
#!/bin/bash
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=admin
/usr/local/minio/minio server --console-address ":9090" --address ":9000"
http://IP/data/miniodata/data{1..4} > /usr/local/minio/log/minio_server.log
- export MINIO_ROOT_USER=admin,export MINIO_ROOT_PASSWORD=admin 设置账号密码,登录minio web端使用
- export MINIO_STORAGE_CLASS_STANDARD=EC:3,export MINIO_STORAGE_CLASS_RRS=EC:2 纠删码策略,4块磁盘的可以不设置
- –console-address “:9090” 设置minio的web端访问端口为9090,web端地址: http://IP:9090 , IP和端口根据具体情况自由设置
- –address “:9000” 设置minio的api端口,即http访问图片端口,图片访问地址:http://IP:9000/图片名
- http://IP/data/miniodata/data{1…4} 数据存储目录 /data/miniodata/data{1…4}
- /usr/local/minio/log/minio_server.log 日志存储路径
2.2 创建minio服务文件
vim /usr/lib/systemd/system/minio.service
- minio.service 文件内容如下,Restart=always 表示跟随系统开机启动 minio,让systemd总是重新启动此服务
[Unit]
Description=Minio service
Documentation=https://docs.minio.io/
[Service]
WorkingDirectory=/usr/local/minio/
ExecStart=/usr/local/minio/run.sh
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
3.3 启动minio服务
# 重新加载systemd服务文件
systemctl daemon-reload
# 启动minio服务
systemctl start minio
# 设置 minio 为开机启动
systemctl enable minio
# 查看一下minio是否为running状态,为running状态表示服务启动成功
systemctl status minio
3.创建存储桶
3.1 进入web端创建存储桶
- http://IP:9090 进入web端,通过设置的账号密码登录,然后创建桶 Buckets – Create Buckets (如:ai-pic) 创建完后,进入桶设置 Summary - Access Policy 为 public。
3.2 Minio Client(mc)创建存储桶
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
./mc --help
mc config host add pipeline-minio http://127.0.0.1:9000 admin admin
mc config host remove pipeline-minio
mc config host list
mc mb pipeline-minio/ai-pic
mc ls pipeline-minio
mc rb pipeline-minio/ai-pic
mc rb pipeline-minio/ai-pic --force
mc anonymous set public pipeline-minio/ai-pic
mc stat pipeline-minio/ai-pic
4. s3fs-fuse 文件挂载
4.1 s3fs-fuse配置
- 安装s3fs:Github: https://github.com/s3fs-fuse/s3fs-fuse
df -h | grep s3fs
sudo yum install epel-release
sudo yum install s3fs-fuse
rpm -Uvh s3fs-fuse-1.92-1.el7.x86_64.rpm --nodeps --force
echo "admin:admin" > /root/.passwd-s3fs
chmod 600 /root/.passwd-s3fs
mkdir -p /data/ai-pic
4.2 执行s3fs挂载
s3fs -o passwd_file=/root/.passwd-s3fs -o use_path_request_style -o allow_other -o url=http://IP:9000 -o bucket=ai-pic /data/ai-pic
s3fs -o passwd_file=/root/.passwd-s3fs -o use_path_request_style -o allow_other -o url=http://IP:9000 -o bucket=ai-pic /data/ai-pic -o nonempty
umount /data/ai-pic
fusermount -uz /data/s3fs
- 将数据存入s3fs挂载路径下,即 /data/ai-pic/ 路径下,数据会同步到minio客户端的bucket内,同时可以通过url访问数据,如:http://IP:9000/ai-pic/abc.jpg。
- 如果启docker服务,docker数据挂载路径应为 /data/ai-pic/ ,例如:-v /data/ai-pic:/ai-pic。
4.3 开机自动挂载
systemctl restart minio
s3fs -o passwd_file=/root/.passwd-s3fs -o use_path_request_style -o allow_other -o url=http://IP:9000 -o bucket=ai-pic /data/ai-pic -o nonempty
二、适用于 Docker 的 MinIO 对象存储
1.Minio环境配置
1.1 拉取Minio基础镜像
docker pull minio/minio
docker pull minio/mc
docker pull efrecon/s3fs:1.94
1.2 创建文件目录
mkdir -p -m 777 /data/minio/data
mkdir -p -m 777 /data/minio/config
1.3 启动Minio服务
docker run -d --restart always --name pipeline-minio -e MINIO_ROOT_USER=admin -e MINIO_ROOT_PASSWORD=admin -e MINIO_CONSOLE_PORT=60000 -e MINIO_API_PORT=9999 -v /data/minio:/data minio/minio server /data --console-address ":${MINIO_CONSOLE_PORT}" --address ":${MINIO_API_PORT}"
docker run -d --restart always -p 9090:9090 -p 9000:9000 --name pipeline-minio -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=admin" -v /data/minio/data:/data -v /data/minio/config:/root/.minio minio/minio:latest server /data --console-address ":9090" --address ":9000"
docker run -d --restart always --net=host --name pipeline-minio -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=admin" -v /data/minio/data:/data minio/minio:latest server /data --console-address ":9001" --address ":9000"
-e MINIO_ROOT_USER=admin
:设置Minio服务器的root用户名。-e MINIO_ROOT_PASSWORD=admin
:设置Minio服务器的root密码。-e MINIO_CONSOLE_PORT=60000
:设置Minio控制台端口。-e MINIO_API_PORT=9999
:设置Minio API端口。-v /data/minio:/data
:将本地目录/data/minio
挂载到Minio服务器的/data
目录。server /data
:运行Minio服务器,指定数据目录为/data
,表示启动 Mino 服务器并将数据存储在容器内的 /data 目录。--console-address ":${MINIO_CONSOLE_PORT}"
:设置Minio控制台地址为:${MINIO_CONSOLE_PORT}
。--address ":${MINIO_API_PORT}"
:设置Minio API地址为:${MINIO_API_PORT}
。--console-address ":9090"
:设置Minio控制台地址为:9090
。--address ":9000"
:设置Minio API地址为:9000
。
1.4 访问Minio
- 通过在首选的浏览器中输入MinIO服务器
Console控制台
中的任何主机名或IP地址来访问MinIO控制台,例如http://localhost:9001
curl http://localhost:9090
2.创建Minio存储桶并挂载
- 通过访问Minio客户端(http://10.0.28.83:9090/login )创建存储桶(bucket)
- 从Docker Hub下载Minio客户端镜像,即MinIO Client(mc)镜像,通过mc命令创建存储桶
2.1 创建Dockerfile文本文件
FROM minio/mc
COPY ./docker/create_bucket.sh /create_bucket.sh
RUN chmod +x /create_bucket.sh
ENTRYPOINT ["/create_bucket.sh"]
- create_bucket.sh 创建存储桶执行脚本内容,mc指令
if mc stat pipeline-minio &> /dev/null; thenecho "Minio pipeline-minio already exists."
elsemc config host add pipeline-minio ${MINIO_URL} ${MINIO_ROOT_USER} ${MINIO_ROOT_PASSWORD}echo "Minio pipeline-minio ${MINIO_URL} added."
fi
if mc stat pipeline-minio/${MINIO_BUCKET} &> /dev/null; thenecho "Bucket ${MINIO_BUCKET} already exists."
elsemc mb pipeline-minio/${MINIO_BUCKET}
fi
mc anonymous set public pipeline-minio/${MINIO_BUCKET}
2.2 基于Dockerfile构建镜像
docker build -t local.harbor.com/pipeline-python-mc:v1.0 -f ./docker/MC.Dockerfile .
2.3 启动MC容器创建存储桶
docker run -d --restart no --name pipeline-mc -e MINIO_ROOT_USER=admin -e MINIO_ROOT_PASSWORD=admin -e MINIO_BUCKET=ai-pic -e MINIO_URL=http://127.0.0.1:9000 local.harbor.com/pipeline-python-mc:v1.0
3.启动S3FS容器进行挂载
docker run -d --restart always --name pipeline-s3fs --privileged=true -v /data/s3fs:/opt/s3fs/bucket:rshared -e AWS_S3_ACCESS_KEY_ID=admin -e AWS_S3_SECRET_ACCESS_KEY=admin -e AWS_S3_BUCKET=ai-pic -e AWS_S3_URL=http://127.0.0.1:9000 -e S3FS_ARGS=use_path_request_style,allow_other -e S3FS_DEBUG=1 efrecon/s3fs:1.94
docker run -d --restart=always --net=host --privileged --name s3fs \--device /dev/fuse \--cap-add SYS_ADMIN \--security-opt "apparmor=unconfined" \--env "AWS_S3_BUCKET={bucketName}" \--env "AWS_S3_ACCESS_KEY_ID=admin" \--env "AWS_S3_SECRET_ACCESS_KEY=admin" \--env "AWS_S3_URL=http://localhost:9000" \--env UID=$(id -u) \--env GID=$(id -g) \--env S3FS_DEBUG=1 \--env "S3FS_ARGS=use_path_request_style,allow_other,no_check_certificate,umask=000,nonempty" \-v {mountPath}:/opt/s3fs/bucket:rshared \efrecon/s3fs:1.91
--privileged true
:给容器授予宿主机的特权-v /data/s3fs:/opt/s3fs/bucket:rshared
:将宿主机的/data/s3fs
目录挂载到容器的/opt/s3fs/bucket
目录,并设置为读写共享-e AWS_S3_ACCESS_KEY_ID=admin
:设置AWS S3的访问密钥ID为admin
。-e AWS_S3_SECRET_ACCESS_KEY=admin
:设置AWS S3的密钥访问权限为admin
。-e AWS_S3_BUCKET=ai-pic
:设置AWS S3的桶名称为ai-pic
。-e AWS_S3_URL=http://127.0.0.1:9999
:设置AWS S3的URL为http://127.0.0.1:9999
。-e S3FS_ARGS=use_path_request_style,allow_other
:设置S3FS的参数为use_path_request_style,allow_other
。