【Docker】配置lsky pro兰空图床
Docker 部署 lsky pro 兰空图床的教程
1.使用Docker部署
1.1 命令行
命令比较简单,用下面的即可
1 | docker run -d \ |
--name
设置容器名字为 lsky-p
设置端口隐射,容器的80端口映射给本地的14728端口-v
设置存储映射,本地的/root/docker/lsky
映射给/var/www/html
完成后,进入IP:14728
即可打开你的图床页面
此命令在CentOS7.2云服务器上测试有效,但在我的nas上测试无效
2023.05.17更新:最初写这篇博客的时候,使用的是旧版本的lsky容器。目前新版本的容器已经切换了内部端口为8089,所以新版本的命令如下
1 | docker run -d \ |
这也是为什么当初我写下了“在nas上测试无效”的记录。因为容器内部端口并不是80,所以原本的命令失效了。
2.初始化
新用户直接用sqlite即可,如果对性能有更高要求,建议使用mysql。
因为我就是给自己作图床而已,所以直接用sqlite方便多了。除非你需要给非常多的用户使用,且有高并发的需求,否则不建议使用MySQL,没有意义。
后续打开lsky的主页面,就能上传图片了。
2.1 设置管理员用户总容量
首先当然是进入用户组设置,把自己这个管理员用户的总容量改成5gb(默认500mb)
在系统设置里可以改用户的初始容量,看你的情况要不要增加
2.2 新建角色组
其次,可以在角色组里面新增一个管理员组,设置一下单图大小限制(默认5mb)以及每天/每周/每月的图片上传数量限制;同时,在角色组这里还可以修改命名格式
个人建议去掉路径命名中的日期,这样能一定程度上的避免同一图片的二次存储。
如果你上传了两个完全一样的图片,在
我的图片
里面会显示两个,但是只会有一个本地文件。
文件的命名除了随机字符串,还可以选择md5、时间戳命名
2.3 设置阿里云OSS为存储
这部分很简单,照着标识的填就行了。个人还是选择了本地存储的方式(阿里云OSS批量导出数据很麻烦)
填了之后,上传的图片会直接返回阿里云OSS的链接
2.4 权限问题
如果你有一些本地的图片,想添加到lsky图床的根目录方便访问的话,就需要配置一下目录的图片
举个例子,我有一图片的压缩包,我想将其放入lsky的stroage/app
的my
文件夹里面,那么创建这个文件夹的时候,就需要修改它的权限
1 | chown 33:tape my # 配置my文件夹的用户和用户组 |
否则lsky图床没有办法正确读取或者往这个目录写入,从而导致上传错误
3.https访问
3.1 修改代码
参考 https://github.com/lsky-org/lsky-pro/issues/321
需要添加代码,docker用下面的方式添加后重启即可。这个修改的目的是让lsky中访问url的时候都用https而不是http去访问,并不是给lsky配置证书。
1 | docker exec -it 容器名字 sed -i '32 a \\\Illuminate\\Support\\Facades\\URL::forceScheme('"'"'https'"'"');' /var/www/html/app/Providers/AppServiceProvider.php |
个人感觉,该issue已经提出了将近一年,lsky还是不支持在前端后台或者配置文件中直接配置https,实在有点不太应该。或许维护者是认为该修改代码的操作并不困难,就没有写入配置文件中。
不过这只是鸡蛋里挑骨头,lsky整体还是非常好用的。
3.2 nginx配置
安装nginx,可以参考我的 nginx安装博客
1 | server { |
写入配置文件后,重启nginx容器,并将img.text.top
域名的解析设置成你云服务器的公网ip,就可以用img.text.top
访问你的lsky图床了。
3.2.1 http重写为https
注意,默认情况下,lsky的所有文件加载都会走http
,即便你打开了https://img.musnow.top
,那些css和js的资源还是走了http://img.musnow.top
,这种混合http和https
的加载容易被浏览器拦截,导致lsky图床的界面显示的乱七八糟。
所以nginx配置文件的location
中,一定要加上如下配置项,相当于将http重写为https
1 | proxy_set_header Upgrade-Insecure-Requests 1; |
如果你像我一样使用了1panel来管理站点,此时openresty(1panel用的就是这个)的安装路径如下
1 | /opt/1panel/apps/openresty/openresty/www/sites/ |
在这里面你可以看到你配置好的站点(文件夹名字都是域名)
进入你想修改的域名站点中,可以看到下面几个文件夹
1 | index log proxy ssl waf |
进入proxy文件夹,里面会有一个root.conf
,即为根路径的配置文件,你需要修改这个文件,在里面加上上述提到的配置项,否则lsky的界面会变乱。
修改好了以后,进入1panel的web页面,找到站点的配置文件选项框
点击最下方的保存并重载,即可生效
刷新界面,可以看到页面加载正常了
3.3 又拍云cdn
除了直接将域名映射至服务公网IP,还可以通过CDN来访问我们的图片。这样用户ping我们的域名的时候,无法直接得到我们服务器的公网IP,能在一定程度上防止被直接ddos攻击。
CDN除了可以隐藏源站IP,更重要的是区域分发加速。但对于访问量较低的个人站点而言,CDN的区域加速功能基本无效,甚至可能会让加载速度变得更慢。
这里我使用的是又拍云CDN,注意使用之前,你需要申请好这两个子域名的https证书,可以是单域名证书,也可以是通配符证书。单域名证书能在又拍云CDN中免费申请
推荐大家去申请一个又拍云联盟,只需要在网站页脚贴一个logo,就能白嫖一年67元的代金券。新人用户也有有效期一个月的61元代金券
3.3.1 创建CDN服务
进入控制台,点击创建CDN服务,按如下格式填写
创建好了之后,如果访问img1.text.top
,那么就是经过了cdn的,如果访问img.text.top
即为源站
此时你可以修改lsky pro存储策略中的图片访问url,让lsky直接返回img1.text.top
的连接
3.3.2 回源host
创建好了之后,还需要进一步配置。在回源管理中,修改回源host为源站域名。如果是👆图创建的样式,那么源站域名就是img.text.top
解释一下这里的回源host,和nginx里面配置的域名有关系。
- 简单来说就是浏览器在访问
img1.text.top
加速域名的时候,又拍云服务器会访问img.text.top
进行回源操作; - 此时他会发送一个host,如果这里不设置,默认的host就是访问域名,即
img1.text.top
; - 但是我们的云服务器中nginx可能没有配置
img1.text.top
的反代规则,此时就会被随机跳到一个配置了反代的端口上,无法正确跳转到img.text.top
(此情况是配置了多个nginx反代,如果只有一个nginx的服务,可能不会出现跳转错误) - 配置了host为
img.text.top
后,CDN进行回源的时候,就会告诉服务器我是img.text.top
,服务器的nginx反代就能正确识别域名并返回服务;
这个回源host在加速诸如vercel、netlify、GitHub Pages等具有域名访问控制的服务的时候尤为重要。比如下图就是因为我没有配置host,导致CDN加速发送的请求域名并没有被vercel收录,也就不知道要转到那个服务上,于是便404无法访问。
3.3.3 https设置
使用cdn加速后,即便你源站有ssl证书,cdn加速后的域名也不一定能正常访问https。
此时就需要在cdn的配置中添加https证书
这里可以添加自有证书,也可以在又拍云CDN申请单域名证书。又拍云申请ssl证书的操作还是挺快的,几分钟就好了,这点值得表扬
3.3.4 缓存控制
这里还需要配置一下缓存控制,否则默认会是全站加速
对于lsky来说,我们需要加速的只是图片资源你,并不需要加速管理页面
如果配置了缓存规则之后,进入管理页面出现了问题,那就需要配置一下不缓存规则,把管理页面、设置页面给加入进去
3.3.5 源站静态资源迁移
在回源设置里面有一条是静态资源迁移,这个还是很不错的!
因为又拍云的CDN回源到bucket是不用钱的,这样就相当于只需要付存储的费用就行了。因为我的站点访问量小,对于CDN回源而产生的存储肯定少的可怜,完全不用担心费用问题
需要操作的就是添加一个云存储
配置一个操作员,提供写入和读取权限,就OK了。不需要绑定域名
在静态资源迁移里面选择这个云存储即可
4.picgo
都用图床了,肯定不能少了老朋友Picgo
在插件商店可以搜到lankong
插件,开源地址 hellodk34/picgo-plugin-lankong
配置插件参考README,我这里发现picgo 2.3.0 BATA8
无法正常运行插件,只有2.3.1
版本的picgo可以用。
其中关于permission
需要注意的是,这个设置的是兰空图床的权限,也就是你上传的图片能不能在图床网站上直接被看到。并不是阿里云OSS那种外部无法直接访问的私有
权限。
注意啊注意啊,token需要你自己调用curl
或者用postman/apifox
调用api获取
别像我一样傻乎乎的,用这个示例值试了好久😥
5.nsfwjs 鉴h
除非你的图床不打算公开给任何人用,关闭了注册/游客上传
的功能;那么我建议你设置一下鉴h操作。
兰空图床支持阿里云/腾讯云的内容安全,但是这俩玩意说实话,对于一个无人问津的小站点而言,价格太恐怖了。相比之下,nsfw的api可以直接用docker部署,经过我的测试,效果还是不错的。
1 | version: '3' |
在角色组设置里面,可以设置图片审核。配置好docker之后,url末尾需要带一个/classify
才能正常调用。默认的阈值是60,实在太够了,保险起见,阈值越低越好。
请注意,部署的nsfw的服务必须要能够外网访问,填机器内部IP是不行的。
这里我把阈值设置成了15,能屏蔽掉很大一部分的h图,但是用户发违反其他规定的图片就需要你人工审核(或者去买阿里云/腾讯的内容审核)了。个人建议,直接关闭游客上传/注册功能,除非你打算建立一个完全公开的图床站点,并对你图床的内容负责。
配置好了之后,如果有用户上传奇怪的图片,会直接禁止,上传失败。
6.修改页脚
使用 vscode(remote-ssh) 进入lsky的docker映射到本地的文件夹(如果你使用nas部署,则用vscode打开smb的文件夹,进入倒lsky映射到你nas本地的文件夹),搜索如下
1 | present Lsky Pro. All rights reserved. |
有两个文件中都包含了页脚信息,都给他修改了就行;修改后重启容器就能生效
如图,我的图床的页脚就是修改后的信息
要是lsky后台配置项能直接加上这个配置项就好了,默认的页脚写的都还是2018年,太旧了。
More
有任何问题,欢迎在下方评论