修正仓库,整理完成
This commit is contained in:
parent
d555b6bfe3
commit
f72c440587
|
@ -19,7 +19,18 @@ esc :wq保存退出
|
|||
然后重启docker服务
|
||||
|
||||
```shell
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl restart docker.service
|
||||
systemctl daemon-reload && systemctl restart docker
|
||||
```
|
||||
|
||||
然后直接在命令行客户端输入如下命令,IP地址改为自己的
|
||||
|
||||
|
||||
```
|
||||
curl http://IP地址:2375/version
|
||||
```
|
||||
|
||||
或者在浏览器直接访问,IP地址改为自己的
|
||||
|
||||
```
|
||||
http://IP地址:2375/version
|
||||
```
|
||||
|
|
|
@ -1,62 +0,0 @@
|
|||
|
||||
|
||||
开启端口命令 (--permanent永久生效,没有此参数重启后失效)
|
||||
|
||||
```
|
||||
firewall-cmd --zone=public --add-port=2375/tcp --permanent
|
||||
```
|
||||
|
||||
重新载入
|
||||
|
||||
```
|
||||
firewall-cmd --reload
|
||||
```
|
||||
|
||||
使用 vim 编辑docker服务配置文件
|
||||
|
||||
```
|
||||
vim /lib/systemd/system/docker.service
|
||||
```
|
||||
|
||||
找到如下配置行
|
||||
|
||||
```
|
||||
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
|
||||
```
|
||||
|
||||
将其注释掉或者直接删除,替换成下面的配置行.然后保存退出
|
||||
|
||||
```
|
||||
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
|
||||
```
|
||||
|
||||
重新加载docker配置并重启服务
|
||||
|
||||
```
|
||||
systemctl daemon-reload && systemctl restart docker
|
||||
```
|
||||
|
||||
然后直接在命令行客户端输入如下命令,IP地址改为自己的
|
||||
|
||||
|
||||
```
|
||||
curl http://IP地址:2375/version
|
||||
```
|
||||
|
||||
或者在浏览器直接访问,IP地址改为自己的
|
||||
|
||||
```
|
||||
http://IP地址:2375/version
|
||||
```
|
||||
|
||||
|
||||
```xml
|
||||
{
|
||||
"insecure-registries": [
|
||||
"10.211.55.2:8082"
|
||||
],
|
||||
"registry-mirrors": [
|
||||
"10.211.55.2:8082"
|
||||
]
|
||||
}
|
||||
```
|
202
环境/安装教程/Minio.md
202
环境/安装教程/Minio.md
|
@ -1,4 +1,97 @@
|
|||
```shell
|
||||
## MinIO是什么?
|
||||
|
||||
![](https://lsky.hhdxw.top/imghub/2024/01/image-202401101704861743.png)
|
||||
|
||||
官方解释:MinIO 是一个基于Apache License v2.0开源协议的[对象存储](https://cloud.tencent.com/product/cos?from_column=20065&from=20065)服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
|
||||
|
||||
MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。
|
||||
|
||||
## MinIO有哪些优势
|
||||
|
||||
### 1. 开发文档全面
|
||||
|
||||
MinIO作为一款基于Golang 编程语言开发的一款高性能的分布式式存储方案的开源项目,有十分完善的官方文档。。
|
||||
|
||||
官网文档地址:https://docs.min.io/cn/
|
||||
|
||||
### 2.高性能
|
||||
|
||||
MinIO号称是目前速度最快的对象存储服务器。在标准硬件上,对象存储的读/写速度最高可以高达183 GB/s和171 GB/s。对象存储可以作为主存储层,用来处理Spark、Presto、TensorFlow、H2O.ai等各种复杂工作负载以及成为Hadoop HDFS的替代品。
|
||||
|
||||
MinIO用作云原生应用程序的主要存储,和传统对象存储相比,云原生应用程序需要更高的吞吐量和更低的延迟。而这些都是MinIO能够达成的性能指标。
|
||||
|
||||
### 3.容器化集成方便
|
||||
|
||||
MinIO提供了与k8s、etcd、docker等主流容器化技术深度集成方案。
|
||||
|
||||
## 安装MinIo服务
|
||||
|
||||
想要安装Minio有两种方案,第一种是直接在服务器上安装,还有一种是使用Docker快速部署。
|
||||
|
||||
官方文档:https://www.minio.org.cn/docs/cn/minio
|
||||
|
||||
### 直接安装
|
||||
|
||||
安装包下载页面:https://dl.min.io/server/minio/release/,我们需要选择好对应架构和系统的安装包,比如Ubuntu/Debian系统下,我们可以像这样安装:
|
||||
|
||||
```sh
|
||||
wget https://dl.min.io/server/minio/release/linux-amd64/minio_20230831153116.0.0_amd64.deb -O minio.deb
|
||||
sudo dpkg -i minio.deb
|
||||
```
|
||||
|
||||
在CentOS/Redhat(RHEL)系统下,可以像这样安装:
|
||||
|
||||
```sh
|
||||
wget https://dl.min.io/server/minio/release/linux-amd64/minio-20230831153116.0.0.x86_64.rpm -O minio.rpm
|
||||
sudo dnf install minio.rpm
|
||||
```
|
||||
|
||||
安装完成后,我们需要创建一个用于存放minio文件数据的目录:
|
||||
|
||||
```sh
|
||||
sudo mkdir /mnt/minio
|
||||
```
|
||||
|
||||
然后创建一个minio使用的用户,并为此用户分配对应目录的访问权限:
|
||||
|
||||
```sh
|
||||
groupadd -r minio-user
|
||||
useradd -M -r -g minio-user minio-user
|
||||
chown minio-user:minio-user /mnt/minio
|
||||
```
|
||||
|
||||
接着我们需要创建Minio的配置文件:
|
||||
|
||||
```sh
|
||||
sudo vim /etc/default/minio
|
||||
```
|
||||
|
||||
编写以下内容到配置文件中:
|
||||
|
||||
```properties
|
||||
#系统管理员账号和密码
|
||||
MINIO_ROOT_USER=minio
|
||||
MINIO_ROOT_PASSWORD=password
|
||||
#设置用于存储数据的目录
|
||||
MINIO_VOLUMES="/mnt/minio"
|
||||
#项目接口访问地址
|
||||
MINIO_SERVER_URL="http://0.0.0.0:9000"
|
||||
#配置其他选项,比如后台管理系统的地址
|
||||
MINIO_OPTS="--console-address 0.0.0.0:9090"
|
||||
```
|
||||
|
||||
配置完成之后就可以启动Minio服务了:
|
||||
|
||||
```sh
|
||||
sudo systemctl enable minio.service
|
||||
sudo systemctl start minio.service
|
||||
```
|
||||
|
||||
### 使用Docker安装
|
||||
|
||||
对于各位小伙伴本地开发测试,这里更推荐使用Docker镜像安装,非常简单快捷,本地安装好Docker客户端之后,只需要执行以下命令就能快速部署:
|
||||
|
||||
```sh
|
||||
docker run -p 9000:9000 -p 9090:9090 --name minio \
|
||||
-d --restart=always \
|
||||
-e "MINIO_ACCESS_KEY=minio" \
|
||||
|
@ -7,3 +100,110 @@ docker run -p 9000:9000 -p 9090:9090 --name minio \
|
|||
minio/minio server \
|
||||
/data --console-address ":9090" -address ":9000"
|
||||
```
|
||||
|
||||
非常方便快捷。
|
||||
|
||||
------
|
||||
|
||||
## 使用Java操作对象存储
|
||||
|
||||
前面我们搭建好了对象存储服务,接着就可以开始愉快地使用了。
|
||||
|
||||
### 基本使用
|
||||
|
||||
Minio已经为我们提供了封装好的依赖,我们只需要直接使用即可:
|
||||
|
||||
```xml
|
||||
<dependency>
|
||||
<groupId>io.minio</groupId>
|
||||
<artifactId>minio</artifactId>
|
||||
<version>8.3.9</version>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
接着我们需要创建一个Minio客户端用于访问对象存储服务器:
|
||||
|
||||
```java
|
||||
MinioClient client = MinioClient.builder()
|
||||
.endpoint("http://localhost:9000") //对象存储服务地址,注意是9000那个端口
|
||||
.credentials("minio", "password") //账户直接使用管理员
|
||||
.build();
|
||||
```
|
||||
|
||||
对于Java的相关操作,可以说非常全面,包含对桶的操作、对象操作等等,文档地址:https://www.minio.org.cn/docs/cn/minio/linux/developers/java/API.html,这里我们先演示一下文件上传:
|
||||
|
||||
```java
|
||||
//首先找到我们需要上传的文件
|
||||
File file = new File("/Users/nagocoler/Downloads/test.jpg");
|
||||
//构造一个输入流用于文件传输
|
||||
FileInputStream stream = new FileInputStream(file);
|
||||
//填写上传的相关参数,使用PutObjectArgs的Builder来完成
|
||||
PutObjectArgs put = PutObjectArgs.builder()
|
||||
.bucket("test") //设置需要上传的桶名称
|
||||
.object("666.jpg") //设置上传后保存的文件名称
|
||||
.stream(stream, file.length(), -1) //配置流以及大小还有分片大小
|
||||
.build();
|
||||
client.putObject(put); //使用putObject方法完成上传操作
|
||||
```
|
||||
|
||||
这样就可以将文件上传到对象存储服务器中了。
|
||||
|
||||
接着是下载文件:
|
||||
|
||||
```java
|
||||
//填写下载相关的参数,使用GetObjectArgs来完成
|
||||
GetObjectArgs get = GetObjectArgs.builder()
|
||||
.bucket("test") //设置需要下载的桶名称
|
||||
.object("666.jpg") //设置下载后保存的文件名称
|
||||
.build();
|
||||
GetObjectResponse response = client.getObject(get);
|
||||
//使用输出流保存下载的文件到本地
|
||||
FileOutputStream stream = new FileOutputStream("/Users/nagocoler/Downloads/download.png");
|
||||
stream.write(response.readAllBytes());
|
||||
stream.close();
|
||||
```
|
||||
|
||||
最后是删除桶里的文件:
|
||||
|
||||
```java
|
||||
RemoveObjectArgs remove = RemoveObjectArgs.builder()
|
||||
.bucket("test") //设置需要删除文件的桶名称
|
||||
.object("666.jpg") //设置删除的文件名称
|
||||
.build();
|
||||
client.removeObject(remove); //删就完事
|
||||
```
|
||||
|
||||
### 服务器文件上传和下载
|
||||
|
||||
实例代码:
|
||||
|
||||
```java
|
||||
@RestController
|
||||
@RequestMapping("/")
|
||||
public class FileController {
|
||||
|
||||
@Resource
|
||||
MinioClient client;
|
||||
|
||||
@PostMapping("upload")
|
||||
public String upload(@RequestParam("file") MultipartFile file) throws Exception {
|
||||
InputStream stream = file.getInputStream();
|
||||
String name = UUID.randomUUID().toString();
|
||||
PutObjectArgs args = PutObjectArgs.builder()
|
||||
.bucket("test")
|
||||
.object("upload/"+name)
|
||||
.stream(stream, file.getSize(), -1)
|
||||
.build();
|
||||
client.putObject(args);
|
||||
return name;
|
||||
}
|
||||
|
||||
@GetMapping("file/{name}")
|
||||
public void file(@PathVariable("name") String name,
|
||||
HttpServletResponse response) throws Exception{
|
||||
GetObjectResponse object = client.getObject(GetObjectArgs.builder().bucket("test").object("upload/"+name).build());
|
||||
ServletOutputStream stream = response.getOutputStream();
|
||||
stream.write(object.readAllBytes());
|
||||
}
|
||||
}
|
||||
```
|
|
@ -1 +0,0 @@
|
|||
yufei83721@gmail.com
|
|
@ -0,0 +1,231 @@
|
|||
整合 elasticsearch mongodb graylog skywalking-oap skywalking -ui
|
||||
|
||||
```yaml
|
||||
version: "3"
|
||||
services:
|
||||
elasticsearch:
|
||||
image: elasticsearch:7.17.5
|
||||
container_name: elasticsearch
|
||||
ports:
|
||||
- "9200:9200"
|
||||
- "9300:9300"
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -sf http://localhost:9200/_cluster/health || exit 1"] #⼼跳检测,成功之后不再执⾏后⾯的退出
|
||||
interval: 60s #⼼跳检测间隔周期
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 60s #⾸次检测延迟时间
|
||||
environment:
|
||||
discovery.type: single-node #单节点模式
|
||||
ingest.geoip.downloader.enabled: "false"
|
||||
bootstrap.memory_lock: "true"
|
||||
ES_JAVA_OPTS: "-Xms512m -Xmx512m"
|
||||
TZ: "Asia/Shanghai"
|
||||
xpack.security.enabled: "false" #单机模式
|
||||
ulimits:
|
||||
memlock:
|
||||
soft: -1
|
||||
hard: -1
|
||||
mongodb:
|
||||
image: mongo:4.4
|
||||
container_name: mongodb
|
||||
restart: always
|
||||
ports:
|
||||
- "27017:27017"
|
||||
environment:
|
||||
- MONGO_INITDB_ROOT_USERNAME=xlcs
|
||||
- MONGO_INITDB_ROOT_PASSWORD=123321
|
||||
graylog:
|
||||
image: graylog/graylog:4.3
|
||||
container_name: graylog
|
||||
ports:
|
||||
- "9000:9000"
|
||||
- "12201:12201/udp"
|
||||
environment:
|
||||
- GRAYLOG_HTTP_EXTERNAL_URI=http://10.211.55.50:9000/
|
||||
- GRAYLOG_ELASTICSEARCH_HOSTS=http://10.211.55.50:9200/
|
||||
- GRAYLOG_ROOT_TIMEZONE=Asia/Shanghai
|
||||
- GRAYLOG_WEB_ENDPOINT_URI=http://10.211.55.50:9000/api
|
||||
- GRAYLOG_PASSWORD_SECRET=somepasswordpepper
|
||||
- GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
|
||||
- GRAYLOG_MONGODB_URI=mongodb://xlcs:123321@10.211.55.50:27017/admin
|
||||
depends_on:
|
||||
- elasticsearch
|
||||
- mongodb
|
||||
links:
|
||||
- elasticsearch
|
||||
- mongodb
|
||||
|
||||
skywalking-oap:
|
||||
image: apache/skywalking-oap-server:9.3.0
|
||||
container_name: skywalking-oap
|
||||
depends_on:
|
||||
elasticsearch:
|
||||
condition: service_healthy
|
||||
links:
|
||||
- elasticsearch
|
||||
environment:
|
||||
SW_HEALTH_CHECKER: default
|
||||
SW_STORAGE: elasticsearch
|
||||
SW_STORAGE_ES_CLUSTER_NODES: 10.211.55.50:9200
|
||||
JAVA_OPTS: "-Xms2048m -Xmx2048m"
|
||||
TZ: Asia/Shanghai
|
||||
SW_TELEMETRY: prometheus
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "/skywalking/bin/swctl ch"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 10s
|
||||
restart: on-failure
|
||||
ports:
|
||||
- "11800:11800"
|
||||
- "12800:12800"
|
||||
|
||||
skywalking-ui:
|
||||
image: apache/skywalking-ui:9.3.0
|
||||
container_name: skywalking-ui
|
||||
depends_on:
|
||||
skywalking-oap:
|
||||
condition: service_healthy
|
||||
links:
|
||||
- skywalking-oap
|
||||
ports:
|
||||
- "8080:8080"
|
||||
environment:
|
||||
SW_OAP_ADDRESS: http://10.211.55.50:12800
|
||||
SW_HEALTH_CHECKER: default
|
||||
TZ: Asia/Shanghai
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -sf http://localhost:8080 || exit 1"] #⼼跳检测,成功之后不再执⾏后⾯的退出
|
||||
interval: 60s #⼼跳检测间隔周期
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 60s #⾸次检测延迟时间
|
||||
```
|
||||
|
||||
|
||||
|
||||
```yaml
|
||||
version: "3"
|
||||
services:
|
||||
elasticsearch:
|
||||
image: elasticsearch:7.17.5
|
||||
container_name: elasticsearch
|
||||
ports:
|
||||
- "9200:9200"
|
||||
- "9300:9300"
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -sf http://localhost:9200/_cluster/health || exit 1"] #⼼跳检测,成功之后不再执⾏后⾯的退出
|
||||
interval: 60s #⼼跳检测间隔周期
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 60s #⾸次检测延迟时间
|
||||
volumes:
|
||||
- es-data:/usr/share/elasticsearch/data
|
||||
- es-plugins:/usr/share/elasticsearch/plugins
|
||||
environment:
|
||||
discovery.type: single-node #单节点模式
|
||||
ingest.geoip.downloader.enabled: "false"
|
||||
bootstrap.memory_lock: "true"
|
||||
ES_JAVA_OPTS: "-Xms512m -Xmx512m"
|
||||
TZ: "Asia/Shanghai"
|
||||
xpack.security.enabled: "false" #单机模式
|
||||
privileged: true
|
||||
ulimits:
|
||||
memlock:
|
||||
soft: -1
|
||||
hard: -1
|
||||
mongodb:
|
||||
image: mongo:4.4
|
||||
container_name: mongodb
|
||||
restart: always
|
||||
ports:
|
||||
- "27017:27017"
|
||||
volumes:
|
||||
- mongodb:/data/db
|
||||
environment:
|
||||
- MONGO_INITDB_ROOT_USERNAME=xlcs
|
||||
- MONGO_INITDB_ROOT_PASSWORD=123321
|
||||
|
||||
graylog:
|
||||
image: graylog/graylog:4.3
|
||||
container_name: graylog
|
||||
ports:
|
||||
- "9000:9000"
|
||||
- "12201:12201/udp"
|
||||
environment:
|
||||
- GRAYLOG_HTTP_EXTERNAL_URI=http://10.211.55.50:9000/
|
||||
- GRAYLOG_ELASTICSEARCH_HOSTS=http://10.211.55.50:9200/
|
||||
- GRAYLOG_ROOT_TIMEZONE=Asia/Shanghai
|
||||
- GRAYLOG_WEB_ENDPOINT_URI=http://10.211.55.50:9000/api
|
||||
- GRAYLOG_PASSWORD_SECRET=somepasswordpepper
|
||||
- GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
|
||||
- GRAYLOG_MONGODB_URI=mongodb://xlcs:123321@10.211.55.50:27017/admin
|
||||
depends_on:
|
||||
- elasticsearch
|
||||
- mongodb
|
||||
links:
|
||||
- elasticsearch
|
||||
- mongodb
|
||||
|
||||
skywalking-oap:
|
||||
image: apache/skywalking-oap-server:9.3.0
|
||||
container_name: skywalking-oap
|
||||
depends_on:
|
||||
elasticsearch:
|
||||
condition: service_healthy
|
||||
links:
|
||||
- elasticsearch
|
||||
environment:
|
||||
SW_HEALTH_CHECKER: default
|
||||
SW_STORAGE: elasticsearch
|
||||
SW_STORAGE_ES_CLUSTER_NODES: 10.211.55.50:9200
|
||||
JAVA_OPTS: "-Xms2048m -Xmx2048m"
|
||||
TZ: Asia/Shanghai
|
||||
SW_TELEMETRY: prometheus
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "/skywalking/bin/swctl ch"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 10s
|
||||
restart: on-failure
|
||||
ports:
|
||||
- "11800:11800"
|
||||
- "12800:12800"
|
||||
|
||||
skywalking-ui:
|
||||
image: apache/skywalking-ui:9.3.0
|
||||
container_name: skywalking-ui
|
||||
depends_on:
|
||||
skywalking-oap:
|
||||
condition: service_healthy
|
||||
links:
|
||||
- skywalking-oap
|
||||
ports:
|
||||
- "8080:8080"
|
||||
environment:
|
||||
SW_OAP_ADDRESS: http://10.211.55.50:12800
|
||||
SW_HEALTH_CHECKER: default
|
||||
TZ: Asia/Shanghai
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -sf http://localhost:8080 || exit 1"] #⼼跳检测,成功之后不再执⾏后⾯的退出
|
||||
interval: 60s #⼼跳检测间隔周期
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 60s #⾸次检测延迟时间
|
||||
|
||||
kibana:
|
||||
image: kibana:7.17.5
|
||||
container_name: kibana
|
||||
ports:
|
||||
- "5601:5601"
|
||||
links:
|
||||
- elasticsearch:elasticsearch
|
||||
volumes:
|
||||
es-data:
|
||||
es-plugins:
|
||||
mongodb:
|
||||
```
|
||||
|
|
@ -1,209 +0,0 @@
|
|||
## MinIO是什么?
|
||||
|
||||
![](https://lsky.hhdxw.top/imghub/2024/01/image-202401101704861743.png)
|
||||
|
||||
官方解释:MinIO 是一个基于Apache License v2.0开源协议的[对象存储](https://cloud.tencent.com/product/cos?from_column=20065&from=20065)服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
|
||||
|
||||
MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。
|
||||
|
||||
## MinIO有哪些优势
|
||||
|
||||
### 1. 开发文档全面
|
||||
|
||||
MinIO作为一款基于Golang 编程语言开发的一款高性能的分布式式存储方案的开源项目,有十分完善的官方文档。。
|
||||
|
||||
官网文档地址:https://docs.min.io/cn/
|
||||
|
||||
### 2.高性能
|
||||
|
||||
MinIO号称是目前速度最快的对象存储服务器。在标准硬件上,对象存储的读/写速度最高可以高达183 GB/s和171 GB/s。对象存储可以作为主存储层,用来处理Spark、Presto、TensorFlow、H2O.ai等各种复杂工作负载以及成为Hadoop HDFS的替代品。
|
||||
|
||||
MinIO用作云原生应用程序的主要存储,和传统对象存储相比,云原生应用程序需要更高的吞吐量和更低的延迟。而这些都是MinIO能够达成的性能指标。
|
||||
|
||||
### 3.容器化集成方便
|
||||
|
||||
MinIO提供了与k8s、etcd、docker等主流容器化技术深度集成方案。
|
||||
|
||||
## 安装MinIo服务
|
||||
|
||||
想要安装Minio有两种方案,第一种是直接在服务器上安装,还有一种是使用Docker快速部署。
|
||||
|
||||
官方文档:https://www.minio.org.cn/docs/cn/minio
|
||||
|
||||
### 直接安装
|
||||
|
||||
安装包下载页面:https://dl.min.io/server/minio/release/,我们需要选择好对应架构和系统的安装包,比如Ubuntu/Debian系统下,我们可以像这样安装:
|
||||
|
||||
```sh
|
||||
wget https://dl.min.io/server/minio/release/linux-amd64/minio_20230831153116.0.0_amd64.deb -O minio.deb
|
||||
sudo dpkg -i minio.deb
|
||||
```
|
||||
|
||||
在CentOS/Redhat(RHEL)系统下,可以像这样安装:
|
||||
|
||||
```sh
|
||||
wget https://dl.min.io/server/minio/release/linux-amd64/minio-20230831153116.0.0.x86_64.rpm -O minio.rpm
|
||||
sudo dnf install minio.rpm
|
||||
```
|
||||
|
||||
安装完成后,我们需要创建一个用于存放minio文件数据的目录:
|
||||
|
||||
```sh
|
||||
sudo mkdir /mnt/minio
|
||||
```
|
||||
|
||||
然后创建一个minio使用的用户,并为此用户分配对应目录的访问权限:
|
||||
|
||||
```sh
|
||||
groupadd -r minio-user
|
||||
useradd -M -r -g minio-user minio-user
|
||||
chown minio-user:minio-user /mnt/minio
|
||||
```
|
||||
|
||||
接着我们需要创建Minio的配置文件:
|
||||
|
||||
```sh
|
||||
sudo vim /etc/default/minio
|
||||
```
|
||||
|
||||
编写以下内容到配置文件中:
|
||||
|
||||
```properties
|
||||
#系统管理员账号和密码
|
||||
MINIO_ROOT_USER=minio
|
||||
MINIO_ROOT_PASSWORD=password
|
||||
#设置用于存储数据的目录
|
||||
MINIO_VOLUMES="/mnt/minio"
|
||||
#项目接口访问地址
|
||||
MINIO_SERVER_URL="http://0.0.0.0:9000"
|
||||
#配置其他选项,比如后台管理系统的地址
|
||||
MINIO_OPTS="--console-address 0.0.0.0:9090"
|
||||
```
|
||||
|
||||
配置完成之后就可以启动Minio服务了:
|
||||
|
||||
```sh
|
||||
sudo systemctl enable minio.service
|
||||
sudo systemctl start minio.service
|
||||
```
|
||||
|
||||
### 使用Docker安装
|
||||
|
||||
对于各位小伙伴本地开发测试,这里更推荐使用Docker镜像安装,非常简单快捷,本地安装好Docker客户端之后,只需要执行以下命令就能快速部署:
|
||||
|
||||
```sh
|
||||
docker run -p 9000:9000 -p 9090:9090 --name minio \
|
||||
-d --restart=always \
|
||||
-e "MINIO_ACCESS_KEY=minio" \
|
||||
-e "MINIO_SECRET_KEY=password" \
|
||||
-v database:/data \
|
||||
minio/minio server \
|
||||
/data --console-address ":9090" -address ":9000"
|
||||
```
|
||||
|
||||
非常方便快捷。
|
||||
|
||||
------
|
||||
|
||||
## 使用Java操作对象存储
|
||||
|
||||
前面我们搭建好了对象存储服务,接着就可以开始愉快地使用了。
|
||||
|
||||
### 基本使用
|
||||
|
||||
Minio已经为我们提供了封装好的依赖,我们只需要直接使用即可:
|
||||
|
||||
```xml
|
||||
<dependency>
|
||||
<groupId>io.minio</groupId>
|
||||
<artifactId>minio</artifactId>
|
||||
<version>8.3.9</version>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
接着我们需要创建一个Minio客户端用于访问对象存储服务器:
|
||||
|
||||
```java
|
||||
MinioClient client = MinioClient.builder()
|
||||
.endpoint("http://localhost:9000") //对象存储服务地址,注意是9000那个端口
|
||||
.credentials("minio", "password") //账户直接使用管理员
|
||||
.build();
|
||||
```
|
||||
|
||||
对于Java的相关操作,可以说非常全面,包含对桶的操作、对象操作等等,文档地址:https://www.minio.org.cn/docs/cn/minio/linux/developers/java/API.html,这里我们先演示一下文件上传:
|
||||
|
||||
```java
|
||||
//首先找到我们需要上传的文件
|
||||
File file = new File("/Users/nagocoler/Downloads/test.jpg");
|
||||
//构造一个输入流用于文件传输
|
||||
FileInputStream stream = new FileInputStream(file);
|
||||
//填写上传的相关参数,使用PutObjectArgs的Builder来完成
|
||||
PutObjectArgs put = PutObjectArgs.builder()
|
||||
.bucket("test") //设置需要上传的桶名称
|
||||
.object("666.jpg") //设置上传后保存的文件名称
|
||||
.stream(stream, file.length(), -1) //配置流以及大小还有分片大小
|
||||
.build();
|
||||
client.putObject(put); //使用putObject方法完成上传操作
|
||||
```
|
||||
|
||||
这样就可以将文件上传到对象存储服务器中了。
|
||||
|
||||
接着是下载文件:
|
||||
|
||||
```java
|
||||
//填写下载相关的参数,使用GetObjectArgs来完成
|
||||
GetObjectArgs get = GetObjectArgs.builder()
|
||||
.bucket("test") //设置需要下载的桶名称
|
||||
.object("666.jpg") //设置下载后保存的文件名称
|
||||
.build();
|
||||
GetObjectResponse response = client.getObject(get);
|
||||
//使用输出流保存下载的文件到本地
|
||||
FileOutputStream stream = new FileOutputStream("/Users/nagocoler/Downloads/download.png");
|
||||
stream.write(response.readAllBytes());
|
||||
stream.close();
|
||||
```
|
||||
|
||||
最后是删除桶里的文件:
|
||||
|
||||
```java
|
||||
RemoveObjectArgs remove = RemoveObjectArgs.builder()
|
||||
.bucket("test") //设置需要删除文件的桶名称
|
||||
.object("666.jpg") //设置删除的文件名称
|
||||
.build();
|
||||
client.removeObject(remove); //删就完事
|
||||
```
|
||||
|
||||
### 服务器文件上传和下载
|
||||
|
||||
实例代码:
|
||||
|
||||
```java
|
||||
@RestController
|
||||
@RequestMapping("/")
|
||||
public class FileController {
|
||||
|
||||
@Resource
|
||||
MinioClient client;
|
||||
|
||||
@PostMapping("upload")
|
||||
public String upload(@RequestParam("file") MultipartFile file) throws Exception {
|
||||
InputStream stream = file.getInputStream();
|
||||
String name = UUID.randomUUID().toString();
|
||||
PutObjectArgs args = PutObjectArgs.builder()
|
||||
.bucket("test")
|
||||
.object("upload/"+name)
|
||||
.stream(stream, file.getSize(), -1)
|
||||
.build();
|
||||
client.putObject(args);
|
||||
return name;
|
||||
}
|
||||
|
||||
@GetMapping("file/{name}")
|
||||
public void file(@PathVariable("name") String name,
|
||||
HttpServletResponse response) throws Exception{
|
||||
GetObjectResponse object = client.getObject(GetObjectArgs.builder().bucket("test").object("upload/"+name).build());
|
||||
ServletOutputStream stream = response.getOutputStream();
|
||||
stream.write(object.readAllBytes());
|
||||
}
|
||||
}
|
||||
```
|
Loading…
Reference in New Issue