在 Docker 环境下安装 Lsky Pro 图床

未分类2年前 (2022)发布 ypng
37 0 0
  • 常用的图床程序 Lsky Pro 最近更新了 2.0 版本。这个版本换用新的底层以支持多种数据库,带来全新的更加美观的瀑布流样式和图片管理页面,新增了水印配置、原图保护,等等。但最叫人欣喜的还是新增的多种逻辑形式的角色组和策略组。

    在 2.0 版本之前,一种存储方式只能存在一个。举个简单的栗子:使用腾讯云 COS 的话,只能存在一个帐号的一个存储桶。而现在不仅可以设置多个帐号,还支持将这些存储策略分配给多个用户。这对于非个人用户来说,是个极佳的升级理由。不过由于我改用 Docker,更新的迁移过程有些坎坷,好在一一解决了。

    环境处理

    相比 1.x 版本,这次的安装要求增添了不少。需要满足以下条件:

    • PHP >= 8.0.2
    • 安装BCMathCtypeDOMFileinfoJSONMbstringOpenSSLPDOTokenizer PHPXML PHPImagick 拓展
    • 解禁execshell_execreadlinksymlinkputenvgetenv函数

    函数还好说,在 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 扩展没有安装相应图片格式支持所导致的。

     

     

     

    故可以再加确认,是否成功安装了 imagick 扩展:

    docker exec php php --ri imagick

    若输出以下内容,则表示成功安装了支持解析所有图片格式的 imagick

     

     

     

    多版本PHP

    因为 Tyeo­cho 对 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 部分

    程序的 Ng­inx 配置,除了需要按照官方文档使用伪静态,还需要注释掉 Ng­inx 自身对图片的缓存才能启用原图保护。

    不过,我的 Ng­inx 环境用的还是 LNMP 脚本中的配置,和直接从官方 Ng­inx 拉的配置不太一样。但思路是一致的,如:

    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 Re­leases 页面下载压缩包,解压到服务器上设置好权限就行。一开始会自检一遍,提示缺失的模块或未启用的函数。如果无法满足条件,是不能进行下一步的。

     

    在 Docker 环境下安装 Lsky Pro 图床

     

    如果是新用户,那么建议选择 SQlite。老用户肯定没得选,为了能用上数据转移脚本,需要选择 MySQL

    在 Docker 环境下安装 Lsky Pro 图床

     

    只要数据库配置没写错,很快就能搞定。

     

    在 Docker 环境下安装 Lsky Pro 图床

     

    老用户需要在这一步停下,以进行数据库迁移。

    根据官方文档,下载好迁移脚本后,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 配置文件填写无误,会出现如下的转移进度。

     

    在 Docker 环境下安装 Lsky Pro 图床

     

    数据库转换成功之后,就能继续设置图床了。

    主界面是这样的。

     

    在 Docker 环境下安装 Lsky Pro 图床

     

    而图库是这样的。

     

    在 Docker 环境下安装 Lsky Pro 图床

     

    存储策略的话,不在本文介绍范围内。写了就离题了。

    就先到这里了。

    参考

© 版权声明

相关文章

暂无评论

暂无评论...