小熊奶糖(BearCandy)
小熊奶糖(BearCandy)
发布于 2024-04-04 / 25 阅读
0
0

基于AList+云盘+LskyPro · 搭建大容量图床服务

基于AList+云盘+LskyPro · 搭建大容量图床服务

前言:由于ECS实例存储空间有限,带宽有限,如果将数据存储在ECS实例不仅空间上受到限制,而且给迁移也带来了许多麻烦,由此思考能否把网盘挂载到本地,然后实现基于网盘的图片存储服务。优点:安全,可靠,容量大。缺点:可能会封号。所以大家谨慎处理

解释

什么是Alist:

一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动。

支持列表

什么是LskyPro

Lsky Pro 是一个用于在线上传、管理图片的图床程序,中文名:兰空图床,你可以将它作为自己的云上相册,亦可以当作你的写作贴图库。
兰空图床始于 2017 年 10 月,最早的版本由 ThinkPHP 5 开发,后又经历了数个版本的迭代,在 2021 年末启动了新的重写计划并于 2022 年 3 月份发布全新的 2.0 版本。

特性

  • 支持 本地等多种第三方云储存 AWS S3阿里云 OSS腾讯云 COS七牛云又拍云SFTPFTPWebDavMinio
  • 多种数据库驱动支持,MySQL 5.7+PostgreSQL 9.6+SQLite 3.8.8+SQL Server 2017+
  • 支持配置使用多种缓存驱动,MemcachedRedisDynamoDB、等其他关系型数据库,默认以文件的方式缓存
  • 多图上传、拖拽上传、粘贴上传、动态设置策略上传、复制、一键复制链接
  • 强大的图片管理功能,瀑布流展示,支持鼠标右键、单选多选、重命名等操作
  • 自由度极高的角色组配置,可以为每个组配置多个储存策略,同时储存策略可以配置多个角色组
  • 可针对角色组设置上传文件、文件夹路径命名规则、上传频率限制、图片审核等功能
  • 支持图片水印、文字水印、水印平铺、设置水印位置、X/y 轴偏移量设置、旋转角度等
  • 支持通过接口上传、管理图片、管理相册
  • 支持在线增量更新、跨版本更新
  • 图片广场

这里划重点LskyPro支持WebDav,Alist也支持WebDav并且能够提供WebDav

那什么是WebDav呢?

简单来说,webdav就像一个存储服务,各种应用都可以连接到它,允许应用直接访问我们的云盘内容,对其进行读写操作。我们可以网络服务比作一只章鱼,云盘是它的大脑,WebDAV是它的触角。每个触角都连接到我们智能设备上的应用程序。我们的应用可以通过触角读取章鱼的大脑,并将数据写入大脑,改变大脑的记忆和内容。

作者:知乎用户
链接:https://www.zhihu.com/question/30719209/answer/1229364665
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

WebDav规范:WebDAV 规范文档(RFC4918)中文版 | WebDAV 规范文档 (fullstackplayer.github.io)

执行步骤:

1.安装1panel

参见:在线安装 - 1Panel 文档

这步的主要目的是安装docker,熟悉docker的大佬可以跳过了

2. 安装OpenResty&&MySQL

直接在1panel的应用商店就可安装这里就不过多介绍了

3. 拉取镜像(docker的镜像配置方式网上有许多,这里不过多介绍)

docker pull coldpig/lskypro-docker

4.运行docker容器

4.1lskypro安装
docker run -d \
    --name lskypro \
    --restart unless-stopped \
    -p 9080:80 \
    -v /path-to-data:/var/www/html \
    coldpig/lskypro-docker:latest

name 9080 path-to-data都是可以自定义的

这个命令是用来启动一个名为 lskypro的Docker容器,并且使用了 coldpig/lskypro-docker:latest这个镜像。下面是对这个命令中各个参数的详细解释:

  1. docker run: 这是Docker的基本命令,用于创建一个新的容器并运行一个镜像。
  2. -d: 这个参数表示容器将在后台运行(detached mode)。这意味着一旦容器启动,它将在后台运行,并且不会占用命令行界面。
  3. --name lskypro: 这个参数用于指定容器的名称。在这个例子中,容器的名称被设置为 lskypro。这使得我们可以很容易地引用这个特定的容器,而不需要记住它的随机生成的ID。
  4. --restart unless-stopped: 这个参数设置了容器的重启策略。在这个配置下,如果容器停止运行(除了被手动停止),Docker将尝试重启它,除非它被手动停止。
  5. -p 9080:80: 这个参数用于端口映射。它将容器内部的80端口映射到宿主机的9080端口。这意味着,当访问宿主机的9080端口时,实际上流量会被转发到容器内部的80端口。
  6. -v /path-to-data:/var/www/html: 这个参数用于卷挂载。它将宿主机的 /path-to-data目录挂载到容器内的 /var/www/html目录。这样,容器内的应用程序就可以直接读写宿主机上的文件,而不需要将文件复制到容器内部。这对于保持数据持久性和共享数据非常有用。
  7. coldpig/lskypro-docker:latest: 这是要运行的Docker镜像的名称和标签。在这个例子中,我们使用的是 coldpig用户上传的 lskypro-docker镜像的最新版本(latest标签)。

