MinIO 是一个高性能的、S3 协议兼容的对象存储服务器,适合自建文件云存储,支持多用户、多桶、分布式部署。
# 下载 MinIO 二进制文件
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
sudo mv minio /usr/local/bin/
mkdir -p /data/minio
export MINIO_ROOT_USER=minioadmin
export MINIO_ROOT_PASSWORD=minioadmin
minio server /data/minio --console-address ":9001"
创建服务文件:
sudo nano /etc/systemd/system/minio.service
内容如下:
[Unit]
Description=MinIO
After=network.target
[Service]
ExecStart=/usr/local/bin/minio server /data/minio --console-address ":9001"
Environment="MINIO_ROOT_USER=minioadmin"
Environment="MINIO_ROOT_PASSWORD=minioadmin"
Restart=always
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
启动服务:
sudo systemctl daemon-reexec
sudo systemctl enable minio
sudo systemctl start minio
确保服务器开放以下端口:
例如:
sudo ufw allow 9000
sudo ufw allow 9001
pip install django-storages[boto3]
settings.py
:DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_S3_ENDPOINT_URL = 'http://your_minio_ip:9000'
AWS_ACCESS_KEY_ID = 'minioadmin'
AWS_SECRET_ACCESS_KEY = 'minioadmin'
AWS_STORAGE_BUCKET_NAME = 'your-bucket-name'
AWS_S3_REGION_NAME = 'us-east-1' # 可自定义
AWS_S3_ADDRESSING_STYLE = "path"
这是你提供的示例代码,上传文件到 MinIO。
from django.core.files.storage import default_storage
def save_upload_image(fp, path):
with default_storage.open(path, 'wb') as f:
f.write(fp.read())
fp
是文件对象(例如,通过表单上传的文件),path
是存储路径。default_storage.open(path, 'wb')
将文件内容写入 MinIO 中指定的路径。你可以使用 default_storage.delete()
来删除存储在 MinIO 中的文件。
def delete_image(path):
if default_storage.exists(path):
default_storage.delete(path)
default_storage.exists(path)
用来检查文件是否存在。default_storage.delete(path)
删除指定路径的文件。对于修改文件,通常是先删除旧文件,然后上传新文件。你可以结合上面的删除和写入操作来实现。
def update_image(fp, path):
if default_storage.exists(path):
default_storage.delete(path)
with default_storage.open(path, 'wb') as f:
f.write(fp.read())
default_storage.exists(path)
检查文件是否存在。default_storage.delete(path)
删除旧文件。default_storage.open(path, 'wb')
写入新的文件。你可以使用 default_storage.open()
来读取存储在 MinIO 中的文件。
def download_image(path):
if default_storage.exists(path):
with default_storage.open(path, 'rb') as f:
return f.read()
return None
default_storage.open(path, 'rb')
以二进制模式读取文件。None
。可以在 MinIO 控制台创建桶(如 media
),或使用 mc
命令行工具。
MinIO 支持分布式部署,例如在 4 台服务器上进行数据副本冗余,提高可靠性。
使用 Nginx 作为前端代理,结合 Let's Encrypt 为 MinIO 提供 HTTPS 访问。
优点 | 说明 |
---|---|
开源免费 | 不依赖商业云,适合私有化部署 |
S3 兼容 | 完美对接 Django、Flask 等框架 |
支持分布式 | 可水平扩展 |
高性能 | 适用于大文件、高并发上传 |
直接修改 MinIO 存储的物理文件是非常不推荐的,以下是一些潜在的影响:
MinIO 是一个对象存储系统,底层并不像传统的文件系统那样直接管理每个文件的元数据。它使用内部的对象存储方式来管理文件。直接修改物理文件可能导致:
总之,直接修改 MinIO 物理文件不仅会影响系统稳定性,还可能引起不可预见的错误,强烈建议通过标准接口进行所有文件管理操作。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。