常用的图床程序 Lsky Pro 最近更新了2.0
版本。这个版本换用新的底层以支持多种数据库,带来全新的更加美观的瀑布流样式和图片管理页面,新增了水印配置、原图保护,等等。但最叫人欣喜的还是新增的多种逻辑形式的角色组和策略组。
在2.0
版本之前,一种存储方式只能存在一个。举个简单的栗子:使用腾讯云COS的话,只能存在一个帐号的一个存储桶。而现在不仅可以设置多个帐号,还支持将这些存储策略分配给多个用户。这对于非个人用户来说,是个极佳的升级理由。不过由于我改用 Docker,更新的迁移过程有些坎坷,好在一一解决了。
使用 docker compose 安装
现在,有大佬为 lskypro 编写了 docker 镜像,所以我们可以直接用 docker compose
一把梭:
version: '3.4'
services:
lskypro:
image: halcyonazure/lsky-pro-docker:latest
container_name: lskypro
ports:
- 9080:80
volumes:
- ./lskypro:/var/www/html
restart: unless-stopped
之后,再用 nginx 反向代理,举个简单的例子:
server {
listen 80 ;
listen 443 ssl http2 ;
server_name himiku.com;
index index.html index.php;
include addssl/himiku.com.conf;
location / {
proxy_pass http://lskypro:80;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
}
access_log /var/log/nginx/himiku.com.log;
}
环境处理
相比1.x
版本,这次的安装要求增添了不少。需要满足以下条件:
- PHP >= 8.0.2
- 安装
BCMath
、Ctype
、DOM
、Fileinfo
、JSON
、Mbstring
、OpenSSL
、PDO
、Tokenizer PHP
、XML PHP
、Imagick
拓展 - 解禁
exec
、shell_exec
、readlink
、symlink
、putenv
、getenv
函数
函数还好说,在php.ini
里删除一下就好。但扩展就头疼了,没有在一开始把这些扩展编译进 PHP 的话,后续一个个塞很麻烦。还好我用的是Docker,可以一把梭。
PHP 部分
安装所需拓展
我的 PHP7 用到的Dockerfile
如下:
FROM php:7.4.27-fpm-alpine
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \
&& apk update \
&& apk add --virtual .build-tools --no-cache autoconf gcc g++ make \
&& apk --no-cache add ffmpeg graphicsmagick zip zlib-dev libjpeg-turbo-dev libpng-dev freetype-dev imagemagick-dev imagemagick libzip-dev icu-dev \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install gd \
&& docker-php-ext-install exif mysqli pdo_mysql zip bcmath intl pcntl \
&& pecl install redis imagick \
&& docker-php-ext-enable redis imagick \
&& apk del .build-tools \
&& curl -sS https://getcomposer.org/installer | php \
&& mv composer.phar /usr/local/bin/composer \
&& apk add --no-cache git
这里有个小插曲。在初次测试的时候,上传图片程序一直在报错:
Unable to read image from path
我一直怀疑是程序权限的原因,反复检查了好几次没法解决。正当灰心的时候,注意到控制台的报错与imagick
有关,最后在GitHub Issue上找到了解决方法。是因为imagemagick
扩展没有安装相应图片格式支持所导致的。
原先是这样的,少安了个imagemagick
apk --no-cache add ffmpeg graphicsmagick zip zlib-dev libjpeg-turbo-dev libpng-dev freetype-dev imagemagick-dev libzip-dev icu-dev
故可以再加确认,是否成功安装了imagick
扩展:
docker exec php php --ri imagick
若输出以下内容,则表示成功安装了支持解析所有图片格式的imagick
。
imagick
imagick module => enabled
imagick module version => 3.7.0
imagick classes => Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator, ImagickKernel
Imagick compiled with ImageMagick version => ImageMagick 7.1.0-16 Q16-HDRI x86_64 2021-11-21 https://imagemagick.org
Imagick using ImageMagick library version => ImageMagick 7.1.0-16 Q16-HDRI x86_64 2021-11-21 https://imagemagick.org
ImageMagick copyright => (C) 1999-2021 ImageMagick Studio LLC
ImageMagick release date => 2021-11-21
ImageMagick number of supported formats: => 246
ImageMagick supported formats => 3FR, 3G2, 3GP, AAI, AI, APNG, ART, ARW, ASHLAR, AVI, AVIF, AVS, BGR, BGRA, BGRO, BMP, BMP2, BMP3, BRF, CAL, CALS, CANVAS, CAPTION, CIN, CIP, CLIP, CMYK, CMYKA, CR2, CR3, CRW, CUBE, CUR, CUT, DATA, DCM, DCR, DCRAW, DCX, DDS, DFONT, DNG, DOT, DPX, DXT1, DXT5, EPDF, EPI, EPS, EPS2, EPS3, EPSF, EPSI, EPT, EPT2, EPT3, ERF, FARBFELD, FAX, FF, FILE, FITS, FL32, FLV, FRACTAL, FTP, FTS, G3, G4, GIF, GIF87, GRADIENT, GRAY, GRAYA, GROUP4, GV, HALD, HDR, HEIC, HEIF, HISTOGRAM, HRZ, HTM, HTML, HTTP, HTTPS, ICB, ICO, ICON, IIQ, INFO, INLINE, IPL, ISOBRL, ISOBRL6, JNG, JNX, JPE, JPEG, JPG, JPS, JSON, K25, KDC, KERNEL, LABEL, M2V, M4V, MAC, MAP, MASK, MAT, MATTE, MEF, MIFF, MKV, MNG, MONO, MOV, MP4, MPC, MPEG, MPG, MRW, MSL, MSVG, MTV, MVG, NEF, NRW, NULL, ORA, ORF, OTB, OTF, PAL, PALM, PAM, PANGO, PATTERN, PBM, PCD, PCDS, PCL, PCT, PCX, PDB, PDF, PDFA, PEF, PES, PFA, PFB, PFM, PGM, PGX, PHM, PICON, PICT, PIX, PJPEG, PLASMA, PNG, PNG00, PNG24, PNG32, PNG48, PNG64, PNG8, PNM, POCKETMOD, PPM, PS, PS2, PS3, PSB, PSD, PTIF, PWP, RADIAL-GRADIENT, RAF, RAS, RAW, RGB, RGB565, RGBA, RGBO, RGF, RLA, RLE, RMF, RSVG, RW2, SCR, SCT, SFW, SGI, SHTML, SIX, SIXEL, SPARSE-COLOR, SR2, SRF, STEGANO, SUN, SVG, SVGZ, TEXT, TGA, THUMBNAIL, TIFF, TIFF64, TILE, TIM, TM2, TTC, TTF, TXT, UBRL, UBRL6, UIL, UYVY, VDA, VICAR, VID, VIFF, VIPS, VST, WBMP, WEBM, WEBP, WMV, WPG, X, X3F, XBM, XC, XCF, XPM, XPS, XV, XWD, YAML, YCbCr, YCbCrA, YUV
Directive => Local Value => Master Value
imagick.locale_fix => 0 => 0
imagick.skip_version_check => 0 => 0
imagick.progress_monitor => 0 => 0
imagick.set_single_thread => 1 => 1
imagick.shutdown_sleep_count => 10 => 10
imagick.allow_zero_dimension_images => 0 => 0
多版本PHP
因为 Tyeocho 对 PHP8 的支持仍在测试环节,而 VOID 还不支持 PHP8 。故我主要使用的还是 PHP7。但为了能用上Lsky Pro 2.0,需要添加一个 PHP8。
新建一个文件夹,重命名为php8
,丢一个Dockerfile
进去。其实内容与上一节的PHP7 只有版本号上的不同:
FROM php:8.1.3-fpm-alpine
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \
&& apk update \
&& apk add --virtual .build-tools --no-cache autoconf gcc g++ make \
&& apk --no-cache add ffmpeg graphicsmagick zip zlib-dev libjpeg-turbo-dev libpng-dev freetype-dev imagemagick-dev imagemagick libzip-dev icu-dev \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install gd \
&& docker-php-ext-install exif mysqli pdo_mysql zip bcmath intl pcntl \
&& pecl install redis imagick \
&& docker-php-ext-enable redis imagick \
&& apk del .build-tools \
&& curl -sS https://getcomposer.org/installer | php \
&& mv composer.phar /usr/local/bin/composer \
&& apk add --no-cache git
接着,在docker-compose.yml
里加一项php8
,随后部署起来即可。
php:
build: ./php
volumes:
- ./www:/home/wwwroot
- ./php/php.ini:/usr/local/etc/php/php.ini
environment:
- TZ=Asia/Shanghai
user: 101:101
restart: unless-stopped
container_name: php
php8:
build: ./php8
volumes:
- ./www:/home/wwwroot
- ./php8/php.ini:/usr/local/etc/php/php.ini
environment:
- TZ=Asia/Shanghai
user: 101:101
restart: unless-stopped
container_name: php8
Nginx 部分
程序的 Nginx 配置,除了需要按照官方文档使用伪静态,还需要注释掉 Nginx 自身对图片的缓存才能启用原图保护。
不过,我的 Nginx 环境用的还是LNMP脚本中的配置,和直接从官方 Nginx 拉的配置不太一样。但思路是一致的,如:
server {
listen 80 ;
listen 443 ssl http2 ;
server_name xxx.com;
这里是证书;
index index.html index.php ;
root /home/wwwroot/lsky/public;
……
# 伪静态
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# 需要注释掉的东西
# location ~ .*\.(gif|webp|jpg|jpeg|png|bmp|swf)$ {
# expires 30d;
# }
……
# 使用php8
location ~ [^/]\.php(/|$)
{
try_files $uri =404;
fastcgi_pass php8:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
……
}
建议先测试完毕再上线生产环境。
安装 Lsky Pro 2.0
程序的安装就十分简单了。直接从官方 GitHub Releases 页面下载压缩包,解压到服务器上设置好权限就行。一开始会自检一遍,提示缺失的模块或未启用的函数。如果无法满足条件,是不能进行下一步的。
如果是新用户,那么建议选择SQlite
。老用户肯定没得选,为了能用上数据转移脚本,需要选择MySQL
。
只要数据库配置没写错,很快就能搞定。
老用户需要在这一步停下,以进行数据库迁移。
根据官方文档,下载好迁移脚本后,Docker下的部分命令是不一样的。
例如,我将脚本解压至映射的www
文件夹,需要根据docker-compose.yml
中设置的映射路径,写完整这个脚本具体的位置。
docker exec php8 php /home/wwwroot/migrate/start.php migrate
这其实官方文档中「使用 ssh 工具登录到服务器,cd 到脚本根目录(与 start.php 文件同级)然后执行迁移命令 php start.php migrate
」的步骤,但我忘了我用的是 Docker,反复复制粘贴了好几遍。
如果 config.yaml
配置文件填写无误,会出现如下的转移进度。
数据库转换成功之后,就能继续设置图床了。
主界面是这样的。
而图库是这样的。
存储策略的话,不在本文介绍范围内。写了就离题了。
就先到这里了。
参考
本文作者:mikusa
本文链接:https://www.himiku.com/archives/docker-with-lsky-pro.html
版权声明:所有文章除特别声明外均系本人自主创作,转载及引用请联系作者,并注明出处(作者、原文链接等)。
那么,纯LNMP环境要怎么装呢
纯lnmp就更好装了,照着官方教程来就行
但是已经有一个博客程序在运行了QAQ ,要怎么PHP 版本隔离呢
Lnmp应该可以多开PHP的吧,我记得是可以再安一个的
感觉好复杂qwq
那就来试试docker吧!也有一键安装包的!
这个图床winserver能装吗
这是个php程序,windows应该也可以装的吧?安好环境试试看!
我用IIS装这个搞不定,500错误。然后我又去折腾Chevereto图床,来一个G\: Sessions are not working on this server due to missing write permission on session save path (php.ini session.save_path).,已经吐了,太命苦了,图床跟我有仇
似乎是个php报错……我没试过在win上安这个,帮不了你
没事,我就吐槽
想问下大佬学生机运行内存不够php8装fileinfo该怎么办。。每次装就卡死www
docker的话应该是带得动php8的吧,具体是多大的内存?
就是这个,解禁exec、shell_exec、readlink、symlink、putenv、getenv函数
怎么弄呀,我用的是宝塔面板
删除禁用函数即可
https://www.bt.cn/bbs/thread-42306-1-1.html