Skip to content

安装 Lsky Pro+

兰空图床提供了两种安装方式,普通安装和 docker 安装,推荐使用 docker 安装

普通安装

在开始安装之前,请确保您已经阅读过前面的环境要求章节,将必要的环境配置好。

注意,本次安装教程是在没有安装服务器控制面板的情况下进行的,仅供参考,如果您使用控制面板进行操作,实际情况可能有所不同。

为什么没有可视化安装页面?

由于 PHP 存在两种运行方式:FPM 和 CLI,通常情况下服务器这两种环境中的 PHP 版本是一致的,但是由于集成环境软件存在多个不同版本的 PHP,这就会导致两种环境 PHP 版本不一致,这种情况下就可能会造成很多小伙伴在配置消息队列时非常困惑。

第一步,创建站点

首先我们必须创建一个新的站点,用来搭建兰空图床,如果您需要使用 mysql,您可能还需要创建一个 mysql 数据库。在本次教程中,我们使用推荐的 sqlite3 数据库。

安装 sqlite3 (使用其他数据库请跳过)

检查是否安装:

shell
sqlite3 --version

如果没有安装,请执行安装命令安装 sqlite3:

shell
sudo apt install sqlite3 libsqlite3-dev
shell
sudo yum install sqlite sqlite-devel

站点配置完毕以后,将安装包文件上传至站点根目录下,现在我们假设我们的站点根目录为 /www/wwwroot/app.com,我们的安装包文件名为 lsky-pro.zip,上传后安装包路径应该为 /www/wwwroot/app.com/lsky-pro.zip

接下来我们登录 SSH 终端,使用 cd 命令进入站点根目录:

shell
cd /www/wwwroot/app.com

然后使用 unzip 命令解压安装包:

shell
unzip lsky-pro.zip

第二步,配置伪静态

我们需要将程序的运行目录配置为 public,即站点的 Nginx 配置文件的站点根目录应该设置为 /www/wwwroot/app.com/public,配置示例:

nginx
server {
    listen 80;
    listen [::]:80;
    server_name app.com;
    root /www/wwwroot/app.com/public; 

    # more ...
}

为什么运行目录需要设置为 public

您的 Web 服务器应该将所有请求定向到您的应用程序的 public/index.php 文件。您永远不应该尝试将 index.php 文件移动到项目的根目录,因为从项目根目录提供应用程序将会将许多敏感的配置文件暴露给公共互联网。

然后继续设置伪静态,程序的 Nginx 伪静态配置示例文件位置在 public/nginx.conf 中。

nginx
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;
}

将内容复制后,添加到站点的 nginx 伪静态配置文件中。

第三步,开始安装

解压后的站点根目录存在一个安装脚本文件 install.sh,我们给该脚本赋予可执行权限:

shell
chmod +x install.sh

然后执行安装脚本:

shell
./install.sh

然后根据脚本提示安装即可。

第四步,配置消息队列

兰空图床在生成缩略图、图片处理以及发送邮件等等功能中,这些耗时任务都需要使用消息队列来执行,我们可以使用 php artisan queue:work 命令来运行消息队列。

但是这个命令在我们关闭 SSH 终端窗口后就会停止运行,所以我们需要用到 Supervisor 这样的进程管理工具,来保证消息队列进程能一直常驻运行。

Supervisor 配置文件通常存储在 /etc/supervisor/conf.d 目录中。在此目录中,您可以创建任意数量的配置文件,指示 supervisor 如何监视您的进程。例如,让我们创建一个 lsky-pro-worker.conf 文件,用来启动和监视 queue:work 进程:

