跳到主要内容

Lsky Pro 图床

一句话版:把图床安在自家服务器上,图片存自家、公网随便看;隧道会把整个图床都「搬」到公网,想护住后台就用访问控制开关上锁。


一、为什么需要自建图床?​

用过微博图床、SM.MS、路过图床的朋友都懂——免费图床总有这么几个痛点:

痛点说明
😱 被删图第三方图床说关就关,你文章里的图全裂
🐢 速度慢高峰期加载慢,海外节点更糟
🔒 隐私担忧图片上传到别人服务器,敏感图片不敢传
📏 容量限制免费版几 GB,超过就收费

自建图床 + 内网云隧道穿透的组合拳,完美解决:

  • ✅ 图片存在自家服务器,永不删图
  • ✅ 公网 HTTPS 访问,速度由你带宽决定
  • ✅ 后台安全交给访问控制开关(HTTP 认证 / IP 白名单,详见 7.2)
  • ✅ 零外部数据库:PHP 8.2 + SQLite 搞定,不用装 MySQL

二、整体架构​

┌─── 公网 ─────────────────────────────────────┐
│ │
│ https://你的域名/i/xxx.png │
│ ↑ HTTPS 443 │
│ [内网云 Tunnel] │
│ ↑ SSH反向代理 :80 │
├───────────────────────────────────────────────┤
│ Linux 服务器 (lsky-image-host) │
│ ┌─────────────────────────────────────────┐ │
│ │ PHP artisan serve --port=8080 │ │
│ │ └─ Lsky Pro (Laravel 9 + SQLite) │ │
│ │ nssh --daemon -R 80:127.0.0.1 │ │
│ └─────────────────────────────────────────┘ │
└───────────────────────────────────────────────┘
层级组件说明
公网入口内网云隧道通过你的域名访问
隧道客户端nssh7MB 二进制,零依赖
图床服务Lsky Pro V2.1Laravel 9 + SQLite,单进程
运行环境Linux 服务器Debian 12,1 核 1G 内存够用

三、Lsky Pro 是什么?​

Lsky Pro 是一款开源的 PHP 图床程序,号称「您的图片在此安家」。

核心特性:

特性详情
🆓 免费开源基于 MIT 协议,GitHub ⭐ 4k+
🗄️ 零数据库依赖SQLite 可选,无需 MySQL
📦 超轻量PHP 8.2 + Composer,7 个扩展搞定
🔌 API 丰富完整的 REST API,配合 PicGo/uPic 等工具
🖼️ 支持相册管理图片分类、批量操作
👥 多用户支持分组、存储策略、容量配额
🛡️ 权限控制可关闭注册、关闭游客上传、关闭公开画廊

和主流图床对比:

对比项Lsky Pro 自建SM.MS微博图床
存储空间你硬盘多大就多大5GB免费有限制
图片安全✅ 自己控制⚠️ 可能被删❌ 经常裂图
上传速度内网千兆受限于国际带宽国内快
API接口✅ 完整REST API✅ 有❌ 无
成本电费+域名¥69/年起免费

后台界面一览:

Lsky Pro 后台仪表盘


四、内网云是什么?​

「内网也可以变成云」——内网云(neiwangyun.net)是一款 SSH 反向代理穿透服务,它的理念是:不需要公网 IP,不需要配置路由器,一行命令把内网服务暴露到公网。

官网: https://www.neiwangyun.net

核心能力:

能力说明
🔗 SSH 反向隧道基于标准 SSH -R 协议
⚡ 三端接入HTTP / HTTPS / 自定义端口
📦 零依赖客户端nssh 客户端仅 5-7MB,下载即用
🖥️ 跨平台Linux/Windows/macOS/路由器全支持
🔄 断线重连守护进程自动维护连接
🎮 多连接管理--list/--restart/--stop 一键管理

五、Linux 上部署 Lsky Pro​

5.1 安装 PHP 和扩展​

Lsky Pro 依赖 PHP 8.2 + 几个扩展,最精简安装:

apt-get update -qq
apt-get install -y -qq \
php8.2-cli php8.2-sqlite3 php8.2-mbstring php8.2-gd \
php8.2-xml php8.2-curl php8.2-zip php8.2-bcmath \
php8.2-imagick unzip wget curl git composer
扩展用途
php8.2-cliPHP 命令行(Lsky 用 artisan serve 运行)
php8.2-sqlite3SQLite 数据库驱动(零外部数据库)
php8.2-gd + imagick图片处理(缩放、裁剪、水印)
php8.2-curlHTTP 请求(下载/API)

💡 安装 PHP 8.2 小贴士: 如果你的系统默认 PHP 版本不是 8.2,需要先添加 sury.org 源,具体命令见文末「常见问题」。

