高性能、可扩展、分布式对象存储系统MinIO的介绍、部署步骤以及代码示例
详细介绍
MinIO 是一款流行的开源对象存储系统,设计上兼容 Amazon S3 API,主要用于私有云和边缘计算场景。它提供了高性能、高可用性以及易于管理的对象存储服务。以下是 MinIO 的详细介绍及优缺点:
-
架构与特性:
- 开源与跨平台:MinIO 开源免费(Apache v2.0许可),支持在Linux、Windows、macOS等多平台上部署。
- 分布式存储:MinIO 可以以分布式方式部署,通过纠删码(Erasure Coding)技术实现数据冗余,即使部分硬盘故障也能恢复数据,通常配置为允许丢失N/2数量的磁盘而保持数据可恢复。
- Amazon S3兼容性:全面兼容Amazon S3的v2和v4 API,使得基于S3的应用程序和服务可以无缝地切换到MinIO。
- 高性能:设计用于大规模工作负载,能够处理极高的并发读写请求,并且在现代硬件上性能表现优异。
- 安全性:提供多种安全措施,包括服务器端加密(SSE)、客户端加密、身份验证(使用JWT或自定义认证机制)以及访问策略控制。
-
优势:
- 成本效益:相比商业对象存储解决方案,MinIO无需支付额外许可费用,降低了存储成本。
- 简单易用:安装配置相对简单,用户界面友好,可通过命令行工具、Web UI或者SDK进行管理和操作。
- 可扩展性:水平扩展能力出色,可以根据需要添加节点来增加容量和性能。
- 数据保护:采用纠删码技术确保数据可靠性,同时支持校验和checksum保证数据完整性。
-
前端使用场景下的优缺点:
- 优点:
- 对于Webpack工程化构建的项目,由于其运行环境包含Node.js,因此可以通过API直接上传文件至MinIO服务器。
- 兼容AWS SDK,方便开发者调用已有的S3接口代码进行开发。
- 缺点:
- 不适用于Vite这类纯浏览器模块加载器构建的项目,因为无法利用Node.js原生模块。
- 前端直传时缺乏对上传进度的直观反馈,用户体验欠佳。
- 配置信息如端口、账号密码等如果硬编码在前端,存在安全隐患,不易维护和扩展。
- 优点:
-
整体优缺点:
- 优点:
- 高性能、高可靠性和易于扩展
- 良好的兼容性,对于已经使用AWS S3生态系统的组织来说迁移成本较低
- 开源社区活跃,不断更新和改进
- 缺点:
- 相对于大型企业级存储解决方案,可能缺少一些高级功能和专业支持
- 在某些特定应用场景下(比如前面提到的前端直接对接时的安全和体验问题),需要额外的开发工作来完善解决方案
- 对于不熟悉S3 API的团队,可能存在一定的学习曲线。
- 优点:
MinIO是一个强大的、面向云原生应用的理想存储解决方案,尤其适合那些寻求低成本、高可用和灵活扩展的私有云存储需求的组织。不过,在实际使用中需注意权衡其优缺点,并根据具体业务场景采取合适的策略和技术手段来克服潜在挑战。
官网:MinIO | High Performance, Kubernetes Native Object Storage
MinIO的部署步骤
MinIO在不同系统和环境上的部署方式有一些差异,但基本理念是类似的,即通过容器化或直接安装的方式运行一个兼容S3 API的对象存储服务。下面将简要介绍如何在Kubernetes、Docker、CentOS、Windows及macOS等系统上部署MinIO的Server端,并提供一些关于Client端连接的基本指导。
Kubernetes (k8s) 部署 MinIO Server
-
创建MinIO StatefulSet或Deployment:
YamlapiVersion: apps/v1 kind: Deployment metadata:name: minio-deployment spec:replicas: 4 # 根据需求设置副本数量以实现高可用性selector:matchLabels:app: miniotemplate:metadata:labels:app: miniospec:containers:- name: minioimage: minio/minio:latestargs: ["server", "/data"]ports:- containerPort: 9000env:- name: MINIO_ACCESS_KEYvalue: "your-access-key"- name: MINIO_SECRET_KEYvalue: "your-secret-key"volumeMounts:- mountPath: /dataname: minio-datavolumes:- name: minio-datapersistentVolumeClaim:claimName: minio-pvc # 需要预先创建并绑定到实际PV
- 使用
kubectl apply
命令应用YAML配置文件来创建StatefulSet或Deployment资源,该配置文件通常会指定镜像、持久卷(PV)和持久卷声明(PVC)、端口映射以及所需环境变量。 -
配置Service资源: 创建一个Service资源以暴露MinIO服务,并可以通过ClusterIP、NodePort或者LoadBalancer方式对外提供访问。
-
初始化MinIO集群(如果需要): 如果你打算部署分布式MinIO,需要确保正确配置了启动参数和环境变量,以便各个Pod能够相互发现并组成集群。
Docker部署 MinIO Server
-
拉取镜像:
docker pull minio/minio
-
运行容器: 单节点实例:
docker run -p 9000:9000 -p 9001:9001 --name minio \ -e "MINIO_ACCESS_KEY=youraccesskey" \ -e "MINIO_SECRET_KEY=yoursecretkey" \ -v /path/to/data:/data \ #新版目录已经更改为/mnt/data minio/minio server /data
分布式模式下,需要额外的环境变量来定义集群模式和其他集群成员。
docker-compose.yaml
version: '3.9' # 使用最新的Docker Compose版本以利用新特性services:minio:image: minio/minio:RELEASE.2024-01-05T22-17-24Z.fips # 使用最新稳定版镜像(或指定特定版本)container_name: minioports:- "19000:9000" # 根据实际需求决定是否暴露9001端口,用于HTTPS访问时需要- "19001:9001" # 根据实际需求决定是否暴露9001端口,用于HTTPS访问时需要environment:MINIO_ROOT_USER: youradminaccountMINIO_ROOT_PASSWORD: youradminpassword#MINIO_BROWSER: off # (可选)关闭Web浏览器界面,如果只通过API访问#MINIO_OPTS: server --address ":9000" # (可选)自定义启动参数,比如启用多节点集群模式等volumes:- /your pathto/minio_data:/data # 确保宿主机目录存在并有合适的权限command: server /data --console-address ":9001" --address ":9000" # 指定控制台监听的静态端口为9001
podman
podman run -p 9000:9000 -p 9001:9001 minio/minio server /data --console-address ":9001"podman run --name my-mc --hostname my-mc -it --entrypoint /bin/bash --rm minio/mc
[root@my-mc /]# mc alias set myminio/ https://my-minio-service MY-USER MY-PASSWORD
[root@my-mc /]# mc ls myminio/mybucket
CentOS 上直接安装 MinIO Server
-
安装依赖:
sudo yum install -y epel-release sudo yum install -y mc httpd-tools
-
下载并解压MinIO二进制包: 下载最新版本的MinIO二进制包,解压并移动至
/usr/local/bin
目录或自己指定目录,自定义目录时建议将目录加入系统环境的PATH。 -
运行MinIO: 类似于Docker中的数据卷挂载,你需要提供一个本地目录作为存储路径:
mkdir -p /mnt/minio/data nohup minio server /mnt/minio/data &
Windows部署 MinIO Server
注意事项:
-
步骤1:下载MinIO Server
访问MinIO官方下载页面获取适用于Windows操作系统的可执行文件:下载地址:MinIO | Code and downloads to create high performance object storage
-
步骤2:解压并安装
-
下载完成后,解压缩文件到你希望存放MinIO服务程序的位置,例如
C:\develop\minio
。 -
步骤3:创建数据存储目录
为了持久化存储数据,需要在本地硬盘上创建一个目录用于保存上传的文件。比如,在
D:\minio-data
创建存储目录。步骤4:启动MinIO Server
打开命令提示符(CMD)窗口,以管理员身份运行,并切换到MinIO可执行文件所在的目录:
cd C:\develop\minio
然后使用以下命令启动MinIO Server,将
<MINIO_ACCESS_KEY>
、<MINIO_SECRET_KEY>
替换为自定义的访问密钥和私有密钥,并指定存储数据的目录:.\minio.exe server D:\minio-data --address ":9000" --access-key <MINIO_ACCESS_KEY> --secret-key <MINIO_SECRET_KEY>
步骤5:环境配置(可选)
如果需要设置域名或其他高级选项,可以使用环境变量进行配置。例如,设置MINIO_DOMAIN环境变量:
set MINIO_DOMAIN=my-minio-server.local
然后用包含环境变量的方式启动MinIO服务。
步骤6:验证与访问
- MinIO Server默认监听9000端口,所以可以通过浏览器访问
http://localhost:9000
进入Web管理界面。 - 使用之前设定的访问密钥和私有密钥登录(初始默认值是
minioadmin
和minioadmin
)。 - 请确保防火墙或安全组规则允许9000端口的访问。在生产环境中,请务必更改默认的访问密钥和私有密钥,确保系统安全性。如果需要在分布式模式下部署MinIO,请参考官方文档关于集群部署的具体步骤。对于多节点部署,还需要额外的配置参数来定义集群成员以及纠删码等信息。
powershell方式:
## 安装minio,先直接拉取exe
Invoke-WebRequest -Uri "https://dl.min.io/server/minio/release/windows-amd64/minio.exe" -OutFile "C:\minio.exe"
setx MINIO_ROOT_USER admin
setx MINIO_ROOT_PASSWORD password
C:\minio.exe server F:\Data --console-address ":9001"## client
Invoke-WebRequest -Uri "https://dl.minio.io/client/mc/release/windows-amd64/mc.exe" -OutFile "C:\mc.exe"
C:\mc.exe alias set myminio/ http://MINIO-SERVER MYUSER MYPASSWORD
macOS部署 MinIO Server
-
安装Homebrew(如果尚未安装):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
-
使用Homebrew安装MinIO:
brew install minio/stable/minio
-
运行MinIO: 在终端中运行MinIO服务器指向一个本地目录:
mkdir -p ~/minio-storage minio server ~/minio-storage
Client端连接与使用:
对于客户端连接,无论在哪种环境下部署的MinIO服务器,都可以使用以下步骤进行连接:
-
设置环境变量(可选,用于简化命令行操作):
export MINIO_ENDPOINT=http://localhost:9000 export MINIO_ACCESS_KEY=youraccesskey export MINIO_SECRET_KEY=yoursecretkey
-
使用MinIO客户端工具mc: 安装mc(
minio/mc
),然后使用以下命令连接到MinIO服务器:mc alias set myminio $MINIO_ENDPOINT $MINIO_ACCESS_KEY $MINIO_SECRET_KEY
-
验证连接: 运行
mc ls myminio
来查看桶列表,如果一切正常,您应该能看到服务器上的存储桶信息。
请注意,在生产环境中,请务必替换上述示例中的“youraccesskey”和“yoursecretkey”为您的实际访问密钥和私有密钥,并且根据实际情况调整网络配置和持久化存储设置。同时,务必确保遵循最佳安全实践,如限制公网访问、启用SSL加密等。
浏览器访问:
访问和管理MinIO服务器
启动MinIO服务器后,可以通过浏览器或通过S3 API来访问和管理MinIO服务器。
python示例代码:
以下是一个使用Python编写的示例代码,展示了如何使用MinIO的Python SDK与MinIO服务器进行交互。
import boto3# 创建MinIO客户端
s3 = boto3.client('s3',endpoint_url='http://localhost:9000',aws_access_key_id='YOUR_ACCESS_KEY',aws_secret_access_key='YOUR_SECRET_KEY')# 列出所有桶
response = s3.list_buckets()
for bucket in response['Buckets']:print(bucket['Name'])# 创建一个桶
s3.create_bucket(Bucket='mybucket')# 上传文件
s3.upload_file('myfile.txt', 'mybucket', 'myfile.txt')# 下载文件
s3.download_file('mybucket', 'myfile.txt', 'downloaded_file.txt')# 删除文件
s3.delete_object(Bucket='mybucket', Key='myfile.txt')# 删除桶
s3.delete_bucket(Bucket='mybucket')
以上代码使用了boto3库来与MinIO服务器进行交互。需要注意的是,endpoint_url
参数应该指向正确的MinIO服务器地址,aws_access_key_id
和aws_secret_access_key
参数应该设置为正确的访问密钥。
nodejs示例:
安装MinIO Node.js SDK
首先,在你的Node.js项目中安装MinIO SDK:
npm install minio
示例代码
1. 初始化MinIO客户端
const Minio = require('minio');// 创建一个MinIO客户端实例
var minioClient = new Minio.Client({endPoint: 'your-minio-server-endpoint',port: 9000, // 默认端口为9000,如果自定义了端口,请修改useSSL: false, // 如果是https连接,则设置为trueaccessKey: 'your-access-key',secretKey: 'your-secret-key'
});// 检查连接
minioClient.ping((err) => {if (err) throw err;console.log('Connected to MinIO server successfully.');
});
2. 创建一个存储桶
minioClient.makeBucket('my-bucket', 'us-west-1', function(err) {if (err) return console.log(err);console.log('Bucket created successfully');
});
3. 上传一个文件到存储桶
// 读取本地文件
const fs = require('fs');
fs.readFile('local-file.txt', (err, data) => {if (err) throw err;// 上传文件到MinIOminioClient.putObject('my-bucket', 'remote-file.txt', data, data.length, 'application/text', function(err, etag) {if (err) return console.log(err);console.log("File uploaded successfully.");});
});
4. 列出存储桶内的所有对象
minioClient.listObjectsV2('my-bucket', '', true, function(err, objects) {if (err) return console.log(err);for (let obj of objects) {console.log(obj.name);}
});
请确保替换上述代码中的your-minio-server-endpoint
、your-access-key
和your-secret-key
为你实际的MinIO服务器地址、访问密钥和私有密钥。同时,根据需要调整存储桶名称、本地文件路径以及远程对象名。
相关文章:
高性能、可扩展、分布式对象存储系统MinIO的介绍、部署步骤以及代码示例
详细介绍 MinIO 是一款流行的开源对象存储系统,设计上兼容 Amazon S3 API,主要用于私有云和边缘计算场景。它提供了高性能、高可用性以及易于管理的对象存储服务。以下是 MinIO 的详细介绍及优缺点: 架构与特性: 开源与跨平台&am…...
oracle重启数据库lsnrctl重启监听
oracle重启数据库lsnrctl重启监听 su到oracle用户下,命令 su - oracle切换需要启动的数据库实例: export ORACLE_SIDorcl进入Sqlplus控制台,命令: sqlplus /nolog以系统管理员登录,命令: connect / as sysdba如果是…...
08、Kafka ------ 消息存储相关的配置-->消息过期时间设置、查看主题下的消息存活时间等配置
目录 消息存储相关的配置★ 消息的存储介绍★ 消息过期时间及处理方式演示:log.cleanup.policy 属性配置 ★ 修改指定主题的消息保存时间演示:将 test2 主题下的消息的保存时间设为10个小时1、先查看test2主题下的配置2、然后设置消息的保存时间3、然后再…...
JAVA基础学习笔记-day15-File类与IO流
JAVA基础学习笔记-day15-File类与IO流 1. java.io.File类的使用1.1 概述1.2 构造器1.3 常用方法1、获取文件和目录基本信息2、列出目录的下一级3、File类的重命名功能4、判断功能的方法5、创建、删除功能 2. IO流原理及流的分类2.1 Java IO原理2.2 流的分类2.3 流的API 3. 节点…...
WPF ComboBox限制输入长度
在WPF中,你可以通过两种方式来限制ComboBox的输入长度: 使用PreviewTextInput事件:你可以在这个事件的处理程序中检查输入文本的长度,如果超过最大长度则阻止输入。 <ComboBox PreviewTextInput"ComboBox_PreviewTextIn…...
windows配置网络IP地址的方法
在Windows系统中配置网络IP地址,可以按照以下步骤进行: 打开“控制面板”,选择“网络和Internet”选项。在“网络和Internet”窗口中,单击“网络和共享中心”选项。在“网络和共享中心”窗口中,单击“更改适配器设置”…...
windows配置电脑网络IP的方法
通过控制面板配置IP地址: 打开控制面板: 可以通过在开始菜单中搜索“控制面板”来打开控制面板。选择“网络和Internet”或“网络和共享中心”: 在控制面板中,根据 Windows 版本不同,选中对应的选项进入网络设置。点击…...
MySQL,原子性rename
RENAME TABLE old_table TO backup_table, new_table TO old_table;...
FPGA之按键消抖
目录 1.原理 2.代码 2.1 key_filter.v 2.2 tb_key_filter.v 1.原理 按键分为自锁式按键和机械按键,图左边为自锁式按键 上图为RS触发器硬件消抖,当按键的个数比较多时常常使用软件消抖。硬件消抖会使用额外的器件占用电路板上的空间。 思路就是使用延…...
国内知名的技术平台
1、csdn,中文最大的技术交流平台 2、iteye,程序员的交流平台,归属csdn 3、cnblogs,这个也不错 4、简书也不错...
C#操作注册表
说明 今天用C#开发了一个简单的服务,需要设置成为自启动,网上有很多方法,放到启动运行等,但是今天想介绍一个,通过修改注册表实现,同时介绍一下操作注册表。 private void TestReg(){//仅对当前用户有效 H…...
Unity中BRP下的深度图
文章目录 前言一、在Shader中使用1、在使用深度图前申明2、在片元着色器中 二、在C#脚本中开启摄像机深度图三、最终效果 前言 在之前的文章中,我们实现了URP下的深度图使用。 Unity中URP下使用屏幕坐标采样深度图 在这篇文章中,我们来看一下BRP下深度…...
物联网的感知层、网络层与应用层分享
物联网的概念在很早以前就已经被提出,20世纪末期在美国召开的移动计算和网络国际会议就已经提出了物联网(Internet of Things)这个概念。 最先提出这个概念的是MIT Auto-ID中心的Ashton教授,他在研究RFID技术时,便提出了结合物品编码、互联网…...
kafka KRaft 集群搭建
kafka KRaft集群安装 包下载 https://downloads.apache.org/kafka/3.6.1/kafka_2.13-3.6.1.tgzkafka集群构建好后的数据目录结构 [rootlocalhost data]# tree /data/kafka /data/kafka ├── kafka-1 # 节点1源码目录 ├── kafka-2 # 节点2源码目录 ├── kafka-3 # 节点…...
oracle角色管理
常用角色 CONNECT,RESOURCE,DBA,EXP_FULL_DATABASE,IMP_FULL_DATABASE 1角色可以自定义,语法与创建用户一样 CREATE role role1 IDENTIFIED by 123; 2授权权限给角色 --自定义角色 CREATE role role1 IDENTIFIED by 123; --授权权限给角色 GRANT create view, …...
汽车信息安全--芯片厂、OEM安全启动汇总(2)
目录 1.STM32 X-CUBE-SBSFU 2.小米澎湃OS安全启动 3.小结 在汽车信息安全--芯片厂、OEM安全启动汇总-CSDN博客,我们描述了芯驰E3的安全启动机制,接下来我们继续看其他芯片、OEM等安全启动机制。 1.STM32 X-CUBE-SBSFU 该产品全称Secure Boot and Secure...
HarmonyOS 开发基础(五)Button
HarmonyOS 开发基础(五)Button Entry Component struct Index {build() {Row() {Column() {// Button:ArkUI 的基础组件 按钮组件// label 参数:文字型按钮Button(我是按钮)// width:属性方法,设置组件的宽…...
带前后端H5即时通讯聊天系统源码
带有前后端的H5即时通讯聊天系统源码。该源码是一个开源的即时通信demo,需要前后端配合使用。它的主要目的是为了促进学习和交流,并为大家提供开发即时通讯功能的思路。尽管该源码提供了许多功能,但仍需要进行自行开发。该项目最初的开发初衷…...
vsCode输出控制台中文乱码解决
在tasks.json里的args中添加 "-fexec-charsetGBK", // 处理mingw中文编码问题 "-finput-charsetUTF-8",// 处理mingw中文编码问题...
「服务器」4.新手小白如何安装服务器环境-宝塔
刚开始初始化好的服务器,使用了阿里云客户端,看着网络脚本乱装,后来决定宝塔环境发现有重复的环境,遂决定重新初始化一下,然后重头干起。 重置服务器 将服务器关闭运行状态后,点击重新初始化云盘即可重新初…...
Docker安装MySql详细步骤
1、新建挂载目录 首先进入安装mysql的目录,没有就自行创建 mkdir -p /usr/local/docker/mysql-docker cd /usr/local/docker/mysql-docker 接着挂载目录 # 选择自己的软件安装目录,新建挂载文件目录 mkdir -p data logs mysql-files conf # 赋予权限…...
【微服务合集】
文章目录 MyBatisPlusMyBatisPlus 注解WrapperMybatisPlus批量插入(saveBatch)MyBatisPlus 分页插件 DockerDockerfileDocker网络Docker部署项目 黑马微服务文档尚硅谷SpringBoot2尚硅谷SpringBoot3 MyBatisPlus MyBatisPlus 注解 TableName TableId TableField MyBatisPlu…...
Hadoop之mapreduce参数大全-2
25.指定在Reduce任务在shuffle阶段的fetch操作中重试的超时时间 mapreduce.reduce.shuffle.fetch.retry.timeout-ms是Apache Hadoop MapReduce任务配置中的一个属性,用于指定在Reduce任务在shuffle阶段的fetch操作中重试的超时时间(以毫秒为单位&#x…...
目标检测YOLO实战应用案例100讲-基于图像增强的鸟类目标检测(续)
目录 SRGAN网络模型改进研究 3.1 SRGAN超分辨率模型 3.1.1 SRGAN网络结构 3.1.2 SRGAN的损失函数...
MYSQL分表容量预估:简明指南
随着数据量的日益增长,分表技术成为优化mysql数据库性能的重要策略。本文介绍一种简明有效的预估分表容量大小的方法,帮助开发者和数据库管理员进行有效的资源规划。 背景 在处理大规模数据时,为了优化性能和管理便利,常常采用分…...
面试宝典进阶之Java线程面试题
T1、【初级】线程和进程有什么区别? (1)线程是CPU调度的最小单位,进程是计算分配资源的最小单位。 (2)一个进程至少要有一个线程。 (3)进程之间的内存是隔离的,而同一个…...
BOM简介
1.1 常用的键盘事件 1.1.1 键盘事件 键盘事件触发条件onkeydown按键被按下时触发onkeypress按键被按下时触发onkeyup按键被松开时触发 注意:addEventListener事件不需要加on <script>//1. keydown 按键按下的时候触发,按任意键都触发,也可以识…...
Java中的集合框架
概念与作用 集合概念 现实生活中:很多事物凑在一起 数学中的集合:具有共同属性的事物的总体 java中的集合类:是一种工具类,就像是容器,储存任意数量的具有共同属性的对象 在编程时,常常需要集中存放多个…...
Rustdesk打开Win10 下客户端下面服务不会自启,显示服务未运行
环境: Rustdesk1.19 问题描述: Rustdesk打开Win10 下客户端下面服务不会自启,显示服务未运行 解决方案: 1.查看源代码 pub async fn start_all() {crate::hbbs_http::sync::start();let mut nat_tested = false;check_zombie()...
【SPDK】【NoF】使用SPDK部署NVMe over TCP
SPDK NVMe over Fabrics Target是一个用户空间应用程序,通过以太网,Infiniband或光纤通道等结构呈现块设备,SPDK目前支持RDMA和TCP传输。 本文将在已经编译好SPDK的基础上演示如何使用SPDK搭建NVMe over TCP,前提是您已经将一块NVMe硬盘挂载…...
偷拍做愛视频网站/seo深圳优化
alias 别名 -爱力儿丝 align 排列、对齐 -厄烂 argument引数(传给函式的值) -阿记门忒--(te一生) array 数组 -厄瑞 assign 赋值 -厄撒恩 authorization 授权 -啊破瑞贼身 echo 输出 -爱扣 define 规定 -(dei一生)饭 func…...
网站开发工具以及优缺点/网页分析报告案例
Java Web实现简易的图书管理系统这是一个使用Java Web相关的知识做出来的网页图书管理系统,使用的数据库为mysql。程序中实现了登录功能和对图书表、图书类别表的增删查改功能。因为我对Java Web相关的知识的了解还非常有限,所以这个程序的功能和实现上都…...
11网拍推广平台/seo诊断站长
2019独角兽企业重金招聘Python工程师标准>>> 1、firewalld的基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status firewalld 开机禁用 : systemctl disable firew…...
网站创建方法/百度营销后台
AIX下RAC搭建系列 环境 节点 节点1 节点2 小机型号 IBM P-series 630 IBM P-series 630 主机名 AIX203 AIX204 交换机 SAN光纤交换机 存储 SAN T3存储 拓扑图 搭建方式: 方式一 方式二 1.os: aix 5300-08 1.os: aix 5300-08 2.共享存储…...
用源码做自己的网站/搜索大全
http://www.autonlab.org/tutorials/转载于:https://www.cnblogs.com/viviancc/archive/2012/10/15/2724101.html...
淘宝找做网站/免费网上申请注册
之前,一直想集成Dapper到项目中,但是一直没成功,今天把abp升级到最新版,然后按教程来,就可以了,呵呵 现在,基于上一篇的源码进行升级和集成dapper,将abp升级到3.8.2 官方升级文档&am…...