简介

最近因为图片数开始变多,仓库体积太大,部署开始变慢,想做迁移图床的打算,无独有偶,搜到国内的一个开源云上相册——兰空图床,便开始捣鼓……

使用体验

安装

安装要求:

固定ip服务器一台+连接工具xshellxftp

兰空图床访问域名(可选)

CDN访问域名(使用兰空图床访问域名也可以,此访问域名起到CDN加速效果,推荐使用)

typora

picgo

因为之前装了好几次的php都以失败告终,安装兰空图床不可能再用本地安装了,所以我找到了它的docker版本:wbsu2003/lskypro,尝试了下使用还不错,但是picgo上传失败了,请教博主张时贰才知道版本不对,wbsu2003/lskypro的版本最新只是v1.6.4而已,源码都2.x了,所以我又找了个docker部署的版本:halcyonazure/lsky-pro-docker,这个版本会定时拉取兰空图床最新源码并构建推送到官方镜像源。

1
docker run -itd --restart=always --name=lskypro -p 9110:80 -v /www/lskypro:/var/www/html halcyonazure/lsky-pro-docker

里面已经有构建好的php环境,不用再安装php,但是还是需要安装数据库,docker安装可参考我的一篇文章:Docker 搭建 Mysql 环境并允许远程访问,本地安装可以使用我的一键安装脚本:install-mysql-5.7.sh

参数解释
-itd-i以交互式运行容器,-t分配一个伪输入终端,-d后台运行
–restartalways表示重启docker时自动启动容器
-p指定端口,格式为 主机(宿主)端口:容器端口
-v目录挂载到其他盘,格式主机(宿主)目录:容器目录
–name重命名容器名字

设置Https反代

因为nginx是安装在服务器的,方便管理,这里也提供一键安装脚本:install-nginx-1.21.3.sh

/usr/local/nginx/conf/nginx.conf添加以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#监听kl.shinie.top
server {
listen 80;
server_name kl.shinie.top;
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
server {
listen 443 ssl;
ssl_certificate /etc/ssl/kl.shinie.top/kl.shinie.top.pem; #证书位置
ssl_certificate_key /etc/ssl/kl.shinie.top/kl.shinie.top.key; #证书位置
ssl_session_cache shared:SSL:4m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
server_name kl.shinie.top;
location /{
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host:$server_port;#主要这一行添加$server_port
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:9110/;
client_max_body_size 20000m;
}
}

设置好后我遇到了一个资源无法加载的问题:使用兰空图床时无法加载谷歌字体以及解决方法

访问域名

安装兰空图床

设置数据库和管理员账号密码

设置数据库和管理员账号密码

安装完成

安装完成

获取token

获取token

首先我们需要获取token才能上传图片,可使用curl来发送post请求获取token:

1
curl -H "Content-Type: application/json" -X POST -d '{"email": "管理员邮箱", "password":"管理员密码" }' "你的域名/api/v1/tokens"

配置picgo

需要先安装picgo插件

安装picgo插件

Server填入域名,Auth token填写上一步获取的token

配置兰空图床

配置typora

软件链接:https://pan.baidu.com/s/18ZXyZmf3Oj4avrIf15jZwA?pwd=6666 提取码:6666

在文件->偏好设置设置picgo程序:

配置typora

粘贴图片进去时会提示上传图片

粘贴图片

设置CDN

在源站信息配置图床的ip和端口

设置CDN

在储存策略修改访问网址:

修改访问网址

一个简单的图床就配置好了

图床迁移解决方案

原方案

原来使用本地图片,存放在ButterflyBoot/source/img,每hexo new一篇文章出来就在ButterflyBoot/source/img新建一个文件夹,文件夹名称使用hexo-abbrlink生成的永久链接,链接的时候使用../img/xxxx/xxx.png格式,既能在typora编辑器上看到,也能在部署后看到图片,但是这样有一个缺陷:仓库体积会因为图片而变得很大,于是才有后面的图床迁移方案。

兰空图床迁移方案

首先在/www/lskypro/storage/app/uploads上传本地的img文件夹

上传本地img文件夹

修改文件夹所有者以及文件权限:

1
2
chown -R 33 /www/lskypro/storage/app/uploads/img/
chmod -R 700 /www/lskypro/storage/app/uploads/img/

创建一个储存策略,其中储存路径是/var/www/html/storage/app/uploads/imgimg就是上传服务器的图片文件夹名称

创建储存策略

测试访问

测试访问

在vscode一键替换这些图片链接即可

vscode一键替换

新建文章时可在角色组编辑上传路径为文章链接,如果CDN没了或者链接失效,可以立即回滚到原方案

角色组编辑

评价

这次适配可以完美替换本地链接,减少仓库体积,而且不用每次处理图片时都要去tinypng压缩一遍图片再上传

可以看出,本地图片和图床链接区别不大,vscode的一键替换就可以完成,容错率高。

本地图片和图床链接区别

总体来说,此次图床迁移方案非常nice。