5.2 下载并初始化 Lsky Pro​

# 下载最新版
cd /opt
LATEST_URL=$(curl -sL https://api.github.com/repos/lsky-org/lsky-pro/releases/latest \
| grep -oP '"browser_download_url": "[^"]+' | grep -oP 'https://[^"]+' | head -1)
wget -q -O lsky-pro.zip "$LATEST_URL"
unzip -q lsky-pro.zip -d lsky-pro
cd lsky-pro

# 配置 .env(SQLite)
cp .env.example .env
sed -i 's/DB_CONNECTION=.*/DB_CONNECTION=sqlite/' .env
sed -i 's/DB_HOST=.*/DB_HOST=/' .env
sed -i 's/DB_DATABASE=.*/DB_DATABASE/' .env
touch database/database.sqlite

# 生成 APP_KEY + 数据库迁移
php artisan key:generate
php artisan migrate --force

# 如果遇到 Carbon 兼容性错误(PHP 8.2 常见)
composer update --no-dev --ignore-platform-reqs
php artisan migrate --force

⚠️ SQLite 必须用绝对路径,否则 Laravel 找不到数据库文件会报 unable to open database file。在 .env 中设置:

DB_DATABASE=/opt/lsky-pro/database/database.sqlite

5.3 配置 systemd 开机自启​

Lsky Pro 使用 PHP 自带的开发服务器(artisan serve)运行,不需要 Nginx,不需要 Apache。配置一个 systemd 服务:

cat > /etc/systemd/system/lsky-pro.service << 'EOF'
[Unit]
Description=Lsky Pro Image Hosting
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/opt/lsky-pro
ExecStart=/usr/bin/php artisan serve --host=0.0.0.0 --port=8080
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now lsky-pro
systemctl status lsky-pro

5.4 通过 Web 完成安装​

浏览器访问 http://你的服务器IP:8080:

  1. 自动跳转到 /install 安装向导
  2. 检查 PHP 扩展全部通过(绿色 ✅)
  3. 填写管理员邮箱和密码
  4. 完成安装 → 重定向到登录页

Lsky Pro 登录页

5.5 管理员后台一览​

登录后进入控制台,可以看到:

功能说明
📊 仪表盘图片数量、存储用量、用户数趋势图
🖼️ 上传图片拖拽上传、快捷键粘贴
🗂️ 我的图片图片列表、预览、删除、复制链接
⚙️ 设置默认相册、默认存储策略、上传偏好
🖼️ 图片管理全局查看/编辑/删除所有用户的图片
👥 用户管理创建用户、分配容量、禁用/删除
📂 储存策略本地存储 / S3 / OSS / COS / 七牛
🔧 系统设置站点名、注册开关、API 开关、版本升级

💡 安全配置建议: 进入「系统设置」→ 关闭「开放注册」、关闭「游客上传」、关闭「登录画廊」——这样只有你自己能上传和管理图片,别人只能通过外链查看。


六、部署内网云隧道​

6.1 下载 nssh 客户端​

nssh 客户端只有一个二进制文件,5-7MB,零依赖,下载即用:

👉 去 内网云官网下载页 下载对应平台的客户端

# 下载后放到 /usr/local/bin/ 并赋予执行权限
chmod +x /usr/local/bin/nssh_client

# 验证版本
nssh_client -v

💡 Linux 用户选 linux-amd64 版本(arm 服务器选 linux-arm64)。

6.2 测试连通性​

先不加 --daemon,前台跑着看能否连上服务器:

nssh_client -R 80:127.0.0.1:8080 yourname@gz2.neiwangyun.net -p 22 --passwd yourpassword

看到以下日志表示连接成功:

INF Connected to gz2.neiwangyun.net:22
INF Tunnel established successfully!
Remote listener: 0.0.0.0:80
Local target: 127.0.0.1:8080

按 Ctrl+C 断开,接着做持久化部署。

💡 原理: nssh 用 SSH 反向隧道(-R)将服务器的公网 80 端口映射到本地的 Lsky Pro 8080 端口。公网请求到达 你的域名:80 → 通过 SSH 隧道转发 → 127.0.0.1:8080(Lsky Pro)。

6.3 开机自启(crontab)​

crontab -e
# 添加一行:
@reboot /usr/local/bin/nssh_client --daemon -R 80:127.0.0.1:8080 yourname@gz2.neiwangyun.net -p 22 --passwd yourpassword

✅ 为什么选 crontab @reboot 而不是 systemd? 因为 nssh 本身就有守护进程模式(--daemon),内置断线自动重连。@reboot 只负责开机拉起,运行期间的断线重连由 nssh 自己搞定。

6.4 启动守护进程​

nssh_client --daemon -R 80:127.0.0.1:8080 yourname@gz2.neiwangyun.net -p 22 --passwd yourpassword

