w

群晖 Container Manager 部署 Lsky Pro(兰空图床)实战笔记

群晖 Container Manager 部署 Lsky Pro(兰空图床)实战笔记

适用:群晖 DSM 7.x + Container Manager(原 Docker)
方案:MariaDB 双容器(推荐,多用户/长期使用)
镜像:<code>halcyonazure/lsky-pro-docker:latest</code>(社区镜像,开源版官方无 Docker 镜像)

一、前置确认(动手前必看)

检查项 怎么查 结论
CPU 架构 控制面板 → 信息中心 → CPU 型号 Intel/AMD = x86(可用本方案);Realtek/Marvell = ARM,需换 <code>daitcl/lsky-pro</code>
8089 端口占用 Container Manager 提示 / SSH <code>netstat -tlnp \| grep 8089</code> 被占就改左侧宿主机端口,如 <code>9089:8089</code>
数据目录 File Station 新建 必须是空文件夹

镜像要点(决定你怎么填端口):

  • 容器内 Apache 监听端口由 <code>WEB_PORT</code> 控制,默认 8089
  • 程序目录 <code>/var/www/html</code>;
  • 端口映射右侧必须等于 <code>WEB_PORT</code>,否则页面打不开。

二、目录与权限准备(权限是 90% 故障根源)

  1. File Station 新建:
    /volume1/docker/lsky-pro/
    ├── web/     # Lsky 程序 + 上传的图片
    └── db/      # MariaDB 数据(方案 B 才需要)
  2. 设置权限(关键):右键 <code>lsky-pro</code> → 属性 → 权限 → <code>Everyone</code> 设为可读写
    勾选「应用到这个文件夹、子文件夹及文件」。
    或 SSH 执行:

    sudo chmod -R 777 /volume1/docker/lsky-pro

image.png|1200

⚠️ MariaDB 容器内以 uid 999(mysql 用户) 运行。若挂载目录属主是 root/admin,
容器内无写权限 → 无法初始化系统表 → 启动失败 → 无限重启(crash loop)。

三、方案选择

方案 A:SQLite 单容器(个人自用,最省事)

version: &quot;3&quot;

services:
  lsky-pro:
    image: halcyonazure/lsky-pro-docker:latest
    container_name: lsky-pro
    restart: unless-stopped
    ports:
      - &quot;8089:8089&quot;          # 左=群晖端口(可改);右必须等于 WEB_PORT
    environment:
      TZ: Asia/Shanghai
      WEB_PORT: 8089
    volumes:
      - /volume1/docker/lsky-pro/web:/var/www/html

安装时数据库选 SQLite,数据库文件自动落在 <code>/var/www/html/database/</code>。

方案 B:MariaDB 双容器(推荐)

version: &quot;3.8&quot;

services:
  lsky-pro:
    image: halcyonazure/lsky-pro-docker:latest
    container_name: lsky-pro
    restart: unless-stopped
    depends_on:
      - mariadb                 # 列表形式,不带 condition
    environment:
      TZ: Asia/Shanghai
      WEB_PORT: 8089
    ports:
      - &quot;8089:8089&quot;
    volumes:
      - ./app:/var/www/html
    networks:
      - lsky-net

  mariadb:
    image: mariadb:10.11
    container_name: lsky-pro-db
    restart: unless-stopped
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    environment:
      TZ: Asia/Shanghai
      MARIADB_ROOT_PASSWORD: LskyRoot@2024     # 自行修改
      MARIADB_DATABASE: lskypro
      MARIADB_USER: lskypro
      MARIADB_PASSWORD: LskyDb@2024            # 自行修改
    volumes:
      - ./data:/var/lib/mysql
    networks:
      - lsky-net
    healthcheck:                              # 用 condition 时必须配
      test: [&quot;CMD&quot;, &quot;healthcheck.sh&quot;, &quot;--connect&quot;, &quot;--innodb_initialized&quot;]
      interval: 10s
      timeout: 5s
      retries: 10
      start_period: 30s

networks:
  lsky-net:
    driver: bridge

