在搭建自己个人博客的同时,图床可以可以有效提升站点打开速度。虽然WP自带媒体管理文件比较好用,但是为了提升站点打开速度、后续服务器迁移等因素,我还是选择了自己搭建图床的方案。
当然,也有一些第三方的图床可供我们使用,如果第三方图床能满足需求的话也可以尝试下第三方图床,但是由于诸多不可控因素,在使用第三方图床的时候请在本地做好备份。
以上两个图床是我博客目前部分图片托管的图床,如果有需要可以自行了解一下。
下面,是我搭建私有图床的方法和遇到的一些问题。
1 准备工作
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 基本环境配置
在下载兰空图床程序,并阅读安装条件之后,进行以下配置:
- 宝塔安装 PHP8.1 、MySQL 5.7.37以上版本、 Nginx 1.22.0 和 Redis 7.0.0 。安装好对应的应用之后,我们在将下载的图床程序上传到网站相应的目录并解压,然后在宝塔网站管理部分新建网站,并将将站点的运行目录指向程序的
public
文件夹。 - 需要关闭
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
、七牛云
、又拍云
、SFTP
、FTP
、WebDav
、Minio
。
4.1 注册账号
这里以又拍云为主,需要先到 又拍云 注册账号,并购买相应的服务。这里推荐使用 又拍云联盟服务 ,每个月有15G CDN 和 10GB免费空间,搭建个人图床基本够用的。
4.2 创建云存储服务
如果你提交了又拍云联盟申请,账户内会有一个代金劵,然后进入又拍云控制台,在云产品里找到云存储并创建新服务,应用场景选择网页图片即可。
然后在加速域名里面填写准备的第二个域名,并进行对应的解析操作,该域名是图片访问地址的域名链接。
创建完云存储服务后,到账户管理中找到操作员,并创建一个操作员账号,然后在刚创建的云存储服务配置>存储管理最下面,找到操作员授权,添加相应的操作员并进行服务授权。
4.3 创建又拍云存储策略
接下来回到空兰图床,选择创建存储策略,将存储策略类型更改为又拍云USS,访问域名为上述又拍云云存储解析的域名(也就是准备的第二个域名),然后服务名称填写你所创建云存储的服务名称,并填写所创建云存储服务授权的操作员账号和密码,并点击保存。

接下来可以将右上角的存储模式切换为新创建的又拍云存储,然后上传一张图片进行测试是否可有上传成功,如果显示上传成功即表示之前的配置没有问题。
4.4 防盗链设置
如果你还需要进行防盗链设置,可以在又拍云创建的云存储配置里,找到访问控制,对Referer 防盗链管理进行设置。

- 白名单/黑名单
配置白名单即表示只有白名单内的网站可以打开图片,其余网站是无法引用该图片的。这里我才用的是白名单模式,需要添加的你的博客域名和图床域名,这样确保博客图片正常显示和图床可以正常预览图片。
- 禁止/允许 Referer 为空
Referer 防盗链的规则是判断链接打开URL地址来源,如果在白名单内则允许,否则拒绝。Referer 为空 就是URL引用图片,即直接通过链接打开图片。
如果允许 Referer 为空,则单独复制图片链接是可以在浏览器打开图片,但不能在非白名单内的站点进行引用。禁止则是相反,单独复制图片链接在浏览器无法打开图片,显示的是又拍云报错代码,这里可以创建404页面代替报错代码显示。
举个例子:当你在我博客内可以看到图片正常显示,选择一张图片右键在新标签页面打开,图片是是正常显示的,但是你复制链接并新建标签页打开,就会发现是跳转404页面,这就是设置了禁止 Referer 为空的效果。
写在最后
以上就是通过空兰图床+又拍云搭建私有图床的全部过程和详细操作,如果有遇到其他问题请查阅相关相关的官方文档,基本都可以找到对应的问题及解决方案。