Docker部署兰空图床并开启AVIF支持

部署

Lsky Pro(兰空图床)是一个基于PHP语言的现代图片管理系统,它依赖于特定的PHP扩展和数据库环境。为了规避手动配置LNMP环境可能出现的兼容性问题,并实现服务的快速上线与迁移,本次实践将采用 Docker Compose 进行编排部署。

下面我们直接使用宝塔部署,也可以自行使用命令行部署

docker-compose文件内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
services:
lsky-pro:
container_name: lsky-pro
image: dko0/lsky-pro
restart: always
volumes:
- ./data/html:/var/www/html #映射到本地
ports:
- ${PORT_1}:80
environment:
- MYSQL_HOST=mysql
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
mysql:
image: mysql:5.7
container_name: lsky-pro-db
restart: always
environment:
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_PASSWORD}
volumes:
- ./data/db:/var/lib/mysql
ports:
- ${PORT_2}:3306

.env

1
2
3
4
5
6
7
MYSQL_DATABASE=lsky
MYSQL_USER=lsky
MYSQL_PASSWORD=lsky
MYSQL_ROOT_PASSWORD=lsky
PORT_1=7791
PORT_2=3389
LSKY_PATH=/www/dk_project/dk_app/dk_lsky

在完成所有配置和部署步骤之后,您可以通过服务器的公网域名加上指定的端口号来访问您的应用程序或服务。例如,如果您的公网ip为 192.168.0.2,并且您设置的服务监听在 7791 端口上,那么您就可以通过在浏览器中输入 http://192.168.0.2:7791 来访问该服务。请确保您的防火墙规则允许外部流量到达所使用的端口。

下面的内容和.env中的对应即可

avif格式支持

Lsky Pro本身功能强大,通过Docker容器化部署也极为便捷,但其默认的图片处理逻辑并未开放AVIF格式的上传权限。接下来,我们会通过代码层面的调整,使其兼容AVIF这一前沿图像格式。

1
2
3
4
#进入容器,更新仓库,然后安装vim
docker exec -it lsky-pro bash
apt update
apt install -y vim

由于 AVIF 格式较新,部分图片处理功能(如水印、压缩、审核等)可能无法正常工作,因此需要在代码中跳过这些处理步骤。

1
2
vim config/convention.php
# 找到第 109 行,在数组中添加 'avif'

1
2
vim app/Http/Requests/Admin/GroupRequest.php
# 找到第 41 行,添加 avif

1
2
vim app/Services/ImageService.php
#第 159 行左右,在跳过处理的数组中添加 'avif':

1
2
vim app/Services/ImageService.php
#第 253 行左右,在图片检测跳过的数组中添加 'avif':

1
2
vim app/Http/Controllers/Controller.php
#第 168 行左右,在水印判断中添加 'avif':

1
2
3
4
5
vim app/Http/Controllers/Controller.php
// ico 图片直接输出,不经过 InterventionImage 处理
if (in_array($image->extension, ['ico', 'avif'])) {
goto out;
}

修改完成后,在后台的角色组设置中勾选 AVIF 格式即可启用

然后便可上传avif格式图片