服务器强行扩容

服务器容量不够用?硬盘一下子就被塞满了?憋担心,阿里云的oss提供了挂载功能,挂载之后就和本地文件一个尿性了,且不占用服务器空间,这不就是扩容吗?。我已经利用这个功能把本站所有图片、视频等文件移到了oss中,而网页文件(js,css,php等)则留在了本地。腾讯云似乎没有提供这种服务。

你可能会觉得,oss的流量费用特贵,对没错,真的是特贵。因为oss是为自家服务的容器服务,外网流量当然得贵一点。而用阿里云的服务器挂载的话,就只用付储存的钱就够了,储存包年9¥40Gb,不亏。当然,挂载的话流量消耗的是服务器的,也会占用相应的带宽。

宝塔是有oss挂载插件的,但是特low,我就没用那个插件挂载成功过。

一、创建Bucket

首先,你得有一台阿里云的服务器直接挂载或中转,土豪请自便。

只要你购买了储存包,Bucket是不限数量的,随便创建。购买储存包选择地址的时候最好选择和服务器同一地址的地方。用外网流量的人注意,大陆之外流量贵死 。

创建时选择私人读写即可,没必要公共读。这里的Bucket的名称后面是要用的,不要乱取。

二、安装ossfs

阿里云是提供了详细的帮助文档的,一般人都看得懂。

帮助文档

我也没什么好补充的,再不会发工单让客服给你装。

以下以CentOS 7.x 版本为例:

wget http://gosspublic.alicdn.com/ossfs/ossfs_1.80.6_centos7.0_x86_64.rpm

sudo yum localinstall ossfs_1.80.6_centos7.0_x86_64.rpm

然后就ok了。

三、挂载Bucket

阿里的帮助文档也给出了挂载方法。

但其中还是有一些小错误,比如缺了参数。

普通直接挂载后,目录所有者是root且权限是640。这使网站程序无权限写操作,压根用不了。

解决方法帮助文档也给出了,我总结一下

  1. 能同时挂载多个Bucket多个目录,输出多个账号访问信息到/etc/passwd-ossfs然后挂载即可。
  2. -o allow_other参数将目录权限设置为777。
  3. sudo -u user或用uid/gid信息即可指定用户。

下面是详细的说明和举例。

参数说明:

www:需要更改到的用户。

your_bucket:上面创建Bucket时提到的要用的名称,并已经输出到了/etc/passwd-ossfs文件中。

your_mount_point:你需要挂载到的目录,必须是存在的目录(就是要提前创建好该目录),不以/结尾。

your_endpoint:阿里云oss控制台中Bucket概览中给出的EndPoint,选用[ECS 的经典网络访问(内网)]即可,或者你可以用阿里云的服务器反向代理该链接创建的链接以避免费用,供外网服务器使用。

your-access-key-idyour-access-key-secret:阿里云账号的密钥,这个东西很重要,不要遇到什么人说帮你配置你就傻傻交出去了。获取位置如下图。

先将Bucket名、密钥等一同输出到/etc/passwd-ossfs

示例:

echo your_bucket:your-access-key-id:your-access-key-secret >> /etc/passwd-ossfs

/etc/passwd-ossfs文件必须是640权限的,不然ossfs会报错credentials file /etc/passwd-ossfs should not have others permissions.所以挂载前还要更改权限。

chmod 640 /etc/passwd-ossfs

然后进行挂载

1、sudo -u法,这个方法我这边行不通,你不妨尝试一下。

sudo -u www ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other

2、 uid/gid信息法。

先用id www获取uid/gid

id www

然后用其进行挂载

ossfs your_bucket your_mountpoint -ourl=your_endpoint -ouid=your_uid -ogid=your_gid -o allow_other

此时以图中的返回数值为示例,我的your_uid=your_gid=1001

如此挂载之后的目录就为www用户的777权限目录了,亲测wp媒体库可以随意使用,只是加载媒体库页面时有点慢,加载其他页面没有明显的延缓。

四、开机自动挂载

挂载的目录在重启之后会消失,需要手动重新挂载。如果想要自动挂载,需要进行手动实现。

your_command表示第三点[挂载Bucket]中得到的用来挂载的完整命令。

Ubuntu14.04和CentOS6.5系统版本通过fstab的方式自动mount

echo "your_command" >> /etc/fstab

若是CentOS6.5,那么再来一个

chkconfig netfs on

CentOS7.0及以上的系统通过开机自动启动脚本mount

正常情况下,安装ossfs后会自带一个开机自动启动脚本

echo "your_command" >> /etc/init.d/ossfs

五、取消挂载

帮助文档中提到,若要取消挂载,输入

fusermount -u your_mountpoint

即可取消挂载,但我输了命令之后却提示-bash: fusermount: command not found。后来发了个工单才知道这玩意要单独装。

输入

yum -y install fuse

再进行取消挂载即可。

发表评论