写在前面的话
我不知道大家是否遇到过这样的情况:购买vps时候因为预算问题购买的数据盘过小;或者是你需要在vps上添加一个更安全的存储空间用来备份文件;或者干脆你只是想按照我的视频玩玩对象存储,本篇内容就很适合你!
具体思路
实际上,我们很常见的是把s3存储桶挂载到本地,不过这次,我们使用工具s3fs( https://github.com/s3fs-fuse/s3fs-fuse ),它可以实现通过 FUSE 挂载 S3 存储桶到Linux,macOS等!
于是,我就想到找免费的s3,然后挂载到我们的vps上,既可以当做vps扩容存储,也可以当成安全备份空间,一举两得。
理论上,所有s3协议的存储桶都可以使用这种方法挂载到vps或者本地!
工具和原材料
本次教程,我使用Debian 10系统的vps,加上Scaleway(https://console.scaleway.com/register )提供的免费对象存储75G;
Scaleway的总公司是online,2002年初创,有欧洲3家数据中心(巴黎、阿姆斯特丹、华沙),它比较特色的服务是可以直接创建苹果M1芯片的远程主机 €0.11/小时;Scaleway自称对象存储服务器位于地下 25 米的防辐射避难所中,那我就感觉:非常安全——于是,本次我就选择了Scaleway!
Scaleway的注册需要信用卡,要支持欧元消费,没有信用卡可以参考我的文章:虚拟卡 和 实体卡,再没有你还可以考虑 Oracle免费20G的s3、AWS免费5G的S3等等。
操作步骤
1、在Scaleway创建存储桶;
需要注意: 存储桶名称要记录;地区不要选择巴黎;可见性选择:公开!
2、在Scaleway创建APIkey;
需要注意: 创建apikey时候,持有者是IAM
,过期时间:永不过期
,是否用于对象存储:我们选择是
点击生成密钥以后,Access Key
和 Secret Key
一定要复制保存好,这玩意儿只显示一次!
3、vps内操作:
apt update && apt install -y s3fs
echo "user_allow_other" >>/etc/fuse.conf
mkdir -p /oss
echo ACCESS_KEY:SECRET_KEY > ~/.passwd-s3fs
chmod 600 ~/.passwd-s3fs
ACCESS_KEY:SECRET_KEY要修改成你的!
s3fs BUCKET_ID /oss -o allow_other -o passwd_file=~/.passwd-s3fs -o use_path_request_style -o endpoint=BUCKET_REGION -o parallel_count=15 -o multipart_size=128 -o nocopyapi -o url=https://s3.BUCKET_REGION.scw.cloud
BUCKET_ID修改成存储桶名称,有两处BUCKET_REGION修改成你的!在
Bucket Endpoint中我们可以定位到存储桶的区域,阿姆斯特丹是 nl-ams
华沙是 pl-waw
下面,检查vps是否已经挂载了存储桶;
df -h
这里会显示有256T空间,但是不要太高兴了,我们能用的只有75G,超出按月收费呀,0.01欧/1G/月!
4、至此,我们完成挂载了,可以试试硬盘的速度了!需要说明的是经过dd测试,挂载的存储桶会因为块大小的不同有明显的速度瓶颈,最低13M/s,最高39M/s,没法像本地设备一样读写,也要被网速和延迟所限制。
所以,若你想把网站文件放在存储桶那么速度会稍稍有些慢,举例来说用美国的vps和欧洲的对象存储,要走小半个地球呢。如果你把存储桶作为备份盘,那非常可以。还能搞个定时备份,而且存储桶与vps是分离的,vps损坏都没关系,我们可以远程下载你存储桶内的文件,这一点我感觉是本期视频的亮点。
5、我们还要设置开机启动,如果你需要的话!
apt install -y supervisor
systemctl enable supervisor
vi /etc/supervisor/conf.d/s3fs.conf
然后添加下面代码:
[program:s3fs]
command=/bin/bash -c "s3fs vps-mount-amsterdam /oss -o allow_other -o passwd_file=~/.passwd-s3fs -o use_path_request_style -o endpoint=Bnl-ams -o parallel_count=15 -o multipart_size=128 -o nocopyapi -o url=https://s3.nl-ams.scw.cloud"
directory=/
autorestart=true
stderr_logfile=/supervisor-err.log
stdout_logfile=/supervisor-out.log
user=root
stopsignal=INT
注意:双引号内部内容与手动挂载一致!!然后可以重启一下看看效果!
文件在哪?
上面我们把s3挂载到vps上,可以通过ftp,sftp上传和下载文件,考虑到对象存储的安全性,所以我们不得不牺牲了一些速度,不建议用这个方法直播,视频文档放在存储桶推流会出现卡顿。最后,我们备份的文件都可以在Scaleway对象存储后台看到并下载。
进阶玩法
我现在想到的就是实现自动备份网站的文件和数据库,具体实现的方法如下:
1、写backup.sh如下:
user=数据库用户名
key=数据库密码
dbname=数据库名称
date=$(date +%Y%m%d);
bak=${dbname}_${date};
mysqldump -u$user --password="${key}" ${dbname} > /root/${bak}.sql
tar czvf /root/${bak}.zip /www/wwwroot/你的网站路径
mv *.sql *.zip /oss
2、chmod u+x backup.sh
3、添加定时任务:
crontab -e
添加:
30 10 * * * /root/backup.sh
保存,然后查看任务
crontab -l
没问题的话,每天10:30分,服务器将自动打包网站文件和数据库,然后把备份的文件发送到/oss也就是我们挂载的数据库里,这下安全了吧。
参考资料
视频教程:
Bilibili:
YouTube:
精彩内容: