如何在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 颁发的,还可以设置自动更新证书的定时任务。


