如果你平时写博客、逛论坛或者折腾本地 Markdown 笔记,图片存哪儿总是个绕不开的刚需。丢公共图床怕哪天防盗链或突然关停,直接挂在第三方对象存储又缺个好用的管理界面。自建图床就是最省心的解法:图片传上去顺手就能拿到直链、Markdown 和 HTML 引用代码。而在众多自建开源程序里,兰空图床(Lsky Pro)算是颜值与功能兼具的代表作——开源版原生支持多存储策略(本地、七牛、又拍云、S3、WebDAV 等)、多相册归类,还能按角色组分配容量配额,无论是自己单人用还是拉几个朋友合建私有图床都非常趁手。
先交待一下实测口径:本文基于 2026-11-03 刚跑通的真实环境记录,采用官方 Lsky Pro 2.1 正式版(底层基于 Laravel 9 系)。本次实测路线选用官方 GitHub Release 源码压缩包 + PHP 8.1 + SQLite 组合,绑定 18086 端口测试。虽然前半段以源码部署演示流程与底层依赖,但它最终拉起的网页安装向导跟 Docker 路线完全一致,走哪条路都能无缝衔接。
成品长这样
跑完向导登录后台,第一眼看到的就是整洁的仪表盘。不管是存储用量概览、当日上传走势,还是生效中的存储策略与角色组限额,一眼就能核对清楚:

