杰生活
记录点滴

记录一下把静态文件由七牛转到阿里云的过程

8号更新一个新的方法,可以直接在这里查看

本站之前的静态文件一直储存在七牛的空间内,CDN用的也是七牛的,使用的是水煮鱼大大的七牛同步插件,应该很多人在用。但是最近他更新了这个插件,并且新版插件的兼容性特别特别的差,导致了大量使用此插件的用户更新版本后,出现500错误,前端后台都直接挂掉,虽然很容易解决,但是对于很多小白都是无从下手😖这些都是题外话,其实最主要是觉得插件作者有些不谨慎,于是就想换一个静态储存服务器和CDN。

服务商选择

第一步肯定是选一个合适的服务商,最常用的无非就是七牛、又拍云、阿里云、腾讯云、百度云,由于我的站点主机是阿里云的,首选肯定是阿里云了。

这些服务商的对象储存服务在WP上都可以找到不错的插件,使用起来都不难。但是由于我之前使用的是七牛的服务器,七牛插件的工作方式是把站点的本地文件镜像上传到七牛,再通过修改静态文件的输出URL来实现的前端展示,这种方式有个很大的好处,就是我可以随时关闭CDN而不会影响站点的正常访问。所以更换服务商时我肯定会优先考虑能实现这种工作模式的服务商。

然后我就尝试了一下上面那些服务商的WP插件的工作方式,最后发现竟然没有一个这种类型的😮只好另找他法。

这时我想到我一直在用的缓存插件——W3 Total Cache,之前有写过文章介绍这个插件,可以点击这里查看。这个插件里面的CDN加速可以实现类似功能,就是把本地的静态文件通过FTP同步到你的目标服务器,然后再设置一个静态文件的替换域名即可,既达到了目的,又可以省一个插件,完美!

这时就只需要找一个能使用FTP的服务商就行,最后就确定了阿里云!(到这里,其实又拍云是最佳的选择,因为原生支持FTP,但是我测试后发现在我的电脑上使用FTP连接没问题,但是使用W3 Total Cache插件内的FTP链接,怎么都是错误,具体原因不清楚,估计是阿里云和又拍云之间的事情)

实施方案选择

创建阿里云OSS的bucket和绑定域名我就不说了,很简单,阿里云那里也有详细的帮助文档,主要记录一下如何把W3 Total Cache的CDN连接上OSS

阿里云OSS原生是不支持FTP的,但是他有几个工具可以实现上传同步

  • ossftp:此工具可让你在本地搭建一个连接到bucket的FTP服务,支持Windows、Mac、Linux。
  • ossfs:挂载bucket到本地文件系统,能够通过本地文件系统操作OSS上的对象,实现数据的访问和共享,仅支持Linux。
  • ossutil:命令行管理工具。
  • ossbrowser:图形化的Object管理工具。支持Windows、Linux、Mac平台。

其中最合适我们这里使用的就是ossftp,可以用它在我们的服务器上直接搭一个到OSS的FTP服务,其次就是ossfs,把OSS的bucket挂载到服务器的某个目录,再在服务器创建一个到此目录的FTP用户。

我先尝试了ossftp,这个肯定是最佳方案,过程很简单,W3 Total Cache插件成功连接上OSS,上传文件也都没问题;但是后续却出现一个蜜汁问题:我把ossftp在服务器上设置为自启动,然后重启服务器,ossftp可以启动,插件测试也能链接到OSS,但是却无法上传文件。也就是说,手动启动ossftp就没问题,服务器重启后自启动ossftp,就没法上传文件,很难受,折腾很久也没有搞好,作为小白的我,此刻真是“臣妾做不到啊😭”

无奈只好选择第二个方案,利用ossfs工具,把OSS服务器挂载到站点服务器上的某个目录下,再创建到此目录的FTP账户。

具体实施

确定完实施方案,接下来开始就是施工。

创建OSS-Bucket

进入https://oss.console.aliyun.com,启用OSS,点加号➕,创建一个Bucket,Bucket名称和区域根据自己的需要设定,储存类型选标准储存,读写权限选公共读。

