本文最后更新于 2023-09-13,该文章更新时间较久,如有变动或失误地方请留言或自行查找。

 

在搭建自己个人博客的同时,图床可以可以有效提升站点打开速度。虽然WP自带媒体管理文件比较好用,但是为了提升站点打开速度、后续服务器迁移等因素,我还是选择了自己搭建图床的方案。当然,也有一些第三方的图床可供我们使用,如果第三方图床能满足需求的话也可以尝试下第三方图床,但是由于诸多不可控因素,在使用第三方图床的时候请在本地做好备份。

 

以上两个图床是我博客目前部分图片托管的图床,如果有需要可以自行了解一下。

 

下面,是我搭建私有图床的方法和遇到的一些问题。

 

1 准备工作

  1. 域名两个 (一个解析图床访问、另一个解析图片指向地址)

  2. 服务器一台

  3. 图床程序,这里推荐兰空或者ImgURL图床

 

2 图床部署

首先我们需要选择一个图床程序,目前常用的就是上面提到的兰空和ImgURL图床程序,均是 GitHub 开源项目。其中上面提到的 ImgURL免费图床 也是 ImgURL图床的作者,该图床程序分免费版和专业版(付费),自用的话免费版也基本够用,但是我使用的个人兰空图床,所以下面也都是以兰空图床为例。

在安装图床程序之前,可以先阅读下图床使用文档,有一些基本配置要求:

 

2.1 安装要求

  • PHP >= 8.0.2

  • BCMath PHP 扩展

  • Ctype PHP 扩展

  • DOM PHP 拓展

  • Fileinfo PHP 扩展

  • JSON PHP 扩展

  • Mbstring PHP 扩展

  • OpenSSL PHP 扩展

  • PDO PHP 扩展

  • Tokenizer PHP 扩展

  • XML PHP 扩展

  • Imagick 拓展

  • exec、shell_exec 函数

  • readlink、symlink 函数

  • putenv、getenv 函数

 

2.2 支持的数据库

  • Mysql 5.7+

  • PostgreSQL 9.6+

  • SQLite 3.8.8+

  • SQL Server 2017+

 

2.3 基本环境配置

在下载兰空图床程序,并阅读安装条件之后,进行以下配置:

  1. 宝塔安装 PHP8.1 、MySQL 5.7.37以上版本、 Nginx 1.22.0 和 Redis 7.0.0 。安装好对应的应用之后,我们在将下载的图床程序上传到网站相应的目录并解压,然后在宝塔网站管理部分新建网站,并将将站点的运行目录指向程序的public文件夹。

  2. 需要关闭open_basedir,否则会有意想不到的错误。简单来说,open_basedir 是用来限制 PHP 读取目录。

 

安装基本应用

创建站点

绑定运行目录

 

接下来将事先准备好的域名解析到图床程序站点,然后到网站设置界面,将伪静态设置为以下内容:

location / {
  try_files $uri $uri/ /index.php?$query_string;
}

 

 

伪静态设置

 

然后打开刚才创建的站点,会跳转到图床程序安装界面,如下图所示。你会看到运行环境检测未通过。

运行环境检测

此时我们需要到宝塔软件商店,找到已经安装好的PHP8.1,打开设置界面后选择安装扩展,安装Fileinfo、redis、readline、imagemagick扩展插件。

安装完上述插件之后,需要在PHP设置>禁用函数里,找到readlink、symlink、putenv、exec、shell_exec、chown函数进行删除,然后重启PHP服务。(getenv、chmod函数宝塔默认无禁用,所以无需设置)

 

运行环境通过 

2.4 图床程序安装

完成上面的准备工作之后,我们在打开站点,就可以看到运行环境监测全部通过了。然后点击下一步,配置数据库信息和管理员账号。

配置数据库

其中数据库类型选择MySQL 5.7.37及以上版本,数据库链接地址和端口无需更改。数据库账号、名称和密码到数据库管理里面可以看到。

