1 前言

一个好的图床,是网站或文章的图片能稳定显示的关键,可是很多图床要么不稳定,要么收费,导致网站或文章图片经常挂掉,为了能让图片稳定显示,可以选择自建一个图床网站。

注意

本文将安装宝塔面板,使用宝塔面板可简化操作难度,另外涉及 Docker、ApiPost 和 PicGo 等程序的使用安装根据个人选择而定。

2 比较

2.1 EasyImage

EasyImage 是一款免费开源且功能强大的轻量图床程序,还不强制使用数据库运行。

演示站:https://png.cm/

2.1.1 特点

  • 支持 API
  • 支持仅登录后上传
  • 支持设置图片质量
  • 支持压缩图片大小
  • 支持文字/图片水印
  • 支持设置图片指定宽/高
  • 支持上传图片转换为指定格式
  • 支持限制最低宽度/高度上传
  • 支持上传其他文件格式
  • 在线管理图片
  • 支持网站统计
  • 支持设置广告
  • 支持图片鉴黄
  • 支持自定义代码
  • 支持上传 IP 黑白名单
  • 支持上传日志 IP 定位
  • 支持限制日上传次数
  • 支持创建仅上传用户
  • 对于安装环境要求极低
  • 对于服务器性能要求极低
  • 理论上支持所有常见格式

2.1.2 界面展示

image-20231205004313244

image-20231205004342712

image-20231205004412366

image-20231205004519102

2.2 Lsky Pro

Lsky Pro 是一个用于在线上传、管理图片的图床程序,可以将它作为云上相册或者写作图床等。

演示站(付费版):https://wmimg.com/

2.2.1 特点

  • 支持本地等多种第三方云储存 AWS S3阿里云 OSS腾讯云 COS七牛云又拍云SFTPFTPWebDavMinio
  • 多种数据库驱动支持,MySQL 5.7+PostgreSQL 9.6+SQLite 3.8.8+SQL Server 2017+
  • 支持配置使用多种缓存驱动,MemcachedRedisDynamoDB、等其他关系型数据库,默认以文件的方式缓存
  • 多图上传、拖拽上传、粘贴上传、动态设置策略上传、复制、一键复制链接
  • 强大的图片管理功能,瀑布流展示,支持鼠标右键、单选多选、重命名等操作
  • 自由度极高的角色组配置,可以为每个组配置多个储存策略,同时储存策略可以配置多个角色组
  • 可针对角色组设置上传文件、文件夹路径命名规则、上传频率限制、图片审核等功能
  • 支持图片水印、文字水印、水印平铺、设置水印位置、X/y 轴偏移量设置、旋转角度等
  • 支持通过接口上传、管理图片、管理相册
  • 支持在线增量更新、跨版本更新
  • 图片广场

2.2.2 界面展示

image-20231205003908798

image-20231205004011520

image-20231205004040212

image-20231205004102792

3 准备

推荐使用宝塔面板,两款图床均需要 LNMP 环境以及某些 PHP 拓展,使用宝塔面板可以降低环境搭建的难度,宝塔面板安装可参考下方文章,然后在宝塔面板选择安装 LNMP 套件

如果选择 EasyImage 图床,还可以使用 Docker,可参考下方文章

4 EasyImage 部分

本部分 EasyImage 的安装将介绍两种方式,分别是宝塔软件商店和 Docker,推荐使用宝塔软件商店

4.1 安装拓展

打开宝塔后台>软件商店>已安装>选择 php(设置)>安装扩展>选择安装fileinfo iconv zip mbstring openssl(如果没有就是已经安装了),安装完成后重启 PHP

image-20231128194825519

4.2 安装图床

4.2.1 方式一:宝塔软件商城(推荐)

在宝塔面板左侧菜单栏点击软件商店,选择一键部署分类,搜索简单图床,在列表中找到对应项目点击一键部署操作

image-20231128193813757

进行部署配置,域名需要在云服务商的域名控制台进行域名解析

image-20231128204402092

提交完成后在宝塔面板左侧菜单栏点击网站,找到简单图床对应的网站行点击设置,点击网站目录关闭防跨站攻击

image-20231128205616540

创建成功站点后访问,首先会对安装环境进行检测,无问题则下一步

image-20231128210128723

第二步将进行网站基础配置,如无特殊情况则保持默认开始安装,跳转至登录页即为安装成功

image-20231128210331634

4.2.2 方式二:Docker 部署

创建配置目录和存储目录

1
2
3
4
# 配置目录
mkdir -p /root/data/docker_data/easyimage/config
# 存储目录
mkdir -p /root/data/docker_data/easyimage/i

使用 docker-cli 安装 EasyImage

1
2
3
4
5
6
7
8
9
10
docker run -itd \
--name easyimage \
-p 8080:80 \
-e TZ=Asia/Shanghai \
-e PUID=1000 \
-e PGID=1000 \
-e DEBUG=false \
-v /root/data/docker_data/easyimage/config:/app/web/config \
-v /root/data/docker_data/easyimage/i:/app/web/i \
ddsderek/easyimage:latest

通过 IP:8080 访问,如要通过域名访问需使用 Nginx 做反向代理

4.3 图床使用

4.3.1 获取 PicGo

