如何在Ubuntu上自建S3服务
安装部署MinIO
在Ubuntu 16.04上自建S3兼容的对象存储服务,可以使用开源软件 MinIO。MinIO 是一个高性能、S3兼容的对象存储解决方案,适合搭建私有云存储服务。以下是具体步骤:
1. 安装MinIO
1.1 下载MinIO
访问 MinIO官网 获取最新版本的下载链接,或者直接使用以下命令下载:
1 | wget https://dl.min.io/server/minio/release/linux-amd64/minio |
1.2 赋予执行权限
将下载的MinIO二进制文件设置为可执行:
1 | chmod +x minio |
1.3 将MinIO移动到系统路径
将MinIO移动到 /usr/local/bin
,方便全局调用:
1 | sudo mv minio /usr/local/bin/ |
2. 配置MinIO
2.1 创建存储目录
创建一个目录用于存储MinIO的数据:
1 | sudo mkdir -p /var/lib/minio/data |
2.2 设置环境变量
设置MinIO的访问密钥和密钥(类似S3的Access Key和Secret Key):
1 | export MINIO_ROOT_USER="your-access-key" |
将 your-access-key
和 your-secret-key
替换为你自己的值。
3. 运行MinIO
3.1 启动MinIO
使用以下命令启动MinIO服务:
1 | minio server /var/lib/minio/data --console-address ":9001" |
minio server
是启动命令。/var/lib/minio/data
是数据存储目录。--console-address ":9001"
指定MinIO控制台的访问端口(默认是9001)。
3.2 访问MinIO控制台
在浏览器中访问:
1 | http://your-server-ip:9001 |
使用之前设置的 MINIO_ROOT_USER
和 MINIO_ROOT_PASSWORD
登录。
4. 配置为系统服务(可选)
为了让MinIO在系统启动时自动运行,可以将其配置为系统服务。
4.1 创建服务文件
创建一个新的系统服务文件:
1 | sudo vim /etc/systemd/system/minio.service |
4.2 添加服务配置
在文件中添加以下内容:
1 | [Unit] |
将 your-access-key
和 your-secret-key
替换为你自己的值。
4.3 启用并启动服务
启用并启动MinIO服务:
1 | sudo systemctl enable minio |
4.4 检查服务状态
检查MinIO服务是否正常运行:
1 | sudo systemctl status minio |
5. 使用MinIO
5.1 通过控制台管理
通过MinIO控制台(http://your-server-ip:9001
)可以创建存储桶、上传文件等。
5.2 通过S3客户端访问
MinIO兼容S3 API,可以使用任何S3客户端(如AWS CLI、s3cmd等)访问。例如,使用AWS CLI:
1 | aws --endpoint-url http://your-server-ip:9000 s3 mb s3://my-bucket |
6. 配置防火墙(可选)
如果启用了UFW防火墙,允许MinIO的端口:
1 | sudo ufw allow 9000/tcp # MinIO API端口 |
7. 使用HTTPS(可选)
为了安全,建议为MinIO配置HTTPS。可以使用Let’s Encrypt获取免费SSL证书,然后将证书配置到MinIO中。
总结
通过以上步骤,你可以在Ubuntu 16.04上成功搭建一个S3兼容的对象存储服务。MinIO 是一个轻量级且高性能的解决方案,适合用于私有云存储或开发测试环境。
设置Bucket和Region
在思源笔记中使用你部署的 MinIO(S3 兼容服务)时,除了地址、Access Key 和 Secret Key 外,还需要填写 Bucket(存储桶)和 Region ID(区域 ID)。以下是具体步骤:
1. 创建 Bucket(存储桶)
在 MinIO 中创建一个 Bucket,用于存储思源笔记的数据。
方法 1:通过 MinIO 控制台创建
访问 MinIO 控制台:
1
http://your-server-ip:9001
使用
MINIO_ROOT_USER
和MINIO_ROOT_PASSWORD
登录。点击 Create Bucket,输入 Bucket 名称(如
siyuan
),然后点击 Create。
方法 2:通过命令行创建
如果你已经配置了 AWS CLI 或 MinIO 客户端(mc
),可以使用以下命令创建 Bucket:
1 | aws --endpoint-url http://your-server-ip:9000 s3 mb s3://siyuan |
或者使用 MinIO 客户端:
1 | mc mb myminio/siyuan |
2. 设置 Region ID
MinIO 默认的 Region ID 是 us-east-1
,这是 Amazon S3 的默认区域。如果你没有特别配置其他区域,可以直接使用 us-east-1
。
如果需要自定义 Region ID,可以在启动 MinIO 时通过环境变量设置:
1 | export MINIO_REGION=your-region-id |
将 your-region-id
替换为你想要的区域(如 cn-north-1
)。
3. 在思源笔记中配置 S3
打开思源笔记,进入 设置 -> 存储 -> S3,填写以下信息:
- Endpoint:MinIO 服务的地址(如
http://your-server-ip:9000
)。 - Access Key:MinIO 的
MINIO_ROOT_USER
。 - Secret Key:MinIO 的
MINIO_ROOT_PASSWORD
。 - Bucket:你创建的 Bucket 名称(如
siyuan
)。 - Region ID:MinIO 的区域 ID(默认是
us-east-1
)。
4. 测试连接
在思源笔记中保存配置后,测试是否能够成功连接到 MinIO。如果连接成功,思源笔记会将数据同步到 MinIO 的 Bucket 中。
5. 权限配置(可选)
如果需要更细粒度的权限控制,可以通过 MinIO 的 Policy 或 IAM 功能为思源笔记创建一个专用的用户,并限制其只能访问特定的 Bucket。
5.1 创建新用户
使用 MinIO 客户端创建新用户:
1 | mc admin user add myminio siyuan-user siyuan-password |
5.2 创建 Policy
创建一个 Policy 文件(如 siyuan-policy.json
),内容如下:
1 | { |
5.3 应用 Policy
将 Policy 应用到用户:
1 | mc admin policy add myminio siyuan-policy siyuan-policy.json |
5.4 在思源笔记中使用新用户
将思源笔记的 Access Key 和 Secret Key 替换为新用户的凭据(siyuan-user
和 siyuan-password
)。
6. 验证数据同步
在思源笔记中创建或修改笔记,然后检查 MinIO 的 Bucket 中是否同步了数据。你可以通过 MinIO 控制台或命令行查看 Bucket 内容:
1 | aws --endpoint-url http://your-server-ip:9000 s3 ls s3://siyuan |
总结
- 在 MinIO 中创建一个 Bucket(如
siyuan
)。 - 使用默认的 Region ID(
us-east-1
)或自定义 Region ID。 - 在思源笔记中填写 Endpoint、Access Key、Secret Key、Bucket 和 Region ID。
- 测试连接并验证数据同步。
设置HTTPS访问
如果你的 Ubuntu 服务器已经有 HTTPS 域名,可以通过以下步骤为 MinIO 配置 HTTPS。MinIO 支持使用 TLS 证书来加密通信,确保数据的安全性。
1. 准备 TLS 证书
确保你已经有一个有效的 TLS 证书(包括 .crt
和 .key
文件)。如果你使用的是 Let’s Encrypt 证书,证书通常位于 /etc/letsencrypt/live/your-domain/
目录下,包含以下文件:
fullchain.pem
:证书文件。privkey.pem
:私钥文件。
2. 将证书复制到 MinIO 的配置目录
将证书文件复制到 MinIO 的配置目录(例如 /etc/minio/certs
):
1 | sudo mkdir -p /etc/minio/certs |
- 将
your-domain
替换为你的域名。 - MinIO 要求证书文件命名为
public.crt
和private.key
。
3. 设置证书权限
确保 MinIO 可以访问证书文件:
1 | sudo chown -R minio-user:minio-user /etc/minio/certs |
- 将
minio-user
替换为运行 MinIO 的用户。
4. 修改 MinIO 服务配置
编辑 MinIO 的服务文件,指定证书路径并启用 HTTPS。
4.1 编辑服务文件
1 | sudo vim /etc/systemd/system/minio.service |
4.2 修改配置
在 [Service]
部分添加以下环境变量:
1 | Environment="MINIO_OPTS=--address :9000 --console-address :9001 --certs-dir /etc/minio/certs" |
完整示例:
1 | [Unit] |
4.3 保存并退出
保存文件并退出编辑器。
5. 重启 MinIO 服务
重新加载 systemd 配置并重启 MinIO 服务:
1 | sudo systemctl daemon-reload |
6. 验证 HTTPS 配置
访问 MinIO 控制台和 API,确保 HTTPS 已生效。
6.1 访问控制台
在浏览器中访问:
1 | https://your-domain:9001 |
使用 MINIO_ROOT_USER
和 MINIO_ROOT_PASSWORD
登录。
6.2 访问 API
使用 HTTPS 访问 MinIO API:
1 | https://your-domain:9000 |
7. 配置防火墙(可选)
如果启用了 UFW 防火墙,允许 HTTPS 端口:
1 | sudo ufw allow 9000/tcp # MinIO API 端口 |
8. 自动更新 Let’s Encrypt 证书(可选)
Let’s Encrypt 证书每 90 天需要更新一次。你可以设置一个定时任务来自动更新证书并重启 MinIO。
8.1 创建更新脚本
创建一个脚本(如 /etc/minio/update-certs.sh
):
1 |
|
8.2 设置可执行权限
1 | sudo chmod +x /etc/minio/update-certs.sh |
8.3 添加定时任务
编辑 crontab:
1 | sudo crontab -e |
添加以下内容(每天凌晨 2 点检查并更新证书):
1 | 0 2 * * * /etc/minio/update-certs.sh |
总结
通过以上步骤,你可以为 MinIO 配置 HTTPS,确保数据传输的安全性。如果你的证书是 Let’s Encrypt 颁发的,还可以设置自动更新证书的定时任务。