expr

使用 AList 和 LskyPro 搭建大容量图床

写在前面

图床是用于存放图片的空间,基于图床可以很方便的实现图片分享,便于日常使用和前端开发。

兰空图床 · Lsky Pro 是一款基于 PHP 开发的开源图床项目,界面美观且易于操作,目前支持本地存储、AWS S3、阿里云 OSS、腾讯云 COS、七牛云、又拍云、SFTP、FTP、WebDAV、Minio 等多类存储服务。

Lsky Pro 的优势在于其支持 WebDAV 协议,因此我们可以使用 AList 绑定个人网盘(如阿里云盘、百度网盘、天翼云盘、夸克网盘等),将 AList 提供的 WebDAV 服务作为图床的存储策略,进而充分利用云盘空间,快速地通过图床将图片托管到个人网盘。

踩坑记录

1. 必须使用docker搭建!

我之前直接上传github官方压缩包文件安装,并且打了master分支下的补丁,最后能够连接alist并上传图片,也能登录进入dav,但是外链就会显示nginx 404。个人怀疑是不是github下的文件有问题(截至2023.05.03)。

2. Alist中挂载网盘时,webdav策略设成302重定向图会裂,本地代理就不会。

webdav策略说明-Alist

个人想法:原因一可能是302重定向读取速度太慢,兼容性不好;原因二可能是我的网站服务器都是香港的,而用的网盘是在大陆,网盘可能有一些限制。有待学习更多相关知识后搞明白。

官方文档

兰空图床

兰空图床 · Docs | GitHub · Lsky Pro

AList

AList Docs

部署步骤

1. 配置 AList WebDAV 服务

在个人网盘中创建 lskypro-image 文件夹,并在 AList 中将该文件夹挂载到相应路径。我使用的网盘是阿里云盘。

以上步骤完成后,访问 DAV 链接并通过身份校验后,即可进行图片的上传与访问。假设 AList 绑定的公网域名为  alist.domain.name.cn ,则图片存储服务的 DAV 链接为:https://alist.domain.name.cn/dav/image。

注意一定要加上/dav

2. 启动 LskyPro 图床容器服务

采用 Docker 的方式安装 ,命令如下:

# 创建容器并启动(宿主机4003端口可自行更改)
sudo docker run -d --name lskypro --restart unless-stopped -p 4003:80 -v /data/lskypro:/var/www/html coldpig/lskypro-docker:latest

3. 开启反向代理,绑定域名

4. 修改 Nginx 配置

注意,如果在 Nginx 配置中开启了 HTTPS ,需要执行以下命令修改图床项目源码,否则前端页面布局将被打乱:

<pre class="brush:bash;toolbar:false">sudo docker exec -it lskypro sed -i '32 a \\\Illuminate\\Support\\Facades\\URL::forceScheme('"'"'https'"'"');' /var/www/html/app/Providers/AppServiceProvider.php

假设图床服务的域名为 image.domain.name.cn,AList 部署在本地端口 4015,在 nginx 中添加如下配置项:

该方法已被更新,请用更新后的方法。

server {
    # 转发 AList 图片访问请求
    location /img {
    # 辅助完成 AList DAV 身份验证,${base64} 需要修改为 WebADV "账户:密码" 的 base64 编码
        proxy_set_header Authorization "Basic ${base64}";
        proxy_pass http://localhost:4015/dav/image;
        proxy_read_timeout 600s;
    }
}

Nginx 配置说明

上传至图床的图片应该是可公开访问的,但 AList 提供的 WebDAV 服务需要身份验证,为此我们在以上 Nginx 配置中增加了 转发 AList 图片访问请求 配置项,其目的是通过添加 Basic Auth 请求头使 Nginx 替代客户端完成 AList WebDAV 身份验证。

为了防止图片被恶意删除,建议创建一个只具备读取权限的 AList 用户。也就是说,需要两个账号:上传用admin,访问用新建的只读权限用户。

经过以上配置,客户端通过访问 https://image.domain.name.cn/img/${img\_path} 即可直接获取图片,无需进行身份验证。

Basic Auth 请求头内容设置

若 AList WebDAV 的用户名和密码为 username 和 password,则 ${base64} 处填入 “username:password” 的 base64 编码,即:

proxy_set_header Authorization “Basic dXNlcm5hbWU6cGFzc3dvcmQ=”;

Base 64 在线编码转换工具:iBase64

20230512 更新后的配置方法:

Nginx配置更新,图片直链直接使用 Alist 文件直链(即使用 /d/ 路径而非 /dav/),无需额外创建 WebDAV 用户辅助文件访问验证。

优点:/d/ 路径只对指定文件路径有效,无法查看目录内容,能够隐藏当前图片的上传情况。

server {
    # 转发 AList 图片访问请求
    location /img {
        proxy_pass http://localhost:4015/d/image;
        proxy_read_timeout 600s;
    }
}

5. 配置 LskyPro 图床

根据安装Halo的经验,容器连接mysql数据库还挺麻烦的。为了减轻工作量,我们直接使用本地 SQLite 数据库,数据库路径留空即可(将自动在服务根目录的 database 目录下创建 database.sqlite 文件),同时需要设定管理员邮箱和登录密码。

设置存储策略

我们这里使用 AList 提供的 WebDAV 服务创建一个新的存储策略,配置项如表所示,其中访问域名即为图片直链对应的域名和路径。

注意:记得选中角色组,否则存储策略不会生效。

配置项 配置内容 说明
名称 WebDAV 存储区
储存策略 WebDAV
访问域名 https://image.domain.name.cn/img 记得添加 /img 后缀,与 Nginx 配置保持一致
URL Queries 留空,无需填写
连接地址 https://alist.domain.name.cn alist.domain.name.cn 为 AList 服务访问域名
认证方式 Basic 务必选择 Basic,否则连接失败
路径前缀 /dav/image 与 AList 存储配置保持一致
用户名 ${username} AList WebDAV 用户名
密码 ${password} AList WebDAV 访问密码

感谢该教程:使用 AList 和 LskyPro 搭建大容量图床 | LeoHao’s Blog

本文内容在该教程基础上,根据个人习惯修改而成

除非特别注明,本站所有文字均为原创文章,作者:Fish

1

  • rjs 2023-06-28 下午 09:03:27 回复Ta

    你好,我加了nginx的配置之后,nginx就启动不了了,一直报错

留言

电子邮件地址不会被公开。 必填项已用*标注

发表留言请遵守中华人民共和国有关法律、法规,尊重网上道德