免费给VPS扩容75G数据盘

梅塔沃克 2023-01-13 PM

写在前面的话

我不知道大家是否遇到过这样的情况:购买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.png

Scaleway的总公司是online,2002年初创,有欧洲3家数据中心(巴黎、阿姆斯特丹、华沙),它比较特色的服务是可以直接创建苹果M1芯片的远程主机 €0.11/小时;Scaleway自称对象存储服务器位于地下 25 米的防辐射避难所中,那我就感觉:非常安全——于是,本次我就选择了Scaleway!

Scaleway的注册需要信用卡,要支持欧元消费,没有信用卡可以参考我的文章:虚拟卡实体卡,再没有你还可以考虑 Oracle免费20G的s3、AWS免费5G的S3等等。

操作步骤

1、在Scaleway创建存储桶;
创建对象存储.png

需要注意: 存储桶名称要记录;地区不要选择巴黎;可见性选择:公开!

2、在Scaleway创建APIkey;

apikey.png
access.png

需要注意: 创建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也就是我们挂载的数据库里,这下安全了吧。

参考资料

https://blog.51sec.org/

视频教程:

Bilibili:
YouTube:

精彩内容: