【Docker】配置lsky pro兰空图床

news2024/9/22 19:31:03

Docker 部署 lsky pro 兰空图床的教程

本文首发于 慕雪的寒舍

1.使用Docker部署

命令比较简单,用下面的即可

docker run -d \
--name lsky \
-p 14728:80 \
-v /root/docker/lsky:/var/www/html \
halcyonazure/lsky-pro-docker:latest
  • --name 设置容器名字为 lsky
  • -p 设置端口隐射,容器的80端口映射给本地的14728端口
  • -v 设置存储映射,本地的/root/docker/lsky 映射给 /var/www/html

完成后,进入IP:14728 即可打开你的图床页面

2.初始化

新用户直接用sqlite即可,如果对性能有更高要求,建议使用mysql。

image-20230128115958361

因为我就是给自己作图床而已,对mysql的认知近乎为0,所以直接用sqlite方便多了。

image-20230128120010907

后续打开主页面就能上传文件了

2.1 设置管理员用户总容量

首先当然是进入用户组设置,把自己这个管理员用户的总容量改成5gb(默认500mb)

image-20230128202120052

在系统设置里可以改用户的初始容量,看你的情况要不要增加

image-20230128205448834

2.2 新建角色组

其次,可以在角色组里面新增一个管理员组,设置一下单图大小限制(默认5mb)以及每天/每周/每月的图片上传数量限制;同时,在角色组这里还可以修改命名格式

image-20230128202430451

个人建议去掉路径命名中的日期,这样能一定程度上的避免同一图片的二次存储

如果你上传了两个完全一样的图片,在我的图片里面会显示两个,但是只会有一个本地文件。

文件的命名除了随机字符串,还可以选择md5、时间戳命名

image-20230128203010138

2.3 设置阿里云OSS为存储

这部分很简单,照着标识的填就行了。个人还是选择了本地存储的方式(阿里云OSS批量导出数据很麻烦)

image-20230128203243917

填了之后,上传的图片会直接返回阿里云OSS的链接

2.4 权限问题

如果你有一些本地的图片,想添加到lsky图床的根目录方便访问的话,就需要配置一下目录的图片

举个例子,我有一图片的压缩包,我想将其放入lsky的stroage/appmy文件夹里面,那么创建这个文件夹的时候,就需要修改它的权限

chown 33:tape my # 配置my文件夹的用户和用户组
# 33和tape是docker配置lsky的默认用户名和用户组

否则lsky图床没有办法正确读取或者往这个目录写入,从而导致上传错误

3.https访问

3.1 修改代码

参考 https://github.com/lsky-org/lsky-pro/issues/321

需要添加代码,docker用下面的方式添加后重启即可

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安装博客

server {
    listen 443 ssl;
    server_name img.text.top img1.text.top;  # 域名
    # 注意文件位置,是从/etc/nginx/下开始算起的
    ssl_certificate cert/img.text.top.crt; # 域名证书文件crt
    ssl_certificate_key cert/img.text.top.key; # 域名证书key
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;

    client_max_body_size 1024m;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_set_header Upgrade-Insecure-Requests 1;
        proxy_set_header X-Forwarded-Proto https;

        # 因为是docker部署的nginx,所以要填云服务器公网ip
        proxy_pass http://云服务器公网IP:端口;
    }
}
# 强制重定向
server {
    listen 80; # 监听80端口
    server_name img.text.top img1.text.top;  # 域名
    #把http的域名请求转成https
    return 301 https://$host$request_uri; 
}

写入配置文件后,重启nginx容器,并将域名的解析设置成你云服务器的公网ip,即可以用img.text.topimg1.text.top访问你的lsky图床

3.3 又拍云cdn

在我的配置项中,并没有把img1img都解析到云服务器,而是将img1作为cdn加速的域名

这里我使用的是又拍云CDN,注意使用之前,你需要申请好这两个子域名的https证书,可以是单域名证书,也可以是通配符证书。单域名证书能在又拍云CDN中免费申请