长期使用建议绑定一个你自己的域名,可以弄一个专门用来链接静态文件的二级域名,比如:static.jielive.cn,在域名管理内绑定到OSS,如果你的网站开启了SSL,最好再给二级域名申请一个证书(免费的很多)然后上传启用https。CDN可以根据你自己的需要,选择是否启用。

另外就是建议在基础设置内设置一下防盗链和跨域规则。

安装ossfs

安装过程非常简单,官方有详细的帮助文档:https://help.aliyun.com/document_detail/32196.html

概括说就是:下载安装包并上传至服务器,运行安装命令,设置个人信息,挂载到指定目录。(其中AccessKeyId/Secret在这里获取,注意最后一步挂载目录,请命令最后添加 -o allow_other来添加权限,否则无法FTP,完整命令为ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other,将your_...替换为你的对应信息)

然后设置开机自动挂载,官方给的方法是这样的:

Q: 如何开机自动挂载ossfs?

Step 1 首先请参考使用说明,把bucket name,access key id/secret等信息写入/etc/passwd-ossfs,并将该文件权限修改为640。

Step 2 接下来针对不同的系统版本,设置方式有所不同

Step 2A 通过fstab的方式自动mount(适用于ubuntu14.04, centos6.5)
在/etc/fstab中加入下面的命令

其中上述命令中的your_xxx信息需要根据您的bucket name等信息填入。
保存/etc/fstab文件。执行mount -a命令,如果没有报错,则说明设置正常。
到这一步,ubuntu14.04就能自动挂载了。centos6.5还需要执行下面的命令:

Step 2B 通过开机自启动脚本mount(适用于centos7.0及以上的系统)
在/etc/init.d/目录下建立文件ossfs,把模板文件中的内容拷贝到这个新文件中。并将其中的your_xxx内容改成您自己的信息。
执行命令:chmod a+x /etc/init.d/ossfs
上述命令是把新建立的ossfs脚本赋予可执行权限。您可以执行该脚本,如果脚本文件内容无误,那么此时oss中的bucket已经挂载到您指定的目录下了。
执行命令:chkconfig ossfs on
上述命令是把ossfs启动脚本作为其他服务,开机自动启动。

好了,现在ossfs就可以开机自动挂载了。总结起来,如果您是ubuntu14.04和centos6.5,您需要执行Step 1 + Step 2A;如果您是centos7.0系统,您需要执行Step 1 + Step 2B。

我的系统是centos7.2,但是用自启脚本的方式,试了好几遍都不能自启挂载,最后老老实实回去用fstab才成功,所以可以直接用Step2A的方法。或者也可以自己测试一下,同时也期待大神解答自启脚本不成功的原因。

到这里,ossfs就部署完成了。

最后还有一个关于后期上传文件头的问题,请检查您的主机是否存在此文件:/etc/mime.types

ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加:

  • 对于ubuntu可以通过sudo apt-get install mime-support来添加
  • 对于centos可以通过sudo yum install mailcap来添加
  • 也可以手动添加,每种格式一行,每行格式为:application/javascript js

添加FTP用户

根据你的FTP服务器,创建一个FTP用户,用户名密码自定,FTP用户目录设置为ossfs挂载的目录就行。

什么?没有安装FTP服务器?那你就使用我8号更新的OSS镜像功能吧,我现在就在用。

W3 Total Cache 插件设置

进入General Settings(常规设置),往下翻,在CDN选项卡内,第一个选项,“CDN”打勾,第二个选项,“CDN Type”选择“Self-hosted / File Transfer Protocol Upload”

点击 Save all settings (保存所有设置)

