之前使用过开源版的兰空图床做了个拍照屏,但是开源版已不再进行修复(除非有重大BUG可能会考虑)。这次狠心买了新的LskyPro+ V2版。在发布文章时,整体比较新,文档还不完全,在这里把踩过的坑记录一下。

购买和下载源码

这里就自行前往官网,注册账号购买吧,如果喜欢这篇文章,可以的话可以填写我的邀请码rsjwy 以支持我。

安装

宝塔安装

建议使用宝塔安装,安装好nginx、mysql、php。相关环境请看官网要求

配置环境

装好宝塔后,安装niginx,版本用推荐的版本即可;Supervisor直接使用宝塔Supervisor管理器处理。php版本>=8.2,并且配置好插件和函数,相关要求前往官网查看。本次使php8.2版本,只需要添加fileinfo和imagemagickc这两个插件即可;同时也要把被禁用的函数从禁用列表内移除,在宝塔php8.2版本,需要移除下面的这些被禁用的函数。

函数名

作用

proc_* 函数

用于队列任务的生命周期管理

exec、shell_exec、system 函数

执行系统命令

symlink、readlink 函数

创建、读取符号连接

pcntl_* 函数

用于进程管理

创建站点

在面板网站创建站点,可以在这里直接创建数据库,指定运行环境为你安装的php版本。

创建完成后,在网站设置里设置运行环境为/public

然后设置伪静态,代码如下

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

location ~ ^/livewire {
    expires off;
    try_files $uri $uri/ /index.php?$query_string;
}

location ~ .*\.(jpg|jpeg|webp|avif|bmp|gif|png|tif|tiff|jp2|j2k|jpf|jpm|jpg2|j2c|jpc|jpx|heic|heif)$ {
    try_files $uri $uri/ /index.php?$query_string;
}

执行安装脚本

设置玩环境后,执行sudo ./install.sh 指令,根据提示完成剩下配置。

配置消息队列

前往之前安装的Supervisor管理器,添加守护进程。

运行目录指定你自己的!!!宝塔网站目录的执行用户一般是www

配置计划任务

计划任务命令为下面的这串代码,即每分钟执行一次。前往宝塔面板的计划任务添加。

* * * * * cd /www/wwwroot/app.com && php artisan schedule:run >> /dev/null 2>&1

收尾

如果在网站和用户之间有cdn或者waf,反代时反代了80端口,会存在请求https返回http,这个在官网有介绍原因。在反代侧增加如下配置

proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;

至此,部署完成

docker安装

docker里的nginx需要修改,默认可能会存在无法上传大于1M文件的情况,需要进行修改,这里不再赘述,建议使用宝塔部署

修改docker compose

这里就是基于docker安装,Dockerfile在压缩包根目录下的docker文件夹内,也可以自定义docker-compose文件自定义部署,下面将会修改本文件,以使用已存在的mysql数据库。

上传源码以及解压就不再叙述,将从修改文件开始。这里将不再使用内置的脚本,直接修改docker-compose文件进行自定义。

如果服务器在境内,请首先配置加速域名,以方便拉取所需资源,可在docker镜像监控获取可用加速地址。

做好前置步骤后,我们进入解压出来的目录下,进入docker目录,打开docker-compose文件

注意,尽量不要使用挂载目录形式,会导致已拷贝的文件在docker内被覆盖,推荐使用卷挂载。

但是经过测试,创建卷时,即使指定了挂载路径(数据实际存放位置),但是仍然会在默认位置创建文件,占用两份空间。问过AI没有好方案,只有迁移整体的docker卷root目录。根据实际需要来。

本次将手动复制数据的形式实现,故删除了命名卷的指定。解压时直接把代码解压到/opt/data/Lsky/code目录下。

services:
  app:
    build:
      context: ..
      dockerfile: ./docker/Dockerfile
    image: lsky-pro-plus
    container_name: lsky-pro-plus
    environment:
      #环境变量(配置信息),
    ports:
      - #访问端口:80
    networks:
      - 1panel-network
    volumes:
      - /opt/data/Lsky/code:/var/www
      - /opt/data/Lsky/data:/var/www/data
    restart: unless-stopped
networks:
  1panel-network:
    external: true

有一个BUG,我目前没了解透彻具体原因,当配置的mysql地址为IP地址,则会一直陷入一个等待循环,就是docker文件夹下的entrypoint.sh内的一个等待sql启动。所以改为使用1Panel的容器网络,来通过这个网络访问MySQL。

构建

在docker目录下,执行docker-compose up -d --build 命令构建镜像,并等待启动

注意!!构建后的镜像不要离开服务器,因为内部存储了docker-compose文件,并且有你的密钥,属于敏感数据。

访问容器的日志,看到Installation successful!即为配置成功!访问网页即可使用。

使用

API接口

访问API文档查看相关信息,注意,在接口前添加/api/v2/ 才可以正确使用接口,Token登录自己的账户页面创建和设置访问权限。