若镜像无 <code>healthcheck.sh</code>,改用:
<code>test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -u root -p$$MARIADB_ROOT_PASSWORD –silent"]</code>
(<code>$$</code> 是 Compose 转义,进容器后变 <code>$</code>)

image.png|1200

四、Container Manager 部署步骤

  1. Container Manager → 左侧「项目」→ 新增
  2. 项目名称 <code>lsky-pro</code>;路径选 <code>/volume1/docker/lsky-pro</code>
  3. 源:选「创建 docker-compose.yml」,粘贴上面的 yaml
  4. 下一步 → 完成(自动拉镜像并构建)
  5. 等 <code>lsky-pro-db</code> 状态变 Up/healthy,日志出现
    <code>[Note] mysqld: ready for connections.</code>(首次初始化 30~60 秒)
  6. 浏览器打开 <code>http://群晖IP:8089</code> 进入安装向导

五、安装向导填参(最容易填错的一步)

字段 正确填法 说明
数据库类型 MySQL 5.7+ MariaDB 10.11 兼容 MySQL 协议
数据库地址 <code>lsky-pro-db</code> ⚠️ 填容器名!不能填 127.0.0.1 / localhost / 群晖IP
数据库端口 <code>3306</code> 容器间走内部端口
数据库名 <code>lskypro</code> 对应 <code>MARIADB_DATABASE</code>
用户名 <code>lskypro</code> 对应 <code>MARIADB_USER</code>
密码 对应 <code>MARIADB_PASSWORD</code> 不是 root 密码
表前缀 留空
管理员邮箱/密码 自设 Lsky 后台登录用,与数据库无关

为什么不能填 127.0.0.1:在 lsky-pro 容器里 <code>127.0.0.1</code> 指向它自己,
它只有 Apache+PHP,没有 MySQL → 必报 <code>SQLSTATE[HY000] [2002] Connection refused</code>。

Screenshot - 2026-08-30 19.10.36.png|1200

六、装完必做

  1. 存储策略 → 默认本地策略 → 编辑 → 访问地址 改成实际访问地址
    (<code>http://群晖IP:8089</code> 或反代域名),否则图片链接前缀错误 → 图片 404。
  2. 自用建议:用户 → 关闭「允许注册」;角色组 → 关闭「游客上传」。
    image.png|1200

    我是在旁路由中使用Lucky管理反代

    七、排错速查表

现象 原因 / 解决
<code>dependency failed … has no healthcheck configured</code> 用了 <code>condition: service_healthy</code> 但被依赖服务无 healthcheck → 补 healthcheck,或 <code>depends_on</code> 改成列表形式 <code>- mariadb</code>
db 容器无限重启、日志卡在引导说明 目录权限 → <code>sudo chown -R 999:999 /volume1/docker/lsky-pro/db</code>
权限改了仍起不来 清空半初始化残留:<code>sudo rm -rf /volume1/docker/lsky-pro/db/*</code> 后重启
<code>Connection refused</code> 数据库地址填错(应为容器名 <code>lsky-pro-db</code>)
容器反复重启 / permission denied 目录权限不足 → Everyone 可读写
页面 404/空白 <code>web</code> 目录不是空的 → 清空后重建项目
图片上传后打不开 存储策略「访问地址」未改
大图上传失败 容器 PHP 限制 → 调 <code>upload_max_filesize</code> / <code>post_max_size</code>
反代 HTTPS 后样式异常 反代加 <code>X-Forwarded-Proto: https</code>;或容器内执行 <code>sed -i "32 a \\\Illuminate\\Support\\Facades\\URL::forceScheme('https');" /var/www/html/app/Providers/AppServiceProvider.php</code>
ARM 群晖 换 <code>daitcl/lsky-pro:latest</code>(支持 amd64/arm64)
镜像拉不动 换 <code>dko0/lsky-pro</code>(卷 <code>/var/www/html</code>,容器端口 80,映射写 <code>"8089:80"</code> 并去掉 <code>WEB_PORT</code>)

八、核心三句话

  1. 空目录(首次启动要初始化程序)
  2. 给权限(Everyone 可读写 / MariaDB 目录 <code>chown 999:999</code>)
  3. 端口右侧 = <code>WEB_PORT</code>,数据库地址填容器名