推荐大家去申请一个又拍云联盟,只需要在网站页脚贴一个logo,就能白嫖一年67元的代金券。新人用户也有一个月的61元代金券

image-20230206165043971

3.3.1 创建CDN服务

进入控制台,点击创建CDN服务,按如下格式填写

image-20230206165412426

创建好了之后,如果访问img1.text.top,那么就是经过了cdn的,如果访问img.text.top即为源站

此时你可以修改lsky pro存储策略中的图片访问url,让lsky直接返回img1.text.top的连接

image-20230206172805650

3.3.2 回源host

创建好了之后,还需要进一步配置。在回源管理中,修改回源host为源站域名。如果是👆图创建的样式,那么源站域名就是img.text.top

image-20230206165553230

解释一下这里的回源host

  • 简单来说就是浏览器在访问img1.text.top加速域名的时候,又拍云服务器会访问img.text.top进行回源操作
  • 此时他会发送一个host,如果这里不设置,默认的host就是访问域名,即img1.text.top
  • 但是我们的云服务器中nginx可能没有配置img1.text.top的反代规则,此时就会被随机跳到一个配置了反代的端口上,无法正确跳转到img.text.top(此情况是配置了多个nginx反代,如果只有一个服务,可能不会出现跳转错误)
  • 配置了host为img.text.top后,CDN进行回源的时候,就会告诉服务器我是img.text.top,服务器的反代就能正确识别并返回服务

这个回源host在加速诸如vercel、netlify、GitHub Pages等具有域名访问控制的服务的时候尤为重要。比如下图就是因为我没有配置host,导致CDN加速发送的请求域名并没有被vercel收录,也就不知道要转到那个服务上,于是便无法访问

image-20230206170124139

3.3.3 https设置

使用cdn加速后,即便你源站有ssl证书,cdn加速后的域名也不一定能正常访问

image-20230206170228828

此时就需要在cdn的配置中添加https证书

image-20230206170313358

这里可以添加自有证书,也可以在又拍云CDN申请单域名证书。又拍云申请ssl证书的操作还是挺快的,几分钟就好了,这点值得表扬

image-20230206170352912

3.3.4 缓存控制

这里还需要配置一下缓存控制,否则默认会是全站加速

image-20230206170455171

对于lsky来说,我们需要加速的只是图片资源你,并不需要加速管理页面

image-20230206170602751

如果配置了缓存规则之后,进入管理页面出现了问题,那就需要配置一下不缓存规则,把管理页面、设置页面给加入进去

image-20230206170634937

3.3.5 源站静态资源迁移

在回源设置里面有一条是静态资源迁移,这个还是很不错的!

image-20230206170824965

因为又拍云的CDN回源到bucket是不用钱的,这样就相当于只需要付存储的费用就行了。因为我的站点访问量小,对于CDN回源而产生的存储肯定少的可怜,完全不用担心费用问题

image-20230206171019126

需要操作的就是添加一个云存储

image-20230206170859282

配置一个操作员,提供写入和读取权限,就OK了。不需要绑定域名

image-20230206170911444

在静态资源迁移里面选择这个云存储即可

4.picgo

都用图床了,肯定不能少了老朋友Picgo

在插件商店可以搜到lankong插件,开源地址 hellodk34/picgo-plugin-lankong

image-20230128204920775

配置插件参考README;我这里发现2.3.0 BATA8无法正常运行插件,只有2.3.1版本的picgo可以用

image-20230128205142099

其中关于permission需要注意的是,这个设置的是兰空图床的权限,也就是你上传的图片能不能在图床网站上直接被看到。并不是阿里云OSS那种外部无法直接访问的私有权限。

注意啊注意啊,token需要你自己调用curl或者用postman/apifox调用api获取

别像我一样傻乎乎的,用这个示例值试了好久😥

image-20230128205239262

5.nsfwjs 鉴h

除非你的图床不打算公开给任何人用,关闭了注册/游客上传的功能;那么我建议你设置一下鉴h操作。

兰空图床支持阿里云/腾讯云的内容安全,但是这俩玩意说实话,对于一个无人问津的小站点而言,价格太恐怖了。

相比之下,nsfw可以直接用docker部署,经过我的测试,效果还是不错的

version: '3'
services:
  nsfw-api:
    image: penndu/nsfw-api:latest
    restart: unless-stopped
    hostname: nsfw-api
    container_name: nsfw-api
    ports:
      - "14727:3000"

在角色组设置里面,可以设置图片审核。配置好docker之后,url末尾需要带一个/classify才能正常调用。默认的阈值是60,实在太低了,保险起见,越低越好。这里我设置成了15,能屏蔽掉很大一部分的h图

image-20230128214435310

但是违反其他规定的图片就需要你人工审核(或者去买阿里云/腾讯的内容审核)了

个人建议,关闭游客上传/注册功能——除非你打算建立一个完全公开的图床站点,并对你图床的内容负责。

image-20230128214820262

配置好了之后,如果有用户上传奇怪的图片,会直接禁止,上传失败

6.修改页脚

进入lsky的映射到本地的文件夹,搜索

present Lsky Pro. All rights reserved.

有两个文件中都包含了页脚信息,都给他修改了就行;修改后重启容器就能生效

image-20230209171829880

More

有任何问题,欢迎在下方评论

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/341554.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于VS调试分析 + 堆栈观察问题代码段

文章目录问题代码段1 —— 阶乘之和问题代码段2 —— 越界的危害① 发现问题② 分析问题③ 思考问题【⭐堆栈原理⭐】④ 解决问题【DeBug与Release】👨程序员与测试人员👩✒总结与提炼问题代码段1 —— 阶乘之和 先来看一道C语言中比较基础的题目&#x…

新能源汽车PK燃油汽车,首次胜出,输赢真的那么重要?

新能源汽车PK燃油汽车,输赢真的那么重要?是的。【科技明说 | 每日看点】今天看到一个新能源汽车领域的消息,我觉得很有意思,是说中国新能源汽车满意度水平首次超过了燃油汽车,你们觉得是这样么?…

语义通信:DeepSC用于文本传输也太香了吧

论文标题:Deep Learning Enabled Semantic Communication Systems 论文链接:https://arxiv.org/abs/2006.10685v1 摘要 最近,人们开发了支持深度学习的端到端(E2E)通信系统,以合并传统通信系统中的所有物…

React中JSX的用法和理解

React的特点 React是用于构建用户界面的高效且灵活的 JavaScript 库,采用组件化模式和声明式编码;使用DOMdiff算法,最大限度地减少与DOM的交互。 相关js库 react.js:React核心库。react-dom.js:提供操作DOM的react扩…

Eclipse导出jar时的错误

文章目录一、发现问题二、解决问题三、新的问题今天,本来是风和日丽,轻风和畅的,复习的一天,直到我开始尝试导出 jar 可执行文件,兄弟们请记住这个词,我将被他折磨很久。一、发现问题 首先,我美…

RT-Thread MSH_CMD_EXPORT分析

RT-Thread MSH_CMD_EXPORT分析 1. 源码分析 在rt-thread中,使用FinSH,可以支持命令行。在源码中,使用MSH_CMD_EXPORT导出函数到对应命令。 extern void rt_show_version(void); long version(void) {rt_show_version();return 0; } MSH_CM…

实战超详细MySQL8离线安装

在RedHat中,RPM Bundle 方式安装MySQL8。建议一定要用 RPM Bndle 版本安装,包全。官网下载:https://dev.mysql.com/downloads/mysql/1.卸载mariadb,会与MySQL安装冲突。rpm -qa | grep mariadb 查看有无mariadb如果有&#xff0…

数据机构笔记哈夫曼编码

1.什么是哈夫曼树?哈夫曼树经典问题:合并果堆问题:如果有三个果堆,其质量分别是1,2,3,我们现在需要将这三堆合并成一堆果堆,合并过程消耗体力等于两堆果堆的质量之和,求最小体力消耗值&#xff…

java贪心算法

1 应用场景-集合覆盖问题 假设存在下面需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区 都可以接收到信号 2 贪心算法介绍 贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优…