进入CDN(CDN设置),在FTP选项卡内,地址直接写127.0.0.1即可,FTP的用户名和密码填写上,下面有个“Replace site’s hostname with:”写上你的OSS域名(OSS如果绑定了域名,就写绑定的域名,不用加http://)

点击下面的test按钮,如果提示绿色PASS,说明OK了。

其他地方不用动就行,不过如果你明白自己在做什么,也可以自己修改,主要是用于设置上传的文件类型,文件夹,自定义文件和排除文件等。

最后点击上面的“Host attachments”“Host wp-includes/ files”“Host theme files”“Host minified CSS and JS files”“Host custom files”后面的按钮,然后在弹出的窗口内点star,将文件上传至OSS就行了,大功告成!

更简单的新方案

新方案是利用阿里云OSS的镜像功能,直接镜像本地的文件到OSS内,从而省去了ossfs,FTP这两个大麻烦。

具体步骤如下:

创建OSS-Bucket

进入https://oss.console.aliyun.com,启用OSS,点加号➕,创建一个Bucket,Bucket名称和区域根据自己的需要设定,储存类型选标准储存,读写权限选公共读。

长期使用建议绑定一个你自己的域名,可以弄一个专门用来链接静态文件的二级域名,比如:static.jielive.cn,在域名管理内绑定到OSS,如果你的网站开启了SSL,最好再给二级域名申请一个证书(免费的很多)然后上传启用https。CDN可以根据你自己的需要,选择是否启用。

另外就是建议在基础设置内设置一下防盗链和跨域规则。

然后就是最重要的,设置镜像回源。

在基础设置的最下面,打开镜像回源,创建规则:

回源类型:镜像

文件名前缀:不用动(知道是怎么回事的话,可以自己修改)

回源地址:填写你的网站地址,比如我的是www.jielive.cn,前面的是根据你的站点协议选择http://还是https://,其余不用动(知道是怎么回事的话,可以自己修改)。

W3 Total Cache 插件设置

进入General Settings(常规设置),往下翻,在CDN选项卡内,第一个选项,“CDN”打勾,第二个选项,“CDN Type”选择“Generic Mirror”

点击 Save all settings (保存所有设置)

进入CDN(CDN设置),在“Configuration: Objects”选项卡内的“Replace site’s hostname with:”填上你的OSS域名就OK了(OSS如果绑定了域名,就写绑定的域名,不用加http://)

其他地方不用动就行,不过如果你明白自己在做什么,也可以自己修改,主要是用于设置上传的文件类型,文件夹,自定义文件和排除文件等。

完成!是不是简单很多😂(之前没注意到OSS的镜像,不然就不用折腾那么久了😖)

镜像储存

这里我简单讲一下什么是镜像储存吧。

我们新建的OSS储存空间(假设链接为oss.jielive.cn),里面是空的,什么都没有,但是我们要用它来储存和加速我们的网站(假设网站链接为www.jielive.cn)内的一些文件。

我们设置了镜像之后(镜像源为我们的网站),当需要使用http://oss.jielive.cn/image.jpg这个文件时,OSS如果发现储存空间内没有这个文件,他就会尝试去我们设置的镜像源站来获取这个文件(即http://www.jielive.cn/image.jpg),然后将这个文件自动储存到OSS储存空间内并返回到前端展示给浏览者。

利用这个功能,可以给我们省很多事情,我们不用主动去上传需要加速的静态文件了(不用部署各种上传工具了),同时也可以节省OSS使用空间等。

您可以转载,但请注明作者及原文链接:JIElive » 记录一下把静态文件由七牛转到阿里云的过程

评论 2

评论前必须登录!

 

  1. #1

    ossfs主要还是挂载功能吧。

    一芦居7个月前 (03-18)
  2. #2

    你好,看到你写的关于wordpress缓存的文章,有几个问题需要请教一下。因为目前我使用的国外主机,挂的CDN,感觉打开还是慢,找不到原因所在。
    我目前环境是centos7 宝塔运行的nginx+mysql5.6+php7.2
    后台开启了memcached 扩展和客服端,后台WP开启的W3插件,应该和你之前缓存方式一样。我打算也想换到REDIS缓存下,请问如何操作?需要注意哪些方面。能否在你有时间的情况下解答一二。谢谢。

    笨猫7个月前 (03-18)

觉得文章有用就打赏一下吧

微信扫一扫打赏

支付宝扫一扫打赏