下载最新版PicGo

image-20231129003108015

4.3.2 安装插件

安装后在插件设置中搜索 web-uploader,选择 web-uploader 1.1.1 安装

image-20231129003530480

4.3.3 配置图床

依次点击图床设置>自定义 Web 图床,然后新建一个图床配置,按照如下方式填写,然后确定并设置为默认图床

1
2
3
4
5
6
图床配置名:     // 自定义
API地址: https://png.cm/api/index.php // 网站api地址
POST参数名: image
JSON路径: url
自定义请求头: // 不填写
自定义Body: {"token":"1c17b11693cb5ec63859b091c5b9c1b2"} // 网站生成的token。将其放在{"token":"xxx"}中

image-20231129195931317

然后在图床安全中的高级设置里开启 API 上传

image-20231129203058534

4.3.4 测试上传

在 PicGo 上传一张图片,并在简单图床中查看是否有这张图片,若有则为上传成功,没有则检查以下几点

  1. 是否开启 API 上传
  2. PicGo 的配置信息是否正确,尤其是自定义 Body 中需要添加{“token”:“xxx”}
  3. 图床选择是否正确

image-20231129203416856

5 Lsky Pro 部分

5.1 环境安装

宝塔面板的 LNMP 套件的 PHP 默认版本为 7.4,而 Lsky Pro 的要求为大于等于 8.0.2,打开宝塔后台>软件商店,搜索 PHP,推荐安装 8.1 版本

image-20231129211215544

进入 php8.1 管理页,然后点击安装扩展,安装fileinfoimagemagickexif扩展

image-20231129225215865

进入 php8.1 管理页,然后点击禁用函数,找到exec、shell_exec 函数readlink、symlink 函数putenv、getenv 函数chmod、chown、fileperms 函数点击删除

image-20231129225337889

5.2 安装图床

5.2.1 创建站点

打开宝塔面板,选择左侧菜单栏的网站,点击添加站点,域名可设置 IP 或域名,数据库选择 MySQL,PHP 版本选择 PHP-81,其它项可自定义

image-20231129231001728

5.2.2 上传程序

Lsky Pro GitHub 发布页中找到最新版本的图床程序并复制下载链接

image-20231130112902254

打开刚刚创建的网站根目录,在远程下载中选择从 URL 链接下载,在 URL 中填写在 GitHub 复制的下载链接,如果无法远程下载,就在 GitHub 里下载到本地后上传

image-20231130114212307

下载好后双击文件名解压到当前目录

image-20231130114914048

5.2.3 网站配置

程序上传完后回到网站>站点设置>网站目录,将网站运行目录设置为 /public目录,修改后点击保存

image-20231130121345910

然后点击伪静态,输入以下规则后保存

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

image-20231130121755251

5.2.4 图床安装

在云服务商的域名控制台将访问域名进行域名解析,在浏览器中访问站点地址自动跳转至安装页面,在第一步运行环境检测中无问题则下一步

image-20231130122630674

在前面创建站点时就创建了数据库,在宝塔面板左侧菜单栏点击数据库,找到对应数据库按提示填写

image-20231130123315808

最后点击立即安装,出现程序安装完成。即为安装成功,点击指定位置即可快速访问程序首页

image-20231130123618692

image-20231130123747116

5.3 图床使用

4.3.1 获取 PicGo

下载最新版PicGo

image-20231130130019268

4.3.2 安装插件

安装后在插件设置中搜索 lankong,选择作者为 hellodk 的安装

image-20231130130240110

4.3.3 配置图床

获取 Token:

使用 ApiPost 或者在线 POST 工具,打开 Lsky Pro 左侧菜单栏的接口项(需登录),获得接口 URL

image-20231130133705248

依次点击图床设置>lankong,然后新建一个图床配置,按照如下方式填写,然后确定并设置为默认图床

1
2
3
4
5
6
7
8
9
图床配置名:     // 自定义
Lsky Pro Version: V2 // 版本,选择V2
Server: http://lsky.talen.top // 图床地址,不要以/结尾
Auth token: Bearer x|xxxxxxxxxxxxx // Token,需用Bearer拼接
Strategy ID: // 存储策略 ID,如果是使用默认存储策略则留空;除非知道具体ID否则请留空
Album ID: // 相册ID,选填
Permission: private(default) // 图片权限,公开还是私有,默认是私有
ignore certificate error: 开关 // 保持关闭,遇到证书报错再考虑是否开启
Sync Delete: 开关 // 同步删除选项,开启后在 PicGo 相册中删除图片可同步删除图床上的文件

image-20231130160230371

4.3.4 测试上传

在 PicGo 上传一张图片,并在 Lsky Pro 图床中查看是否有这张图片,若有则为上传成功,没有则检查以下几点

  1. PicGo 的配置信息是否正确,尤其是 Auth token 中需要添加Bearer 拼接
  2. 图床选择是否正确

image-20231130161339590

6 写在最后

本文两款图床在应对日常使用没有太大的区别,在搭建上 EasyImage 图床更加快捷方便,在页面 UI 上 Lsky Pro 更加美观,操作也更舒服,要选择哪一款可以尝试一些演示站后决定,但无论哪一款,一定要注意隐私安全。