Threadlocal为何引发内存泄漏问题

首先我们要先了解什么是泄漏问题和什么是内存溢出 内存泄漏表示程序员申请了内存,但是该内存一直无法被释放 内存溢出表示申请内存不足,就会报错 为何引发内存泄漏问题 因为每个线程都有自己独立的ThreadLocalMap对象,key为ThreadLocal&…

【C++1】函数重载,类和对象,引用,string类,vector容器,类继承和多态,/socket,进程信号

文章目录1.函数重载:writetofile(),Ctrue和false,C0和非02.类和对象:vprintf2.1 构造函数:对成员变量初始化2.2 析构函数:一个类只有一个,不允许被重载3.引用:C中&取地址&#x…

【shell 编程大全】内容格式化以及多样化输出

内容格式化以及多样化输出 1. 前倾回顾 本章节我们一起来学习下,shell中内容格式化,以及多样输出。但是在学习之前,我们先来看看上个章节【shell 变量的定义以及使用】 我们都学习到了什么知识 shell 变量的定义以及使用 变量分类变量定义类…

SpringBoot设置和读取配置文件(1)

SpringBoot配置文件是用来保存SpringBoot项目当中所有重要的数据的,比如说数据库连接信息,数据库的启动端口,如果端口被占用了,那么就可以随时修改; 1)比如说我们之前再写JDBC的代码的时候,要去写链接字符串…

C 字符串

在 C 语言中,字符串实际上是使用空字符 \0 结尾的一维字符数组。因此,\0 是用于标记字符串的结束。空字符(Null character)又称结束符,缩写 NUL,是一个数值为 0 的控制字符,\0 是转义字符&#…

SNI生效条件 - 补充nginx-host绕过实例复现中SNI绕过的先决条件

文章目录1.前置环境搭建2.测试SNI生效条件(时间)3. 证书对SNI的影响3.1 双方使用同一个证书:3.2 双方使用不同的证书与私钥4. 端口号区分测试4.1 端口号区分,证书区分:4.2 端口号区分,证书不区分:5.总结SNI运行机制6. SNI机制绕过…

Docker-安装Jenkins-使用jenkins发版Java项目

文章目录0.前言环境背景1.操作流程1.1前期准备工作1.1.1环境变量的配置1.2使用流水线的方式进行发版1.2.1新建流水线任务1.2.2流水线操作工具tools步骤stages步骤1:拉取代码编译步骤2:发送文件并启动0.前言 学海无涯,旅“途”漫漫,“途”中小记&#xff…

从0到1一步一步玩转openEuler--12 openEuler用户管理

文章目录12.1 创建用户12.1.1 useradd命令12.1.2 用户信息文件12.1.3 创建用户实例12.2 修改用户账号12.2.1 修改密码12.2.2 修改用户shell设置12.2.3 修改主目录12.2.4 修改UID12.2.5 修改账号的有效期12.3 删除用户12.4 管理员账户授权在Linux中,每个普通用户都有…

【Java 面试合集】怎么声明一个类不会被继承,以及应用场景

怎么声明一个类不会被继承,以及应用场景1. 概述 今天的Java 面试合集又来了。今天我们复习的问题是:怎么声明一个类,不可以被继承 2. 验证 public final class TestMath { }通过上述截图 我们可以看到,被关键字final 修饰过的类,…

EOC第六章《块与中枢派发》

文章目录第37条:理解block这一概念第38条:为常用的块类型创建typedef第39条:用handler块降低代码分散程度第41条:多用派发队列,少用同步锁方案一:使用串行同步队列来将读写操作都安排到同一个队列里&#x…

02 OpenCV图像通道处理

1 通道提取与合并 在数字图像处理中,图像通道是指一个图像中的颜色信息被分离为不同的颜色分量。常见的图像通道包括RGB通道、灰度通道、HSV通道等。 RGB通道是指将图像分离为红色、绿色和蓝色三个颜色通道,每个通道表示相应颜色的亮度。这种方式是最常…