ini
[program:lsky-pro-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /www/wwwroot/app.com/artisan queue:work
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www
numprocs=1
redirect_stderr=true
stdout_logfile=/www/wwwroot/app.com/storage/logs/worker.log
stopwaitsecs=3600

注意上面配置文件中的黄色高亮部分,尤其是 user=www,这里指的是使用 Web 环境的运行用户 www 来运行命令,默认是 root

兰空图床推荐您使用 Web 服务器所使用的用户运行,避免使用最高权限的账号。没有绝对的安全,如果应用代码被攻击者利用,可能导致系统级权限被滥用,危害整个服务器。

要获取 Web 环境的执行用户,我们可以找到 Nginx 或 Apache 的主配置文件。

通常是 /etc/nginx/nginx.conf/etc/nginx/conf.d/default.conf,而 Apache 通常是在 /etc/httpd/conf/httpd.conf/etc/apache2/apache2.conf 中。

执行以下命令查看用户:

shell
grep "user" /etc/nginx/nginx.conf
shell
grep -E "^User|^Group" /etc/httpd/conf/httpd.conf

配置文件创建完毕以后,我们重启 Supervisor:

shell
sudo supervisorctl reread && sudo supervisorctl update && sudo supervisorctl start "lsky-pro-worker:*"

至此,程序安装完成。

Docker 安装

准备工作

下载源码

因 PHP 源码的特殊性,兰空图床不提供构建好的镜像,需要通过本地构建镜像,然后运行。

我们需要下载源码,然后把源码上传至安装了 docker 的服务器中,然后使用终端登录服务器,进入源码根目录。

注意

以下命令都需要在目标服务器站点的根目录执行。

构建本地镜像

shell
docker build -t lsky-pro-plus -f docker/Dockerfile .

创建数据目录

为了方便查看上传文件、缓存、日志、数据库等,这些通常需要映射到宿主机。

执行以下命令快速创建程序运行时需要的文件夹和数据库文件(您也可以手动创建,但是不能不创建):

shell
mkdir -vp data/{cache,logs,private,public,uploads} \
&& touch data/database.sqlite \
&& chmod -R 777 data/{public,uploads}

目录和文件解释:

  • data/cache 缓存目录
  • data/logs 日志文件存放目录
  • data/private 上传的私有文件目录,例如支付证书文件等
  • data/public 上传的公开文件目录,例如头像等
  • data/uploads 自定义储存上传的图片
  • data/database.sqlite 数据库文件

docker

运行

将以下命令中的配置替换正确后执行。

shell
docker run -d \
  --name lsky-pro-plus \
  --env APP_NAME="Lsky Pro+" \
  --env APP_URL="http://localhost" \
  --env APP_SERIAL_NO="your_serial_no" \
  --env APP_SECRET="your_secret" \
  --env ADMIN_USERNAME="admin" \
  --env ADMIN_EMAIL="[email protected]" \
  --env ADMIN_PASSWORD="password" \
  -p 8080:80 \
  -v app-code:/var/www \
  -v ./data/logs:/var/www/storage/logs \
  -v ./data/cache:/var/www/storage/app/cache \
  -v ./data/public:/var/www/storage/app/public \
  -v ./data/uploads:/var/www/storage/app/uploads \
  -v ./data/database.sqlite:/var/www/database/database.sqlite \
  --network bridge \
  --restart unless-stopped \
  lsky-pro-plus

docker-compose

运行

将以下命令中的配置替换正确后执行。

shell
APP_DATA="./data" \
APP_PORT="8080" \
APP_NAME="Lsky Pro+" \
APP_URL="http://localhost" \
APP_SERIAL_NO="test" \
APP_SECRET="test" \
ADMIN_USERNAME="admin" \
ADMIN_EMAIL="[email protected]" \
ADMIN_PASSWORD="123456" \
docker-compose up -d

参数解释:

  • APP_DATA 持久化数据储存位置,可以是绝对路径或相对路径
  • APP_PORT 宿主机运行端口,默认为 8080
  • APP_NAME 应用名称
  • APP_URL 站点 url
  • APP_SERIAL_NO 许可证编号
  • APP_SECRET 许可证密钥
  • ADMIN_USERNAME 管理员用户名,只能包含英文字母、数字、中横线(-)或下划线(_)
  • ADMIN_EMAIL 管理员邮箱
  • ADMIN_PASSWORD 管理员密码

WARNING

请务必正确填写配置后执行,否则会导致安装失败,如果安装失败,可能需要删除容器后重启执行运行步骤。

shell
docker stop lsky-pro-plus
docker rm lsky-pro-plus

有时候你还可能需要删除镜像和储存卷:

shell
docker rmi -f lsky-pro-plus

您还可以执行以下命令查看服务运行日志,便于排查问题:

shell
docker logs -f lsky-pro-plus

-f 参数用于实时跟踪日志输出。

然后可以访问 http://localhost:8080 预览站点。通过反向代理提供对外服务。

TIP

成功运行后当前目录的程序文件会持久化储存在 Docker Volume 中,然后映射必要的文件到宿主机(APP_DATA 定义的位置)。

这意味着,若后续不需要重新构建容器了,除了您设置的 APP_DATA 的目录,则其他程序文件都可以删除,节省服务器储存。后续的源代码或其他文件,都通过 Docker Volume 管理。

警告

请不要将本地镜像上传至 docker hub 或打包后分发,否则可能会泄漏许可证编号或密钥等隐私数据。