百花齐放春满园 – 图床打造


互联网超文本的设计,可以使得不同来源、不同形式的素材,在保持各自独立文件格式的基础上,同时以超链接的方式有机的以一个统一的文本整体呈现给读者。这种多类型文件组合的方式给统一呈现文本的编辑和修改带来了便利,同时,也对作为统一文本素材的多类型文件的管理提出了更高的要求。尤其是非结构化数据,如图片、音频、视频等,因其文件结构与结构化数据有比较大差异,往往将其与结构化数据分别存储。在互联网应用上,为提升数据存储与读取效率,通常是采用专门的服务器,安装专门的数据库对这些非结构化数据进行管理。

什么是图床

图片数据是互联网上使用最多的非结构化数据,专门针对这类数据的存储服务器,有一个形象的名字 – “图床”。 将图片上传至该服务器后,可以通过指定的 URL 获取此图片。真正实现“一地存储,多地引用”。

图床的益处

图床最大的特点,就是使用独立的服务器完成图片的存储,这个特点也决定了图床的优势。

解放算力

图片和网页文本放在同一个服务器时,服务器既要处理文本请求,也要处理图片任务;图床使用单独的服务器存储图片数据,可以让文本处理和图片处理都使用单独的 CPU 资源进行处理,不用抢占共享的 CPU 资源,解放算力。

解放带宽

图片和网页文本放在同一个服务器时,当图片越来越多,并且访问量越来越大时,服务器需要更大的带宽,更高的配置;采用图床专门处理图片访问和存储请求,可以解放文本服务器的带宽。

项目资产管理便利

图片是超文本代码使用的一种资源,当和网页文本存储在同一个服务器时,随着图片的增加,项目管理规模会变得越来越大;此外,图片是一种静态资源,而超文本代码则是动态资源,分开存储有助于超文本代码的变更与版本管控。

方便添加额外功能

采用图床,还可提供访问控制,裁剪、水印等一系列额外的功能,利用这些功能来完成一些业务需求。

图床的实现

使用商业图床

很多商业机构和组织都推出了自己的图床解决方案。尤其的云服务领域,面向非结构化的数据的对象存储服务已成为云服务厂商的标准服务之一。图床则是构建于对象存储服务的最常见的应用。

图床名 说明
阿里云 OSS 阿里云对象存储(Object Storage Service)
腾讯云 COS 腾讯云对象存储(Cloud Object Storage,COS)
百度 BOS 百度智能云对象存储(Baidu Object Storage)
华为云 OBS 华为云对象存储服务(Object Storage Service,OBS)
金山云 KS3 对象存储KS3(Kingsoft Cloud Standard Storage Service)
七牛云 Kodo 七牛云海量存储系统(Kodo)
sm.ms 专门图床
GitHub 用 GitHub 做图床
gitee 用 gitee 做图床
imgur 著名的老牌国外图床

自建图床

除了选择使用商业的图床产品外,也可以利用搭建自定义的图床。

兰空图床(Lsky pro) 就提供了开源版本的解决方案,可以利用其开源版本搭建自定义的图床 (演示地址)。

Lsky Pro 是一个用于在线上传、管理图片的图床程序。可以将它作为自己的云上相册,亦可以当作写作贴图库。兰空图床始于 2017 年 10 月,最早的版本由 ThinkPHP 5 开发,后又经历了数个版本的迭代,在 2021 年末启动了新的重写计划并于 2022 年 3 月份发布全新的 2.0 版本。

手动安装

可使用宝塔面板协助集成环境的安装与管理。

搭建图床所需的基础环境

  • web 服务器(如 nginx)
  • 数据库(如 mysql >=5.7)
  • php (>=8.02)

安装 Lsky pro

(1) 创建网站和数据库;

如没有申请网站域名,可以使用 IP 做网站域名
此时访问 80 端口,可以验证 web 服务是否开启

(2) 下载图床源文件,上传至网站根目录;

如上传为压缩文件,可在网站根目录进行解压

(3) 配置网站运行环境;

  • 设置网站的运行目录;
    • 设置运行目录为 /public
    • 取消默认的 防跨站攻击(open_basedir)选项

    20220719-1|600

  • 设置伪静态

    Apache 直接使用程序自带的 .htaccess 即可,nginx需要配置下伪静态,代码如下:

    location / {
        if (!-e $request_filename) {
            rewrite ^(.*)$ /index.php?s=$1 last; break;
        }
    }
    

    20220719-2|600

(4) 配置 PHP 环境扩展

安装 Lsky Pro 图床运行需要特定的 PHP 扩展的支持。

“网站运行环境”配置好以后,可以直接通过 80 端口访问图床,图床自带的 install 脚本会对运行环境进行自动检测,指出缺失的配置,可根据检测结果进行配置

(5) 按照 Lsky Pro 图床的安装脚本指引完成安装

使用 Docker 安装

除了手动搭建图床,也可采用 Docker 直接部署 Lsky Pro 图床的方案。

图床访问工具

图床聚合工具 – PicGo

每一种图床,无论是商业图床,还是自建图床,其核心的任务都是对图片的管理,即增(上传)、删、改、查等基本功能。为实现这些基本功能,每一种图床都提供了各自的管控接口,有 Web 的,有 API 的。这些接口风格各异,使用不同的图床,需要在不同的使用风格之间切换,此时,如果能为所有图床提供一个统一的使用接口,则效率和使用体验都得到极大的提升,PicGo 即为此目的创建。

20220719-3

PicGo 本质上实现了一个多类型图床的聚合平台,可以使用 PicGo 提供的统一接口,管控各个不同类型的图床。
– 实现上,PicGo 通过自身的插件体系,为不同的图床提供访问驱动。
– 应用上,除了直接使用 PicGo 所提供的独立接口外(GUI 或 CLI),各个应用程序也可以通过添加 PicGo 插件的方式,实现 PicGo 与应用程序的功能融合,达到更好的用户体验。

PicGo 与图床的接口

PicGo 通过插件的方式,提供了与各个图床的访问接口。以兰空图床(Lsky Pro)为例,就有专门的 PicGo 插件

PicGo 与应用程序的接口

各个应用程序,尤其是需要进行图文编辑的应用,也基本都会提供支持 PicGo 的插件。比如,
– obsidian 中的 image auto upload plugin 提供了 picgo-core 的支持;
– VSCode 中的 vs-picgo。

Reference

  1. 图床集合
  2. https://www.daniao.org/10229.html
  3. https://wuangwang.cn/archives/67
  4. https://sspai.com/post/52527
  5. https://www.shejibiji.com/archives/8411
  6. https://new.qq.com/rain/a/20220329A04BP500
  7. PicGo-Core在Obsidian中的配置使用

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注