前一段时间有一个问题让我担忧,就是Linux服务器磁盘快满了,然后开始删文件啊,精简网站啊,然而服务器没过几天磁盘又爆红了,
…
于是打开我的浏览器,搜索,经过苦苦搜寻,终于找到了一个叫ossfs的东西,
https://help.aliyun.com/document_detail/153892.html
它或许能帮到我,正好我买了同地域的OSS,如果用它来辅助网站的存储,那就可以免得苦逼地去买扩展数据盘了。之前我用过宝塔的
七牛云存储对象多点挂载工具兼容阿里云、京东云
工具,但是这个bug太多了,然后我又不小心因为我的操作失误把我的OSS的重要文件给删了,于是我一气之下就删除了它。
于是在同我朋友的推荐下一起使用了ossfs,然而实际操作并不是那么轻松。
首先得拷贝一份安装包(全文以我的Ubuntu 18.04 (x64)为例,我使用了curl (可能需要另外安装curl),请忽略开头的语言类型错误)
#!/bin/bash |
然后安装
#!/bin/bash |
配置账号访问信息,注意权限只能是640或600,你也可以使用vi等工具编辑配置文件
#!/bin/bash |
/etc/passwd-ossfs文件结构:(用:
分隔)
BucketName:yourAccessKeyId:yourAccessKeySecret |
更多可以查看阿里云的教程:https://help.aliyun.com/document_detail/153893.html
挂载目录
#!/bin/bash |
完整示例看上面的教程
注意 如果您使用从阿里云购买的云服务器(ECS)来提供ossfs服务,您可以使用内网域名,这样可以节省流量费用。OSS的内网域名请参见阿里云的访问域名和数据中心。
取消挂载(如果要)
#!/bin/bash |
然后没有失误就可以了,之后你会发现挂载后的文件夹权限是700,这样用户组和公共用户都不能访问这个文件夹,并且直接强行更改权限是无效的,然后需要更改权限(完整示例看上面的教程,完整复制粘贴别的地方的东西过来没意思)
允许所有用户访问,即权限为777
#!/bin/bash |
用户组权限为770
#!/bin/bash |
这样就好了。
如果需要开机自动挂载,你可以借助Supervisor等工具实现。
如果你的服务器的网站设置了防跨站攻击(open_basedir),你还需要链接这个目录
可以使用ln命令创建软链接实现,-s参数代表创建软链接,ln命令默认创建硬链接,需要提前在要链接到的目录创建空文件夹
#!/bin/bash |
例:
#!/bin/bash |
如果没有出错,现在可以通过/www/wwwroot/xiwangly.com/xiwangly2访问/mnt/xiwangly2的文件(夹)了
取消链接直接删除这个链接到的目录即可
然后你随着各种应用的需要你可能又会出现新的问题了,
比如我用软链接创建的目录里的内容在FTP中无法读取,
这时候就要考虑mount命令了,mount与ln命令的区别请看mount和ln的区别和使用 - 懵懵懂懂的小白 - 博客园。
示例:
#!/bin/bash |
bind参数从Linux内核2.4.0中开始支持,用于类似软链接的功能
取消挂载
#!/bin/bash |
l参数用于强制取消挂载。
使用mount而不是ln的好处,
ln链接的OSS文件夹里的文件仅支持静态的MIME,意味着动态的脚本保存在OSS中通过网站链接访问只能下载它或出于服务器安全设定的403,而不能解析并执行它,而mount则是挂载一个目录,这就有点像Windows中的磁盘装入NTFS文件夹中的操作了,这样就可以使得OSS里的文件可以通过网站链接并解析处理(如PHP文件),并且你还可以套上宝塔等工具建的网站实现默认文件。
缺点是mount的挂载在服务器重启后需要重新挂载,而ln相当于一个永久的快捷方式则服务器重启后链接还在。mount还需要额外的空文件夹。宝塔备份的时候mount挂载的内容也会算进去,需要加排除规则,而ln的链接会备份这个像”快捷方式”的东西,因而可以减小存储容量开销。
我偷懒借助宝塔的定时任务写了个检测ossfs运行状态的shell,其实就是判断这个目录的start.txt文件是否存在,这个还相当简陋…
#!/bin/bash |
另外,内网访问OSS(需要与服务器同地域,通常URL中带有internal字眼)并加上OSS资源包可以省下一大笔费用,强烈不建议使用开放公网地址的OSS挂载到自己的站点,不要暴露你的OSS信息!