准备工作
动工前先把运行依赖对齐。不少人初次搭 Lsky Pro 容易在环境检测环节反复碰壁,关键就在版本与扩展细节:
- PHP 8.1(重点提醒):千万别直接上 PHP 8.2 或更高版本!Lsky Pro 2.1 框架依赖的老版本 Carbon 库在 PHP 8.2 下有已知的不兼容与弃用警告,安装向导甚至会直接报 500 或白屏。稳妥起见请务必锁定 PHP 8.1,踩坑细节文末会展开复盘。
- PHP 扩展清单:必须装齐
bcmath、ctype、dom、fileinfo、mbstring、openssl、tokenizer、xml、pdo,以及图床最关键的硬性要求——imagick(生成缩略图、旋转和格式转换必须靠它)。 - 数据库支持(三选一):程序支持 MySQL 5.7+、PostgreSQL 和 SQLite。如果是个人博客或笔记轻量自用,强烈推荐直接选 SQLite,零配置免单独起服务,备份拷贝单个 db 文件即可;多人高并发场景再换 MySQL/Postgres。本文演示就走 SQLite 路线。
- Web 服务:生产环境标准姿势是 Nginx + PHP-FPM(配置好伪静态);临时调试或测试机快速验证,直接借助 PHP 自带的 CLI 内置服务器也能跑通。
第一步:部署程序文件
- 下载并解压官方源码包:到 GitHub Release 页面下载预打包好的
lsky-pro-2.1.zip(体积约 23MB)。这里官方做得很贴心,包内已经内置好完整的vendor目录,服务器端完全不需要安装 Composer,也省去了跑composer install的漫长等待。直接将其解压到站点目录,比如/var/www/lsky。 - 配置环境文件:进入解压后的根目录,复制环境配置模板:
cp .env.example .env。使用文本编辑器打开.env,将APP_URL修改为你实际的访问地址(如http://your-server-ip:18086);如果打算用 SQLite,顺手把DB_CONNECTION改为sqlite。 - 生成应用加密密钥:在站点根目录下执行命令:
php artisan key:generate。这会自动在.env文件中写入生成的APP_KEY,用于会话保持与数据加密,缺失此项后续页面会直接报错。 - 修正目录读写权限:Laravel 对缓存与持久化文件有明确写权限要求。将
storage目录以及bootstrap/cache目录的属主赋予 Web 用户(如chown -R www-data:www-data storage bootstrap/cache),或开放可写权限(如chmod -R 775 storage bootstrap/cache),否则安装向导第一步的环境检测就会被拦截。
不想折腾 PHP 运行时的备选路线:官方文档同样给出了 Docker 方案。你可以直接拉取社区维护的镜像 0xxb/lsky-pro:latest,写一份 docker-compose.yml 顺带起一个 mysql:8.0 服务,映射 8000 端口,并把 /app/storage/app 与 /app/themes 挂载为持久化数据卷。容器跑起来后打开浏览器访问对应端口,接下来的网页安装向导步骤与源码部署完全一致。
第二步:走安装向导
服务跑起来之后,打开浏览器访问你的服务地址(比如 http://127.0.0.1:8000/install),页面就会自动跳进安装向导。Step 1 是运行环境检测,系统扩展、核心函数和 PHP 版本都在这里逐项过筛子,必须全都打上绿勾才算过关:

确认各项全绿之后点击「下一步」进入 Step 2。数据库类型我们在下拉框里直接选「SQLite 3.8.8+」;下面的数据库路径直接留空即可,程序会自动在 database 目录下生成 database.sqlite(习惯用绝对路径的话也可以手动填入);接着设置管理员邮箱和登录密码,确认无误后点击「立即安装」。程序会在后台自动写入 .env 配置、跑完数据表迁移,并在根目录生成 installed.lock 锁定文件防二次安装。

安装完成后页面会引导你跳回登录页,用刚才设置的管理员账号密码就能直接登录进控制台仪表盘。顺手提个醒:如果刚才安装时为了图省事用了简单的演示口令,进后台后的第一件事就是去个人中心把密码换成高强度的,公网服务安全可不兴偷懒。
第三步:上传第一张图片
进入后台控制面板后,点击左侧菜单栏的「上传图片」。系统默认单张文件的大小上限是 5MB,可以直接点击选择文件或把图片拖拽进上传区域。
这里有个新手特别容易踩的实测小细节:选好文件后它只是进入了待处理队列,并不会自动提交上传!你必须再点一下文件列表行右侧那个小小的「上传」云朵图标(或者底部的全部上传按钮),数据才会真正发往服务端。上传成功后切换到「我的图片」,刚才传上去的图片缩略图就已经乖乖躺在里面了,仪表盘顶部的存储容量和图片数量也会同步更新:

在「我的图片」里点开任意图片,就能直接复制原图直链、Markdown 插入语法或 HTML 引用代码,写文章做笔记随贴随用,这也是个人图床最核心的便利所在。
踩坑实录
1. PHP 8.2 的 Carbon TypeError
很多朋友图新直接跑了 PHP 8.2,执行 artisan serve 看着毫无异常,可一打开网页直接抛出 TypeError: DateTime::setLastErrors() 红色报错。这是因为旧版 Carbon 依赖和 PHP 8.2 的严格类型校验掐架了。别费劲改 vendor 源码,把环境切回稳妥的 PHP 8.1 即可满血解决。
2. Imagick 是硬门槛
有的同学以为机器装了 GD 扩展就能蒙混过关,结果环境检测死活卡在 Step 1。翻看 Lsky Pro 的源码检测逻辑就会发现,它写死了对 imagick 扩展的单项查验,GD 根本顶替不了。系统里必须装好 php-imagick 并确认模块启用,向导才会亮绿灯。
3. 装完管理员登不上
偶尔向导跑完了也提示成功,但用填写的账号密码死活登不进后台。查数据库发现迁移全齐、角色组也在,偏偏 users 表就是空的。千万别急着删库重装,在根目录敲 php artisan tinker 进入交互命令行,照着官方注册逻辑手动调 User 模型补建一条管理员数据并关联角色,即可正常登录。
4. artisan serve 重启陷阱
改了 .env 想重启服务,很多时候直接 Ctrl+C 或 kill 掉了主命令,结果新服务死活起不来或依然走旧配置。原因在于 artisan serve 底层派生出了 php -S 子进程,主进程退出后子进程容易残留并死咬着端口不放。重启前务必 ps aux | grep php 排查一下残留的内置服务进程。
升级与备份
升级方式非常朴素:去项目 Release 页下载最新版安装包直接解压覆盖现有文件。核心原则是千万不要覆盖 .env、database 目录、storage 目录以及根目录的 installed.lock。文件替换完成后,在项目根目录下跑一次 php artisan migrate --force 补平数据库字段,最后清掉缓存即可。
备份就更简单了,直接对整个程序目录打包归档。如果服务器空间有限,重点保住「核心三件套」:存放业务数据的 database/database.sqlite、存放实体图片的 storage/app 目录、以及保存了应用密钥与各项存储策略的 .env 配置文件。只要这三块在手,换到任何新环境都能原地满血复活。