Hello World

一次转抄AI回复

如何将服务器连接到 S3 兼容存储桶并挂载

本教程旨在指导如何将一台 Linux 服务器(IP: 10.10.10.25)连接到一个 S3 兼容的对象存储桶。

准备工作

在开始之前,请确认您已准备好以下信息:


方案一:使用命令行工具 (AWS CLI) 连接

此方案适合脚本自动化、文件上传/下载等临时或批处理操作。它性能好,是官方推荐的管理方式。

1. 在服务器上安装 AWS CLI

对于 Ubuntu/Debian:

sudo apt update
sudo apt install awscli -y

对于 CentOS/RHEL:

sudo yum install awscli -y

安装后,通过 aws --version 验证是否成功。

2. 配置 AWS CLI

配置是关键步骤,它告诉 CLI 工具您的凭证和要连接的服务器地址。

运行配置命令:

aws configure

根据提示输入您的凭证。对于非 AWS S3,regionoutput 不是必需的,可以直接按 Enter 跳过。

AWS Access Key ID [None]: YOUR_ACCESS_KEY_ID
AWS Secret Access Key [None]: YOUR_SECRET_ACCESS_KEY
Default region name [None]: us-east-1
Default output format [None]: json
注意: 请将 YOUR_ACCESS_KEY_IDYOUR_SECRET_ACCESS_KEY 替换为您的真实凭证。

3. 使用 AWS CLI 操作存储桶

所有 aws s3 命令都必须带上 --endpoint-url 参数来指向您的 S3 服务器。

A. 列出存储桶中的文件:

aws s3 ls s3://your_bucket_name/ --endpoint-url https://nb-1s.ccbz.com

B. 从服务器上传文件到存储桶:

# 语法: aws s3 cp <本地文件路径> s3://<桶名>/<目标路径> --endpoint-url <你的Endpoint>
aws s3 cp /path/to/local/file.txt s3://your_bucket_name/file.txt --endpoint-url https://nb-1s.ccbz.com

C. 从存储桶下载文件到服务器:

# 语法: aws s3 cp s3://<桶名>/<文件路径> <本地目标路径> --endpoint-url <你的Endpoint>
aws s3 cp s3://your_bucket_name/file.txt /path/to/save/file.txt --endpoint-url https://nb-1s.ccbz.com

D. 同步整个目录(非常有用):

# 将本地 /var/www/html 目录同步到存储桶的 web-backup 文件夹
aws s3 sync /var/www/html/ s3://your_bucket_name/web-backup/ --endpoint-url https://nb-1s.ccbz.com

方案二:挂载存储桶为本地目录 (使用 s3fs-fuse)

此方案将存储桶像本地硬盘一样挂载到服务器目录,适合需要像操作本地文件一样读写 S3 数据的应用。

1. 在服务器上安装 s3fs-fuse

对于 Ubuntu/Debian:

sudo apt update
sudo apt install s3fs -y

对于 CentOS/RHEL (需要 EPEL 源):

sudo yum install epel-release -y
sudo yum install s3fs-fuse -y

2. 创建凭证文件

为了安全,我们将凭证存放在一个受保护的文件中。

echo YOUR_ACCESS_KEY_ID:YOUR_SECRET_ACCESS_KEY > ~/.passwd-s3fs
chmod 600 ~/.passwd-s3fs
注意: 请将 YOUR_ACCESS_KEY_IDYOUR_SECRET_ACCESS_KEY 替换为您的真实凭证。

3. 创建挂载点

挂载点是一个空目录,我们将把存储桶“挂”在这里。

# 创建目录
sudo mkdir /mnt/my-s3-bucket
# 将目录所有权赋予当前用户,方便操作
sudo chown $(whoami):$(whoami) /mnt/my-s3-bucket

4. 手动挂载进行测试

执行以下命令进行挂载。

s3fs your_bucket_name /mnt/my-s3-bucket \
  -o passwd_file=~/.passwd-s3fs \
  -o url=https://nb-1s.ccbz.com \
  -o use_path_request_style

挂载后,用 df -h 查看是否挂载成功,或用 ls /mnt/my-s3-bucket 查看桶内文件。

5. 设置开机自动挂载 (固定存储)

为了实现“固定存储”,需要将挂载信息写入 /etc/fstab 文件。

1. 强烈建议先备份 fstab 文件!

sudo cp /etc/fstab /etc/fstab.bak

2. 编辑 fstab 文件:

sudo nano /etc/fstab

3. 在文件末尾添加下面这一行:

# <file system>                             <mount point>        <type> <options>                                                                                             <dump> <pass>
s3fs#your_bucket_name                       /mnt/my-s3-bucket    fuse   _netdev,allow_other,use_path_request_style,url=https://nb-1s.ccbz.com,passwd_file=/home/your_user/.passwd-s3fs 0      0

重要提示:

  • your_bucket_name 换成你的桶名。
  • /mnt/my-s3-bucket 换成你的挂载点路径。
  • /home/your_user/.passwd-s3fs 换成凭证文件的绝对路径 (~ 在 fstab 中无效)。
  • _netdev: 告诉系统这是一个网络设备,在网络就绪后再挂载。
  • allow_other: 允许系统上的其他用户访问此挂载点(如果需要)。

保存文件后,运行 sudo mount -a 测试 fstab 配置是否正确。如果没有报错,则配置成功。


总结与建议

特性AWS CLI (方案一)s3fs 挂载 (方案二)
使用场景脚本、定时任务(如备份)、一次性大文件传输将存储无缝集成到应用中,像操作本地文件一样
性能传输性能较高,适合大文件有性能开销,不适合高 I/O 场景(如数据库)
易用性需要熟悉命令行对用户和应用透明,像普通目录一样
复杂度配置简单,使用直接首次配置稍复杂,特别是 fstab 部分

建议: