【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
有任何问题,欢迎在下方评论
- 最新
- 最热
- 最早
- 作者
点击重新获取 | 打开控制台