搭建大容量图床服务
AList + 云盘 + LskyPro · 搭建大容量图床服务
写在前面
“图床” 是用于存放图片的空间,基于图床可以快捷地实现图片分享,便于日常使用和前端开发。
Lsky Pro(兰空图床) 是一款基于 PHP 开发的开源图床项目,界面美观且易于操作,目前支持本地存储
、AWS S3
、阿里云 OSS
、腾讯云 COS
、七牛云
、又拍云
、SFTP
、FTP
、WebDAV
、Minio
等多类存储服务。
Lsky Pro 的优势在于其支持WebDAV
协议,因此我们可以使用 AList 绑定个人网盘(如阿里云盘、百度网盘、天翼云盘、夸克网盘等),将 AList 提供的WebDAV
服务作为图床的存储策略,进而充分利用云盘空间,通过图床将图片托管到个人网盘。
注意:一个良好的图床服务应当与 CDN 搭配以实现更快的加载速度,本文搭建的图床仅作为个人使用的图片托管平台。
I. 效果展示
传送门 → LeoHao’ s Image Hub
II. 官方文档
LskyPro 兰空图床官方文档:https://docs.lsky.pro
AList 官方文档:https://alist.nn.ci
III. 部署步骤
注意:在部署开始前你应该拥有一台公网服务器,另外,以下步骤依赖于 Docker、Nginx 和 AList,请提前安装相关依赖并配置,本文档只对 LskyPro 图床的搭建步骤和必要的注意事项进行介绍。
Step1. 配置 AList WebDAV 服务
在个人网盘中创建 lskypro-image
文件夹,这里以天翼云盘为例,并在 AList 中将该文件夹挂载到路径 /image
,如下图所示:
以上步骤完成后,访问 DAV
链接并通过身份校验后,即可进行图片的上传与访问。假设 AList 绑定的公网域名为 alist.domain.name.cn
,则图片存储服务的 DAV
链接为:https://alist.domain.name.cn/dav/image
。
Step2. 启动 LskyPro 图床容器服务
LskyPro 图床服务依赖于多个 PHP 插件,为了方便部署,我们采用 Docker 的方式安装 ,命令如下:
# 创建容器并启动(宿主机4003端口可自行更改)
sudo docker run -d --name lskypro --restart unless-stopped -p 4003:80 -v /data/lskypro:/var/www/html coldpig/lskypro-docker:latest
📢: 这里采用的事
docker run -d \
--name lsky_pro \
-p 9080:80 \
-v /opt/docker/lsky/data:/var/www/html \
--restart unless-stopped \
halcyonazure/lsky-pro-docker:latest
Step3. 修改 Nginx 配置项
注意,如果在 Nginx 配置中开启了 HTTPS ,需要执行以下命令修改图床项目源码,否则前端页面布局将被打乱:
sudo docker exec -it lskypro sed -i '32 a \\\Illuminate\\Support\\Facades\\URL::forceScheme('"'"'https'"'"');' /var/www/html/app/Providers/AppServiceProvider.php
📢: 这里采用端口转发就可以不用设置AppServiceProvider.php
假设图床服务的域名为 image.domain.name.cn
,AList 部署在本地端口 4015
,在 nginx.conf
中添加如下配置项:
#Lsky Pro | Image Hub
server {
listen 80;
listen 443 ssl;
server_name image.domain.name.cn;
# HTTPS 需要指定 SSL/TLS 证书路径
ssl_certificate cert/image.domain.name.cn.pem;
ssl_certificate_key cert/image.domain.name.cn.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
# 转发图床服务请求
location / {
# 转发端口 4003 与 Step2 中设定的宿主机端口保持一致
proxy_pass http://localhost:4003;
proxy_read_timeout 600s;
}
# 转发 AList 图片直链访问请求 注意是d 不是dav!!!
location /img {
proxy_pass http://localhost:4015/d/image;
proxy_read_timeout 600s;
}
}
📢:这里借助Nginx Proxy Manger
进行配置
Nginx 配置说明
上传至图床的图片应该是可公开访问的,为此我们在以上 Nginx 配置中增加了 “转发 AList 图片直链访问请求” 配置项。经过以上配置,客户端通过访问 https://image.domain.name.cn/img/${img_path}
即可直接获取图片,无需进行身份验证。
Step4. 配置 LskyPro 图床
A. 数据库配置
以上步骤完成后,浏览器访问图床服务(https://image.domain.name.cn)可进入如下图所示的配置页面。配置页面将引导我们设置数据库服务,为了减轻工作量,我们直接使用本地 SQLite 数据库,数据库路径留空即可(将自动在服务根目录的 database
目录下创建 database.sqlite
文件),同时需要设定管理员邮箱和登录密码。
配置完成后根据引导进入图床首页。
B. 设置存储策略
登录管理员账户,点击侧边栏的 “存储策略” 进入图片文件存储的相关配置,创建一个新的存储策略。
默认存储策略为本地存储,为了不占用服务器空间,我们这里使用 AList 提供的 WebDAV 服务创建一个新的存储策略,配置项如表所示,其中访问域名即为图片直链对应的域名和路径。
注意:记得选中角色组,否则存储策略不会生效。
C. 设置 WebDAV 为默认存储策略
WebDAV 存储策略添加后可以将默认本地存储策略删除,防止用户将图片上传至本地服务器。
Reference
另外特殊说明
对于兰空图床免费开源版,需要自己或者联系使用的图床的管理员修改源代码,才可以使APP内的相册ID参数生效,否则即使填写了相册ID,上传图片时也会上传到默认相册。
具体修改方式为打开 /兰空图床目录/app/Services/ImageService.php文件,修改第139行,原文件为
if ($albumId = $user->configs->get(UserConfigKey::DefaultAlbum)) {
if ($user->albums()->where('id', $albumId)->exists()) {
$image->album_id = $albumId;
}
}
修改为:
if ($request->has('album_id')) {
$image->album_id = $request->input('album_id');
} else {
if ($albumId = $user->configs->get(UserConfigKey::DefaultAlbum)) {
if ($user->albums()->where('id', $albumId)->exists()) {
$image->album_id = $albumId;
}
}
}