
【实用Docker项目】属于你自己的图床-兰空图床
本文最后更新于 2024-05-17,
若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益, 请联系我 删除。
本站只有Telegram群组为唯一交流群组, 点击加入
文章内容有误?申请成为本站文章修订者或作者? 向站长提出申请
前言
最近在写文章的时候发现图片有些多,不太好管理,于是在寻找一个本地的图床工具,打算配合压缩程序将图片压缩为webp格式后放在图床集中管理。于是便找到了一款图床-兰空图床(Lsky-pro)
项目地址:https://github.com/lsky-org/lsky-pro
安装Docker🐳
利用Docker-compose搭建,易于更新
普通方法需要搭建许多依赖,但是用docker部署的话我们什么都不需要安装!
PHP >= 8.0.2
BCMath PHP 扩展
Ctype PHP 扩展
DOM PHP 拓展
Fileinfo PHP 扩展
JSON PHP 扩展
Mbstring PHP 扩展
OpenSSL PHP 扩展
PDO PHP 扩展
Tokenizer PHP 扩展
XML PHP 扩展
Imagick 拓展
exec、shell_exec 函数
readlink、symlink 函数
putenv、getenv 函数
先建立一个文件夹和文件
mkdir -p ~/lsky-pro &&cd $_
vim docker-compose.yaml
docker-compose填入以下内容:
version: '3'
services:
lsky-pro:
container_name: lsky-pro
image: dko0/lsky-pro
restart: always
volumes:
- ~/lsky-pro:/var/www/html #映射到本地
ports:
- 7700:80
environment:
- MYSQL_HOST=mysql
- MYSQL_DATABASE=lsky-pro
- MYSQL_USER=lsky-pro
- MYSQL_PASSWORD=lsky-pro
mysql:
image: mysql:8.0
container_name: lsky-pro-db
restart: always
environment:
- MYSQL_DATABASE=lsky-pro
- MYSQL_USER=lsky-pro
- MYSQL_PASSWORD=lsky-pro
- MYSQL_ROOT_PASSWORD=lsky-pro
volumes:
- ~/lsky-pro/db:/var/lib/mysql
运行
docker-compose up -d
我们现在可以输入 http://ip:7700/
访问了。
更新
cd ~/lsky-pro # 进入docker-compose所在的文件夹
docker-compose pull # 拉取最新的镜像
docker-compose up -d # 重新更新当前镜像
卸载
cd ~/lsky-pro # 进入docker-compose所在的文件夹
docker-compose down # 停止容器,此时不会删除映射到本地的数据
rm -rf ~/lsky-pro # 完全删除映射到本地的数据
使用教程
安装
注意,数据库连接地址,填docker-compose文件里的容器名称lsky-pro-db,连接端口不用填。
管理员登录
图片上传测试
可以在文章内植入URL或者Markdown链接
图片管理(搜索)
图片预览更加直观,方便管理。
存储空间配置
默认情况下每个用户的可用空间为 500M,你可以通过修改用户角色组来修改可用空间的大小:
由于可用空间是以 kb 来计算大小,你可以通过这里的在线单位转换来转换成想要的大小:文件大小转换
比如说你希望每个用户能够有 1G 的可用空间,那么这里的 “总容量(kb)” 的值就可以修改为:
也可以通过 “系统设置” 来修改用户的初始容量:
存储策略
Lsky-pro支持多种存储策略
例如Aurora建议使用minio来存储,节约储存空间和带宽压力。
访问配置
访问网址:指的是上传图片之后的访问链接,一般不需要修改。比如我通过内网上传文件的方式上传了一张叫做 hello.png
的文件,那么访问地址就是 http://192.168.2.79:7700/i/hello.png
。如果访问地址修改为 http://192.168.2.79:7700/upload
,那么访问地址就变成 http://192.168.2.79:7700/upload/hello.png
。
注册功能,游客上传
是否启用注册:如果只是自己来用那么就不需要开启注册
是否允许游客上传:一般来说是禁用游客上传功能的,你不介意的话也可以打开。
配置PicGO与Typora开启接口上传功能
用图床,写博客,当然是为了方便。
在写东西的时候,我们想要做到粘贴图片到Typora就能实现自动上传到图床,兰空图床有可以用的API,我们搭配PicGO就可以实现这个效果。
获取接口URL
配置 PicGo
可以通过 👉官网 去查看 PicGo 的下载地址,国内的用户去 👉山东大学镜像站(点击进入下载界面) 下载64位客户端安装即可:
安装 lankong 插件
安装好之后程序会缩小到任务栏,打开主窗口
配置 lankong 插件
如果不配置 Authe Token 那么将视为游客上传,但需要在后台设置中开启游客上传的功能,否则无法直接上传图片到 Lskypro。
获取token
兰空图床不再直接显示token了,所以我们要自己获取一下token。
我们直接去post一下,google或者百度一下就能找到很多支持在线post的网站。
比如我们使用https://www.sojson.com/httpRequest/
由于我是在本地搭建的,于是我采取Postman来请求本地接口
POST后得到token值
参数配置
- Lsky-pro Version: V2
- Server :填写 Lskypro 服务器的 IP 地址,这里我们填写的是内网 IP 地址,也可以使用域名,注意结尾不要添加“/”
- Auth token:Lskypro 用户认证密钥,组合为
Bearer + token
。 举例为:Bearer 1|yX6d07pbaAygF26ocFtjtTH7cbgrBmFCFHRNihhd
。注意Bearer和token中间有空格。 - 其他参数默认不动
Typora测试
简单复制一张图片,直接粘贴,测试一下,发现能够正常上传并生成图床链接。
图床后台也成功显示了。
注意:部分用户在操作的时候可能无法正常上传。这时候你需要检查一下软件设置是否正确
图像:插入图片时-上传图片
进阶:配置redis缓存
兰空图床支持 redis 或 memcached 作为缓存驱动,通常情况下默认的文件储存已经足够用,但是如果你的图床开启了原图保护功能,强烈更换为下面的任意缓存驱动。 更换驱动非常简单,只需要改变程序中的环境变量文件 .env
即可。
- 进入 Lskypro 的配置文件夹中,找到
.env
文件 - 请按照下面的提示修改关于 Redis 的配置:
CACHE_DRIVER
的值修改为:redis
REDIS_HOST
的值修改为:你的 unraid ip 地址REDIS_PASSWORD
的值修改为:你配置的密码
REDIS_PORT
的值修改为:6379
- 重启 Lskypro 完成设置
- 重启之后如果没有报错,那就表示设置没有问题。
反向代理
参考教程:安装及使用
⚠️Nginx Proxy Manager(以下简称NPM)会用到80、443端口,所以本机不能占用(比如原来就有Nginx)
互联网使用请确保完成了域名解析
建议先到dns解析商处将你的ip和子域名进行绑定后,再进行下一步配置操作!
解决外网访问下静态资源加载失败问题
简单来说就是配置 Lskypro 外网访问的时候会出现无法正常加载 WebUI 的情况,且上传文件可能会有报错。
关于此问题的具体信息,可以点击下面链接去了解:
https+域名+端口的访问问题,NginxProxyManager反代
解决方法
修改 Lskypro Docker 参数: ASSET_URL
填写你的外网访问地址(如果有端口号需要加上端口号),比如:在配置文件内增加环境参数安装
environment:
- env ASSET_URL=https://img.poiblog.com:80
或者在启动时添加
docker run -e ASSET_URL=https://img.poiblog.com:80 镜像id .....
直接改配置文件
首先停止容器,不然无法修改配置文件
配置文件路径为:/var/lib/docker/containers/容器ID/config.v2.json
然后找到Env键值对修改
最后启动容器。
- 使用命令行执行命令语句
docker exec -it Lskypro sed -i '32 a \\\Illuminate\\Support\\Facades\\URL::forceScheme('"'"'https'"'"');' /var/www/html/app/Providers/AppServiceProvider.php
修改反向代理参数(以 NginxProxyManager 为例):将下面的参数添加到 Lskypro 的反向代理配置中(其他参数不需要修改,直接保存即可)。
location / {
proxy_pass forward_scheme://forwardscheme://server:$port;
proxy_set_header Host $http_host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Method $request_method;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Original-URL scheme://scheme://http_host$request_uri;
proxy_set_header X-Forwarded-Uri $request_uri;
}