S3-Uploads:WordPress远程图片附件插件,可将附件存储远程S3/本地不保存/免费/开源

默认情况下,Wordpress的图片附件都是保存在源码的wp-content/uploads目录下,随着网站内容的不断增加,附件目录下的文件会越来越多,每次备份文件动辄几个G的数据要备份,很是麻烦。因此就人想到要将图片附件从网站主机分离出来,通过FTP传输到自建的FTP存储空间内。但这样无疑会带来不可控的因素,比如FTP存储空间的稳定性、安全性,以及成本。

远程FTP存储不失为是一个不错的选择,可选择的服务商也很多,相关的插件可以参考WPFTP,但我在这里介绍的插件则是使用S3存储,可以支持Backblaze B2,相比起自建FTP或外购FTP空间,个人认为S3的服务会更稳定,存储相对安全,价格也较为低廉,而且如果你存储的数据不足10G,搭配Cloudflare,甚至都不用钱。这也是本站目前采取的存储方案。

关于Backblaze B2搭配CloudFlare的方法,可以参考这篇文章:通过CloudFlare转换规则隐藏Backblaze B2的bucket路径

S3-Uploads

20231026112250632-S3-Uploads

S3-Uploads旨在成为一个轻量级的”即插即用”解决方案,用于将上传的内容存储在亚马逊S3上,而非本地文件系统。

它的主要目标是提供一个高度稳健的S3接口,没有任何”花哨”的功能,也没有WP-Admin用户界面或其他多余的东西。但它配备了一些有用的WP-CLI命令,可以列出S3上的文件,以及将您现有的库迁移到S3上。

TL;DR

S3-Uploads优点:

  • 免费、开源,GitHub可立取,Github:https://github.com/humanmade/S3-Uploads
  • 支持S3标准协议,可直接对接AWS S3存储
  • 除对接AWS S3,还可以对接其他支持S3标准协议的存储桶
  • 原生支持WP CLI命令,方便迁移数据

S3-Uploads不足:

  • 与部分插件存在兼容性问题,主要原因是因为S3-Uploads是直接暴力接管wp-content/uploads目录,所有用到这个目录的其他插件,在接管后出现大量读写S3的问题,可能会造成S3服务的操作项计费暴增。
  • 没有WP-Admin用户界面,在wp-config.php 配置完成后,配置上就没有多余的动作了,非常极客,小白劝退

插件安装使用

插件要求

  • PHP >= 7.1
  • WordPress >= 5.3

插件有两种安装方法,第一种是使用composer.phar进行安装,第二种是下载插件包放插件目录。两种方法各有优劣,全凭喜好就好。

使用composer进行安装

这就像是laravel一类的程序那样,直接在网站目录下执行

composer require humanmade/s3-uploads

命令执行之后,网站根目录下新增vendor目录,里面是插件依赖的第三方库,注意不要删了。

注意⚠️!通过这个方法安装后,需要在wp-config.php配置文件查找wp-settings.php,要在它前面插入Composer’s autoloader自动加载项,否则插件启用后会出错。

建议在“That’s all, stop editing! Happy publishing”这段文字前面加上

require_once __DIR__ . '/vendor/autoload.php';

如下面的代码片段:

...

require_once __DIR__ . '/vendor/autoload.php';

/* That's all, stop editing! Happy publishing. */

/** Absolute path to the WordPress directory. */
if (!defined('ABSPATH')) {
  define('ABSPATH', __DIR__ . '/');
}

/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'wp-settings.php';

...

下载插件包安装

这个方法就直接到官方release下载插件包,然后上传到插件管理器就好了。这个方法适合网站空间没有composer命令,只需要前往官方release页面,下载manual-install.zip,然后上传安装即可。但这个方法存在一定的制约,如果你的网站php运行时版本是8,则有可能这个方法不适合你,因为manual-install.zip打包时使用的php运行时是7,如果composer.json要求的php运行时版本与你实际网站的运行时不匹配,则会报错。

建议有条件的,直接在插件目录里,clone仓库后,进插件目录执行composer install解决php版本依赖和第三方库依赖的问题。

cd wp-content/plugins
git clone https://github.com/humanmade/S3-Uploads s3-uploads
cd s3-uploads
composer install

插件安装完成之后,切忌,先不要去Wordpress管理后台启用插件!继续往下看!

存储桶配置

插件安装之后,需要第一时间在wp-config.php添加插件配置定义,主要是S3存储库的配置,分两种情况