查看隧道状态:

nssh_client --list
# local-server user remote-server status
---------------------------------------------------------------
1 127.0.0.1:8080 yourname gz2.neiwangyun.net:22 online

6.5 资源占用​

nssh 的资源占用极小,和 Lsky Pro 同在一个 1 核 1G 的环境里毫无压力:

进程内存CPU
php artisan serve~47MB几乎 0%(空闲)
nssh --daemon~6MB几乎 0%(空闲)

5 个连接也只消耗 ~10MB 内存,非常适合跑在路由器、OpenWrt、树莓派等低配设备上。


七、公网访问验证​

7.1 图片访问​

隧道部署完成后,公网域名即可访问图床图片:

# 公网 HTTPS 访问图片
curl -I https://你的域名/i/xxx.png

# HTTP 200 正常加载

7.2 访问边界:整个应用都在公网​

先说结论: 隧道是「整机端口映射」——公网端口直连你本地 Lsky Pro 的 8080 端口,所以登录页、上传接口、图片浏览全都暴露在公网,不存在「公网只读、登录上传不可达」的隔离。能挡住陌生人的,是产品自带的访问控制开关:

你的需求推荐开关说明
谁来访问都得先输账号密码HTTP 认证在平台入口加一道口令,见 HTTP 认证说明
只允许你家/公司的 IP 访问Web 访问 IP 白名单白名单外的 IP 一律挡在门外,见 Web IP 白名单说明
不想让别人用域名访问整站域名访问开关关掉后公网拿不到访问入口,见 域名入口开关说明

个人图床推荐组合:

  1. 在 Lsky Pro 后台关掉「开放注册」「游客上传」「登录画廊」(见 5.5);
  2. 到隧道设置打开 Web 访问 IP 白名单,只放行你自己常用的公网 IP;
  3. 要给队友上传用,就别限 IP,改用 HTTP 认证给每个人发账号密码。

⚠️ 别再信「隧道能自动隔离公网」——隧道只负责开门,锁门要靠访问控制开关。

7.3 PicGo 配置(可选)​

如果你常用 Markdown 写文章,推荐配合 PicGo 桌面客户端一键上传:

字段值
图床类型兰空图床 (Lankong)
Serverhttp://你的服务器IP:8080(内网用)
Auth TokenLsky Pro 后台 → 用户 → API Token

八、部署成本统计​

项目配置成本
Linux 服务器1 核 1G 即可已有(电费忽略)
内网云隧道HTTP+HTTPS+自定义端口¥0(有免费额度)
域名内网云提供¥0
总计¥0

九、常见问题​

Q: PHP 8.2 怎么装?​

Debian 12/Ubuntu 22.04+ 默认仓库可能没有 PHP 8.2,需要添加 sury.org 源:

apt-get install -y apt-transport-https lsb-release ca-certificates
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
apt-get update
apt-get install -y php8.2-cli php8.2-sqlite3 php8.2-mbstring php8.2-gd php8.2-xml php8.2-curl php8.2-zip php8.2-bcmath php8.2-imagick

Q: artisan serve 报 Carbon 兼容性错误?​

cd /opt/lsky-pro
composer update --no-dev --ignore-platform-reqs
php artisan migrate --force

Q: 公网访问不了?​

# 1. 检查隧道是否在线
nssh_client --list

# 2. 检查 Lsky Pro 是否在跑
curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:8080
# 应该返回 302

# 3. 检查 nssh TCP 连接
lsof -i -P -n | grep nssh
# 看到 ESTABLISHED 就说明隧道已通

Q: 想用域名 HTTPS 怎么办?​

内网云隧道天然支持 HTTPS。配置完成后直接用 https://你的域名 访问即可,证书由内网云自动签发。


十、总结​

👍 好的地方:

  • 部署全程不用 MySQL、不用 Nginx、不用 Docker——极度简洁
  • nssh 二进制 7MB,启动即连,从来没有断过
  • 公网 HTTPS 加载图片 200-300ms,体验和商业图床相当
  • 配合访问控制开关(HTTP 认证 / IP 白名单),后台安全自己掌控

⚠️ 注意的地方:

  • php artisan serve 是单线程 PHP 服务器,大并发上传建议加 Nginx
  • SQLite 适合个人/小团队(几十万张以内),大规模建议 MySQL
  • 内网云隧道免费额度有限,大流量场景需付费

一个值得尝试的组合:

内网 Lsky Pro(管理上传)
+ 内网云隧道(公网穿透)
= 你的专属高速图床

📚 参考链接​


📝 本教程由内网云团队整理,如有问题欢迎反馈。


记住内网云:自建图床不删图,隧道送它上公网;后台安全别大意,访问控制来把关。