安装部署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
2
sudo mkdir -p /var/lib/minio/data
sudo chown -R $USER:$USER /var/lib/minio/data

2.2 设置环境变量

设置MinIO的访问密钥和密钥(类似S3的Access Key和Secret Key):

1
2
export MINIO_ROOT_USER="your-access-key"
export MINIO_ROOT_PASSWORD="your-secret-key"

your-access-keyyour-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_USERMINIO_ROOT_PASSWORD 登录。


4. 配置为系统服务(可选)

为了让MinIO在系统启动时自动运行,可以将其配置为系统服务。

4.1 创建服务文件

创建一个新的系统服务文件:

1
sudo vim /etc/systemd/system/minio.service

4.2 添加服务配置

在文件中添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Unit]
Description=MinIO
After=network.target

[Service]
User=$USER
Group=$USER
Environment="MINIO_ROOT_USER=your-access-key"
Environment="MINIO_ROOT_PASSWORD=your-secret-key"
ExecStart=/usr/local/bin/minio server /var/lib/minio/data --console-address :9001

Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

your-access-keyyour-secret-key 替换为你自己的值。

4.3 启用并启动服务

启用并启动MinIO服务:

1
2
sudo systemctl enable minio
sudo systemctl start 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
2
aws --endpoint-url http://your-server-ip:9000 s3 mb s3://my-bucket
aws --endpoint-url http://your-server-ip:9000 s3 cp my-file.txt s3://my-bucket/

6. 配置防火墙(可选)

如果启用了UFW防火墙,允许MinIO的端口:

1
2
sudo ufw allow 9000/tcp  # MinIO API端口
sudo ufw allow 9001/tcp # MinIO控制台端口

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 控制台创建

  1. 访问 MinIO 控制台:

    1
    http://your-server-ip:9001
  2. 使用 MINIO_ROOT_USERMINIO_ROOT_PASSWORD 登录。

  3. 点击 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
2
export MINIO_REGION=your-region-id
minio server /var/lib/minio/data --console-address :9001

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::siyuan",
"arn:aws:s3:::siyuan/*"
]
}
]
}

5.3 应用 Policy

将 Policy 应用到用户:

1
2
mc admin policy add myminio siyuan-policy siyuan-policy.json
mc admin policy set myminio siyuan-policy user=siyuan-user

5.4 在思源笔记中使用新用户

将思源笔记的 Access Key 和 Secret Key 替换为新用户的凭据(siyuan-usersiyuan-password)。


6. 验证数据同步

在思源笔记中创建或修改笔记,然后检查 MinIO 的 Bucket 中是否同步了数据。你可以通过 MinIO 控制台或命令行查看 Bucket 内容:

1
aws --endpoint-url http://your-server-ip:9000 s3 ls s3://siyuan

总结

  1. 在 MinIO 中创建一个 Bucket(如 siyuan)。
  2. 使用默认的 Region ID(us-east-1)或自定义 Region ID。
  3. 在思源笔记中填写 Endpoint、Access Key、Secret Key、Bucket 和 Region ID。
  4. 测试连接并验证数据同步。

设置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
2
3
sudo mkdir -p /etc/minio/certs
sudo cp /etc/letsencrypt/live/your-domain/fullchain.pem /etc/minio/certs/public.crt
sudo cp /etc/letsencrypt/live/your-domain/privkey.pem /etc/minio/certs/private.key
  • your-domain 替换为你的域名。
  • MinIO 要求证书文件命名为 public.crtprivate.key

3. 设置证书权限

确保 MinIO 可以访问证书文件:

1
2
sudo chown -R minio-user:minio-user /etc/minio/certs
sudo chmod 600 /etc/minio/certs/private.key
  • 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[Unit]
Description=MinIO
After=network.target

[Service]
User=minio-user
Group=minio-user
Environment="MINIO_ROOT_USER=your-access-key"
Environment="MINIO_ROOT_PASSWORD=your-secret-key"
Environment="MINIO_OPTS=--address :9000 --console-address :9001 --certs-dir /etc/minio/certs"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS /var/lib/minio/data

Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

4.3 保存并退出

保存文件并退出编辑器。


5. 重启 MinIO 服务

重新加载 systemd 配置并重启 MinIO 服务:

1
2
sudo systemctl daemon-reload
sudo systemctl restart minio

6. 验证 HTTPS 配置

访问 MinIO 控制台和 API,确保 HTTPS 已生效。

6.1 访问控制台

在浏览器中访问:

1
https://your-domain:9001

使用 MINIO_ROOT_USERMINIO_ROOT_PASSWORD 登录。

6.2 访问 API

使用 HTTPS 访问 MinIO API:

1
https://your-domain:9000

7. 配置防火墙(可选)

如果启用了 UFW 防火墙,允许 HTTPS 端口:

1
2
sudo ufw allow 9000/tcp  # MinIO API 端口
sudo ufw allow 9001/tcp # MinIO 控制台端口

8. 自动更新 Let’s Encrypt 证书(可选)

Let’s Encrypt 证书每 90 天需要更新一次。你可以设置一个定时任务来自动更新证书并重启 MinIO。

8.1 创建更新脚本

创建一个脚本(如 /etc/minio/update-certs.sh):

1
2
3
#!/bin/bash
# 更新 Let's Encrypt 证书
certbot renew --quiet --post-hook "systemctl restart minio"

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