AWS大厂云

define( 'S3_UPLOADS_BUCKET', 'my-bucket' );
define( 'S3_UPLOADS_REGION', '' ); // the s3 bucket region (excluding the rest of the URL)

// You can set key and secret directly:
define( 'S3_UPLOADS_KEY', '' );
define( 'S3_UPLOADS_SECRET', '' );

// Or if using IAM instance profiles, you can use the instance's credentials:
define( 'S3_UPLOADS_USE_INSTANCE_PROFILE', true );

插件原生支持AWS S3S3_UPLOADS_BUCKET 为存储桶名称,可以直接填存储桶名称,如果想放在存储桶的目录里,可以将该值设为存储桶/目录名,如:my-bucket/my-folder

S3_UPLOADS_REGION 为存储桶区域,这个按AWS官方名称准确填写,参考:http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region

其他云

如需对接其他云服务商的S3存储桶,包含自建minio服务,也包含廉价的S3存储桶,如Backblaze B2Scaleway等,则可以按本方法进行对接。

只需在wp-content/mu-plugins/添加s3-endpoint.php文件,填入以下内容:

<?php
// Filter S3 Uploads params.
add_filter( 's3_uploads_s3_client_params', function ( $params ) {
	$params['use_aws_shared_config_files'] = false;
	$params['endpoint'] = 'https://your.endpoint.com';
	$params['use_path_style_endpoint'] = true;
	$params['debug'] = false; // Set to true if uploads are failing.
	return $params;
} );

该文件里的endpoint设为目标S3存储桶的endpoint,注意⚠️,如果添加了这个文件,则原配置里的S3_UPLOADS_REGION 不再有效。

其他配置

默认动作

插件是即插即用的,一旦启用插件,那么后续的上传操作就会被接管到S3存储桶,但有时候需要临时暂停该动作,例如在使用WP-CLI迁移媒体库到S3存储桶之前,则可以暂停,待迁移完毕之后再让插件接管。主要是这段配置:

// Default behaviour
define('S3_UPLOADS_AUTOENABLE', false);

重写URL地址

默认情况下,S3存储桶有默认的对外访问地址,比如[bucket name].s3.amazonaws.com/uploads/[file path],这个地址直接使用可能会有隐患,一般情况下是绑定自己的子域名,那么可以在wp-config.php添加以下配置:

// Define the base bucket URL (without trailing slash)
define( 'S3_UPLOADS_BUCKET_URL', 'https://your.origin.url.example/path' );

如果需要自动重写Wordpress原附件的地址,则可以添加:

// disable URL rewriting alltogether
define( 'S3_UPLOADS_DISABLE_REPLACE_UPLOAD_URL', true );

WP-CLI应用

S3-Uploads是一个轻量级的插件,连WP-Admin用户可操作的界面都没有。所有有意义的操作都集中在WP-CLI里,主要有以下几个命令可用:

验证S3存储桶

wp s3-uploads verify

执行后,插件会尝试上传文件,而后再删除文件,以确定S3存储桶是否可用,如命令执行成功,则代表S3存储桶配置正确

Success: Looks like your configuration is correct.
Attempting to upload file s3://my-bucket/wp-content/uploads/3790271186.txt
File uploaded to S3 successfully.
Attempting to delete file. s3://my-bucket/wp-content/uploads/3790271186.txt
File deleted from S3 successfully.

列出S3存储桶内容

使用该命令,可以直接列出S3存储桶指定目录下的文件和目录

wp s3-uploads ls [<path>]

上传媒体库到S3存储桶

该命令是重要命令,可将现有媒体库的内容上传到目标S3存储桶

wp s3-uploads upload-directory <from> <to> [--verbose]

例如:

wp s3-uploads upload-directory /path/to/uploads/ uploads

当然也支持通用的cp命令:

wp s3-uploads cp <from> <to>

最后

对于数据量比较大的网站,将附件存放在其他地方可以节省非常多的存储空间,实现的方式也有许多。S3-Uploads插件是开源的插件,也许会有一些小问题,如果你不想折腾,可以考虑其他方案。

FTP方案可以参考这篇文章:WPFTP插件实现自建FTP存储空间分离WordPress图片静态文件存储

WP Offload Media S3插件可以参考这篇文章:Amazon S3+WP Offload Media Lite插件实现WordPress静态文件加速(但如要同步已有文件则需要使用Pro付费版)

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享