[scode type="lblue"]此教程中的图床https://nii.ink正式开放给网友使用,如有问题请联系博主,另:我不保证分发链接的永久有效性[/scode]
介绍
在之前的文章中我提到了一个令人满意的图床所需要的条件:
- 安装简单
- 颜值舒服
- 可迁移
- 支持api
- 方便查看和管理图片
后来又说公共图床接口不是必须的,不可否认我只是给自己一个心理安慰罢了,如果有那当然更好了,如果能实现分发上传,访问链接自动跳转至有效的图床,那岂不是速度和安全性都有了?
幸运的是,我前几天还真发现了这样的图床,不仅支持20+公共图床(阿里、百度、搜狗、SMMS……),还支持常见的私有云存储(FTP、又拍、七牛、OSS、COS),最重要的是,支持分发上传!还可以在后台控制各图床的权重及同步到其他图床。试用了一下我表示非常满意,可以说是我用过的最好的图床程序了。
[scode type="yellow"]pro版本是收费的,售价¥88,我觉得挺值的,也请大家多支持一下正版,购买地址及介绍[/scode]
[scode type="lblue"]也有免费版本,无分发上传和后台。[/scode]
部署
首先感谢开发者@余生'Blog的耐心指导,让我这个小白成功配置好了CDN。
配置环境
- PHP 7.0+
- thinkphp伪静态
- fileinfo扩展
- MySQL InnoDB引擎
还是以宝塔为例,毕竟简单。
安装好宝塔,进入宝塔管理后台部署LNMP
系统。
接着在php设置中安装fileinfo
扩展
注意fileinfo需要1g以上内存,若安装失败可以尝试添加swap
。在Linux工具箱
中添加即可。
安装程序
1.上传程序压缩包至网站根目录,解压
2.将压缩包中的sql
文件导入到数据库中
3.编辑config/database.php
,将数据库配置修改为你的,其中端口默认是3306。
4.将网站运行目录更改为public
5.配置伪静态为thinkphp
打开你的网址,若能正常显示则说明成功了。
默认管理员账号为admin
,密码admin123
登录地址为:http://yoursite/user/login(前台右上角有)
后台管理地位为:http://yoursite/admin(前台无,只能手动输入访问)
[scode type="yellow"]20200102更新:最新版本不再允许分发域名与主域名一样了,大家设置分发域名的时候可以选一个子域名[/scode]
配置CDN
[scode type="yellow"]如果你不需要对本地存储策略配置CDN,则可以跳过这一节[/scode]
在前一篇文章里我也摸索了CDN到底怎么配置,但是和大佬请教了一番,才发现我配置的方法是错误的。这里记录一下正确的配置方式。
首先,我们需要三个域名:加速域名、源站域名、中转域名(不知道官方名字叫啥,我就这样称呼了)。
其中,源站域名就是你图床网站的域名,不需要备案;加速域名就是CDN的域名,必须备案;中转域名是用来标识服务器地址的域名,也即加速域名的回源host
,通过它来确定图床源站的服务器地址,也无须备案。
以我的图床为例,源站域名是nii.ink
,加速域名是st.yanshu.work
,中转域名是n.nii.ink
,CDN放到百度云上,域名服务商是阿里云。
那么在百度云中,我们就添加一个加速域名st.yanshu.work
,并设置主源站为nii.ink
,然后在阿里云中添加一个st.yanshu.work
的CHAME记录,记录值就是刚刚百度云生成的。
接着在百度云的CDN管理中,修改其回源配置为n.nii.ink
然后再服务器上创建两个站点,分别为st.yanshu.work
和n.nii.ink
,并绑定目录为/www/wwwroot/nii.ink/public/images
。
其实可以把这两个站放到一起,但是为了后面加SSL方便,就分开放了。
[scode type="red"]切记不要忘了关闭防跨站攻击,三个站都要关掉![/scode]
然后在阿里云上添加一个n.nii.ink
的A解析,记录值为服务器的ip地址。
最后,在图床后台添加CDN加速域名http://st.yanshu.work
听起来有点复杂,总结来说:
- 在百度云(CDN服务商)中,你要做的就是添加加速域名并设置源站为源站域名,回源地址为中转域名;
- 在阿里云(域名服务商)中,添加加速域名的CHAME记录(指向百度云CDN),中转域名的A记录(指向服务器);
- 在服务器上,一共有三个网站,源站、加速站、中转站,但后两者都是绑定的源站,本质上来说只有一个站
配置完成后,输入你的加速域名st.yanshu.work
或者中转域名n.nii.ink
,如果显示下图就代表你配置成功了。
为什么非要有中转域名呢?想一下如果我现在要换个服务器,那么CDN该怎么调整?没错,不用改,只要我们把中转域名的A解析到新服务器ip上即可。也就是说中转域名其实起到的是方便我们更换服务器的作用。
博主后续又尝试了免费的百度云加速,需要注意的是在我的网站
->查看报表
->开启安全加速
这个选项一定要打开!这需要审核的,如果一直不通过直接私聊他们的客服(qq:4008768800)(和实名认证不是一回事)。另外打开实时同步
这个选项不要打开!
配置HTTPS
如果你跳过了前一节,那么这一节也可以跳过了,因为在宝塔加个SSL没有难度,如果你也想给加速域名加SSL,那么往下看。
在前一篇文章中我也提到了如何在百度云中给加速域名添加HTTPS证书,用这种方法后,你访问加速域名时自然就有小绿锁了。
但是如果有一天CDN停了呢?
此时你访问加速域名,得到的只是你的连接不是私密链接
的提示,但是用http还是可以访问的,猜测是CDN停了之后自然绑定CDN的https服务也就访问不到了。
解决方法就是在服务器的加速站中添加HTTPS证书,这样CDN停了之后,回源到服务器也能找到证书。
首先在百度云中找到SSL证书服务
点击查看证书
就可以下载PEM
格式的证书了。下载到本地后解压会出现三个文件,分别是url_ca.crt
,url.cer
,url.key
(url即加速域名),我们只需要用后两个。
用记事本打开后,将.key
中的内容复制到宝塔站点设置中其他证书
的左边(即密匙),将.cer
中的内容复制到右边
保存即可自动部署。
最后就是在后台将CDN加速域名改为https://
添加HTTPS证书的关键一点就是验证域名所有权,加了CDN后就不好验证了,所以宝塔中才会有这样的提示“若您的站点使用了CDN或301重定向会导致续签失败”
后台设置
大多数选项都很清晰,说一下应用
里的图床Api
ID
、标题
、唯一标识
等都是可以改的。是否开启
代表了是否在前台展示,是否选中
代表了默认分发图床,开启的话默认会分发到这些图床中,当然也可以在前台手动更换分发图床。
权重
指的是访问分发链接时各图床的展现频率,但仅限于已经分发的图床。比如上图中阿里图床的权重是800,本地的权重是1,那么代表访问分发链接时最有可能显示阿里图床,最不可能显示本地图。另外小米图床虽然权重是1000,但是由于它不在分发名单上,所以和权重为0一样。
理论上如果你会php语言的话,是可以自行添加api接口的,不过具体怎么操作我也不懂……
设置
里的Api设置
,是指使用api时上传图片的限制大小,不影响前台的限制!至于如何修改前台的上传限制,下一节会说。
此外,该图床是不支持多个私有云分发的!,也就是说,本地、COS、OSS、七牛又拍等你只能选择一个。
[scode type="green"]20200102更新:最新版本已经支持分发私有图床了[/scode]
修改图片上传大小
目前(1.3版本)并不能直接通过后台直接修改图片上传限制,只能通过源码来修改。
[scode type="green"]20200102更新:最新版本已经可以直接在后台修改上传限制了[/scode]
/public/static/index/js/upload.js
,大约在21、22行位置
maxFileSize: 5120,
maxFileCount: 10,
修改为你想要的配置(maxFileSize单位是kb,即现在图片限制5M)
然后修改/application/index/view/index/index.html
,大约是在23行
<p>5 MB max per file. 10 files max per request. We have hosted {$Hidove.total} pictures.</p>
这是前台的提示语。
更新CDN节点
也就是手动控制分发到其他图床,前台和后台的图片管理都可以做到这一点,但是后台没法全选图片,所以前台更方便一些。
在后台的图片管理中,可以选中一个图片,在编辑界面更新外链地址
但不知道为什么,大概率我会更新失败……
API上传
前台也有API菜单,里面给出了api使用方法,但是没有例子,我这里给出一个python示例吧。
from requests import post
url='http://nii.ink/api/upload' # 修改为你的请求地址
files = {'image': open(pic_path, 'rb')}
para={"apitype":"this,ali","token":""}
# apitype指的是图床接口,以唯一标识表示,用逗号分隔,token就是后台用户中的token
data_result=post(url,files = files,data=para).json()
print(data_result)
返回成功示例:
{'code': 200, 'msg': 'success', 'data': {'url': {'distribute': 'http://nii.ink/image/5dc0104408cb3', 'this': 'http://st.yanshu.work/2019/11/04/5dc0104408cb3.jpg', 'ali': 'https://ae01.alicdn.com/kf/U3ac42a397d2c486c9339ee5ced4917b3n.jpg'}}}
问题
私有节点分发
分发图床有私有节点时,其权重计算方法是(最小权重+最大权重)/2
如果你觉得太大或者太小,可以在application/index/controller/Image.php
中修改。
大概在282行,自行修改
array_walk($imageUrl, function ($value, $key) use (&$result, $minWeight, $maxWeight) {
if (strpos($key, 'Private') !== false) {
$result[$key]['url'] = $value;
$result[$key]['weight'] = ($minWeight + $maxWeight) / 2;
}
配置ufile
前台Host
填box.u-file.cn
,用户名是FTP用户名
后台:参考https://www.kancloud.cn/ivey/hidoveimage/1739323
更新V2
V2版全新安装:https://www.kancloud.cn/ivey/hidoveimage/1730027
V1数据库导入V2:https://www.kancloud.cn/ivey/hidoveimage/1730940
安装时可能会遇到以下问题:
1、至少要删除两个函数:putenv
和proc_open
2、卡到composer Updating dependencies
这一步不再动了
原因:很有可能你用的是国内服务器,拉取国外源的时候自然就很慢
解决方案:添加阿里源
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
# 取消全局配置
composer config -g --unset repos.packagist
版权属于:作者名称
本文链接:https://www.sitstars.com/archives/57/
转载时须注明出处及本声明
我搭建图虫都是用Ch的。
林林 2021-09-04
作者QQ号是什么 我想咨询购买 谢谢
风信子 2020-11-23
什么时候能卖啊
求打赏 2020-09-16
我又不是开发者,你问我也没用啊……
雁陎 2020-09-16 回复 @求打赏
还出售吗 想买
56465416416 2020-09-01
作者貌似最近比较忙,暂停出售了
雁陎 2020-09-02 回复 @56465416416
抱歉问下有PicGo的配置教程吗
1 2020-02-13
作者更新了picgo的部署方式,https://www.kancloud.cn/ivey/hidoveimage/1506557,有空我也会更新的
雁陎 2020-02-19 回复 @1
目前没有PicGo的hidove插件哦
雁陎 2020-02-13 回复 @1
阿里图床把我的IP给屏蔽了,咋整啊?大佬
略懂° 2019-12-30
被屏蔽了?不会吧,你是传了多少张图?我曾经用几个小时传了三千张图片,阿里也没屏蔽我啊。你贴一下报错代码
雁陎 2019-12-30 回复 @略懂°
我也是哔了狗了,现在只有调用余生的api了。尴尬
略懂° 2019-12-31 回复 @雁陎