综上所述,这个命令创建并启动了一个名为 lskypro的Docker容器,该容器将在后台运行,并且配置了自动重启策略,除非被手动停止。容器的80端口被映射到宿主机的9080端口,宿主机的 /path-to-data目录被挂载到容器内的 /var/www/html目录。使用的是 coldpig用户上传的 lskypro-docker镜像的最新版本。

4.2Alist安装
docker run -d --restart=unless-stopped -v /etc/alist:/opt/alist/data -p 5244:5244 -e PUID=0 -e PGID=0 -e UMASK=022 --name="alist" xhofe/alist:latest

其中将宿主机中的/etc/alist映射到容器的/opt/alist/data

5配置Alist

使用docker exec进入容器

docker exec -it [Alist容器名称] /bin/bash 
# 随机生成一个密码
docker exec -it alist ./alist admin random
# 手动设置一个密码,`NEW_PASSWORD`是指你需要设置的密码
docker exec -it alist ./alist admin set NEW_PASSWORD

根据修改的密码进入Alist

5.1配置存储:(官方文档:通用项 | AList文档 (nn.ci)

这里需要记住的是Alist挂载目录待会儿会用到

这里千万要记住不要开签名,以及全局设置中的签名!

开了会报401错误(图片可以上传但无法读取图片)

报错信息

{"code":401,"message":"expire missing","data":null}

5.2创建一个Alist用户(可选)

给于webdev权限,增加删除,上传,下载等文件操作权限

基础目录选择云盘挂载目录,这样这个用户的根目录就是云盘挂载目录

6配置LskyPro

6.1通过1panel将LskyPro的网络与MySQL的网络放在一起这样LskyPro就可以访问到1panel的网络了

这里需要创建个数据库,并记住mysql的虚拟网络地址

在LskyPro的配置页面中将Mysql的地址填上,输入账户名,密码等进入系统

6.2在LskyPro中的存储策略中创建新的存储策略

存储策略选择WebDev

访问网址为图片访问域名

这里我的是

https://tuku.test.com/image

连接地址填Alist的服务器地址

https://alist.test.com

认证方式选择Basic

用户名和密码填写Alist的用户名和密码

路径前缀为

/dav/[Alist的挂载路径]/[自定义文件夹]

如果你配置过Alist用户那么

路径前缀为

/dav/[自定义文件夹]

7配置反向代理和伪静态

记住Alist的容器端口和LskyPro的容器端口

创建两个网站

反向代理分别填写

127.0.0.1:[Alist的容器端口]

127.0.0.1:[LskyPro的容器端口]

其中LskyPro需要设置转发规则(伪静态页面配置)

# 转发图床服务请求
        location /[LskyPro的访问域名(参见6.2)后缀 我这里是image] {
            proxy_pass http://localhost:[alist的端口]/d/[挂载路径|如果添加用户并设置根目录的则不需要填并要删除d后面的“/”];
            proxy_read_timeout 600s;
        }
 转发图床服务请求
        location /image {
            proxy_pass http://localhost:4003/d/image;
            proxy_read_timeout 600s;
        }

这段代码是Nginx的配置片段,用于设置特定请求路径的代理转发规则。具体来说,它定义了当客户端向Nginx服务器发起以/image开头的请求时,Nginx应该如何处理这些请求。下面是对这段配置的逐行解释:

location /image {:这是Nginx配置中的location指令,用于定义特定的请求路径。在这个例子中,/image表示匹配所有以/image开头的请求路径。任何符合这个模式的请求都会被这个location块处理。

proxy_pass http://localhost:4003/d/image;:这是proxy_pass指令,它告诉Nginx将请求转发到指定的URL。在这个例子中,请求将被转发到http://localhost:4003/d/image。这意味着Nginx会将接收到的/image路径的请求转发到本地的4003端口上的服务,并在转发时附加/d/image路径。这通常用于将请求发送到后端应用服务器或微服务。

proxy_read_timeout 600s;:这是proxy_read_timeout指令,用于设置Nginx等待后端服务器响应的超时时间。在这个例子中,超时时间被设置为600秒(即10分钟)。如果后端服务器在这段时间内没有发送响应,Nginx将关闭连接并可能返回一个超时错误给客户端。这个设置确保了Nginx不会因为等待响应而无限期地占用资源。

这里的d应该是dirct的缩写意为直接访问

总的来说,这段配置确保了所有以/image开头的请求都会被Nginx捕获,并转发到本地运行的图床服务上,同时设置了足够的超时时间以避免因为后端服务响应慢而导致的连接中断。

上传图片进行测试

大佬做的视频教程

https://www.bilibili.com/video/BV1XW4y1Q7cy


评论