管理员邮箱和密码自行配置,完成这些配置后,就可以看到图床程序可以正常访问了。

 

3 可能出现的问题

如果你在安装时出现以下报错提示:

Installation error! SQLSTATE[HY000][1045]Access denied for user 'x x x x x x x x'@'localhost'(using password: YES)(SQL: SHOW FULL TABLES WHERE table_type ='BASE TABLE')

说明你在安装图床程序之前已经存在其他站点,且数据库版本低于MySQL 5.7.37,需要你备份数据库信息,到MySQL设置里将版本切换至MySQL 5.7.37及以上版本即可解决问题至此,一个图床程序便安装成功了,因为官方文档写的比较简单,部分人在部署图床的时候存在一些环境配置问题,所以我将一些配置操作详细整理了下。

 

4 接入又拍云USS云存储

安装完图床程序,并登录到图床之后,你可以看到有一个本地的存储策略,该策略是将上传图片存储在你的服务器。如果你需要将存储切换至其他云存储,需要创建新的存储策略,兰空图床支持支持本地等多种第三方云储存AWS S3阿里云OSS腾讯云COS七牛云又拍云SFTPFTPWebDavMinio

 

4.1 注册账号

这里以又拍云为主,需要先到又拍云注册账号,并购买相应的服务。这里推荐使用又拍云联盟服务,每个月有15G CDN 和 10GB免费空间,搭建个人图床基本够用的。

 

4.2 创建云存储服务

如果你提交了又拍云联盟申请,账户内会有一个代金劵,然后进入又拍云控制台,在云产品里找到云存储并创建新服务,应用场景选择网页图片即可。

然后在加速域名里面填写准备的第二个域名,并进行对应的解析操作,该域名是图片访问地址的域名链接。

创建完云存储服务后,到账户管理中找到操作员,并创建一个操作员账号,然后在刚创建的云存储服务配置>存储管理最下面,找到操作员授权,添加相应的操作员并进行服务授权。

 

4.3 创建又拍云存储策略

接下来回到空兰图床,选择创建存储策略,将存储策略类型更改为又拍云USS,访问域名为上述又拍云云存储解析的域名(也就是准备的第二个域名),然后服务名称填写你所创建云存储的服务名称,并填写所创建云存储服务授权的操作员账号和密码,并点击保存。

接下来可以将右上角的存储模式切换为新创建的又拍云存储,然后上传一张图片进行测试是否可有上传成功,如果显示上传成功即表示之前的配置没有问题。

 

4.4 防盗链设置

如果你还需要进行防盗链设置,可以在又拍云创建的云存储配置里,找到访问控制,对Referer 防盗链管理进行设置。

  • 白名单/黑名单

配置白名单即表示只有白名单内的网站可以打开图片,其余网站是无法引用该图片的。这里我才用的是白名单模式,需要添加的你的博客域名和图床域名,这样确保博客图片正常显示和图床可以正常预览图片。

  • 禁止/允许 Referer 为空

Referer 防盗链的规则是判断链接打开URL地址来源,如果在白名单内则允许,否则拒绝。Referer 为空 就是URL引用图片,即直接通过链接打开图片。

如果允许 Referer 为空,则单独复制图片链接是可以在浏览器打开图片,但不能在非白名单内的站点进行引用。禁止则是相反,单独复制图片链接在浏览器无法打开图片,显示的是又拍云报错代码,这里可以创建404页面代替报错代码显示。

举个例子:当你在我博客内可以看到图片正常显示,选择一张图片右键在新标签页面打开,图片是是正常显示的,但是你复制链接并新建标签页打开,就会发现是跳转404页面,这就是设置了禁止 Referer 为空的效果。

 

写在最后

以上就是通过空兰图床+又拍云搭建私有图床的全部过程和详细操作,如果有遇到其他问题请查阅相关相关的官方文档,基本都可以找到对应的问题及解决方案。