1. 为什么选择在群辉NAS上部署兰空图床

作为一个长期使用群辉NAS的玩家,我发现用它来搭建个人图床简直是绝配。你可能要问:为什么非要折腾这个?直接用现成的云存储不香吗?让我告诉你几个真实的使用场景。

上周我写技术博客时,需要插入30多张截图。如果每张都手动上传到第三方图床,光是来回切换页面就够烦人的。更别提有些平台还会压缩图片质量,或者突然限制外链。而用自己搭建的兰空图床,可以直接拖拽上传,自动生成Markdown链接,整个过程行云流水。

数据自主权是另一个关键因素。去年某知名图床服务突然关闭,导致大量技术博客出现图片失效的问题。把图片存在自己的NAS上,配合定期备份策略,完全不用担心这类风险。实测下来,我的DS220+在同时处理图床请求和常规文件服务时,CPU占用率基本没超过30%。

说到性能表现,这里有个对比数据:同样上传10张2MB的图片,通过公网图床平均耗时12秒,而本地NAS图床仅需3秒。特别是在内网环境下,几乎感觉不到延迟。对于经常需要处理大量图片的自媒体创作者来说,这个效率提升非常可观。

2. 部署前的准备工作

2.1 硬件与系统要求

我的DS220+配备的是双核J4025处理器和6GB内存(官方标配2GB,我自己升级了)。实测运行Lsky Pro图床加上MySQL数据库,日常内存占用约1.2GB。建议至少预留2GB内存给这个服务,特别是如果你打算同时运行其他Docker应用。

存储空间方面要特别注意:图片文件会直接占用NAS容量。我的方案是在docker目录下单独挂载一个4TB的存储池,专门用于存放图床数据。这样即使图床文件增长,也不会影响系统盘的空间使用。

2.2 权限配置实战技巧

很多新手容易在权限设置上栽跟头。我刚开始部署时就遇到过容器启动失败的问题,后来发现是子文件夹权限没继承。正确的做法是:

# 通过SSH登录NAS后执行
chmod -R 777 /volume1/docker/图床
chown -R 1026:100 /volume1/docker/图床

这个命令中的1026是容器内www-data用户的UID,100是users组的GID。不同型号的群辉可能略有差异,可以通过以下命令查看具体值:

docker exec -it Lsky-por id www-data

3. 两种部署方案详解

3.1 Docker Compose方案全流程

先来看我的标准部署流程。在群辉的File Station中创建好目录结构后,打开Container Manager(旧版叫Docker),切换到"项目"标签页。点击新增,选择"从docker-compose.yml创建"。

这里有个小技巧:我习惯先用记事本写好配置文件,然后通过"上传"按钮导入。这样可以避免在网页编辑器里手打出错。下面是我优化过的compose文件,增加了健康检查和资源限制:

version: '3.8'
services:
  lsky-pro:
    image: halcyonazure/lsky-pro-docker:latest
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8089"]
      interval: 30s
      timeout: 10s
      retries: 3
    deploy:
      resources:
        limits:
          memory: 1G
    volumes:
      - /volume1/docker/图床/Lsky-por:/var/www/html
    ports:
      - "8000:8089"
    depends_on:
      mysql-lsky:
        condition: service_healthy

  mysql-lsky:
    image: mysql:5.7.22
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 20s
      timeout: 5s
      retries: 5
    environment:
      MYSQL_ROOT_PASSWORD: your_strong_password
      MYSQL_DATABASE: lsky_pro
    volumes:
      - /volume1/docker/图床/mysql/data:/var/lib/mysql
      - /volume1/docker/图床/mysql/conf:/etc/mysql/conf.d

这个配置有几个改进点:

  1. 增加了内存限制,防止单个容器占用过多资源
  2. 设置了健康检查,确保服务完全就绪才会启动依赖项
  3. 使用了更新的Compose语法版本(3.8)

3.2 数据库配置的坑与解决方案

MySQL容器启动后,经常遇到字符集问题导致图床报错。我的解决方法是提前在/volume1/docker/图床/mysql/conf下创建my.cnf文件:

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

这样能确保数据库默认使用utf8mb4编码,完美支持emoji等特殊字符。曾经有用户反馈上传包含emoji文件名的图片失败,就是这个原因。

4. 初始化配置与优化

4.1 网页安装向导实操

当容器启动完成后,在浏览器访问http://你的NAS_IP:8000会看到安装界面。在数据库配置环节,有几个关键参数容易填错:

  • 数据库地址:应该填容器名mysql-lsky,而不是localhost
  • 数据库名:填写compose文件中定义的lsky_pro
  • 端口保持默认3306不变

这里有个细节:群辉的防火墙可能会阻止8000端口访问。需要到"控制面板 > 安全性 > 防火墙"里添加规则。我建议直接创建一个应用规则,选择"Docker"应用,这样后续新增的容器端口都会自动放行。

4.2 性能调优实战

安装完成后,默认配置可能无法满足高并发需求。我通过修改/volume1/docker/图床/Lsky-por/.env文件提升了性能:

APP_ENV=production
APP_DEBUG=false
CACHE_DRIVER=redis
QUEUE_CONNECTION=redis

SESSION_DRIVER=redis
SESSION_LIFETIME=120

REDIS_HOST=redis
REDIS_PASSWORD=null
REDIS_PORT=6379

要实现这个配置,需要额外部署Redis容器。考虑到篇幅限制,这里不展开说明,有兴趣的可以参考官方文档。改用Redis后,我的图床响应时间从平均800ms降到了300ms左右。

5. 日常使用与维护

5.1 备份策略设计

图床数据安全至关重要。我设置了双重备份方案:

  1. 使用群辉自带的Hyper Backup,每天凌晨2点增量备份整个/volume1/docker/图床目录到外接硬盘
  2. 每周日通过Cloud Sync将图片文件夹同步到加密的云存储

这里特别提醒:MySQL的备份不能简单复制数据文件。正确做法是使用mysqldump:

docker exec Lsky-por-mysql sh -c 'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" lsky_pro' > /volume1/backup/lsky_pro_$(date +%Y%m%d).sql

5.2 常见故障排查

遇到最多的问题是上传图片失败,通常有以下几种情况:

  1. 权限问题:检查/volume1/docker/图床/Lsky-por/storage目录是否有写入权限
  2. 大小限制:默认只允许10MB以下文件,修改php.ini中的配置:
    upload_max_filesize = 50M
    post_max_size = 55M
    
  3. 内存不足:在Container Manager中调整容器的内存限制

最近遇到一个棘手案例:用户上传大量图片后,图床变得异常缓慢。最后发现是没清理临时文件导致的。现在我会定期执行维护脚本:

docker exec Lsky-por php artisan cache:clear
docker exec Lsky-por php artisan view:clear

6. 进阶玩法与扩展

6.1 域名与HTTPS配置

要让外网安全访问图床,建议配置反向代理。群辉自带的Application Portal就很好用:

  1. 控制面板 > 应用程序门户 > 反向代理
  2. 添加规则,将你的域名(如pic.yourdomain.com)指向localhost:8000
  3. 在证书页面申请Let's Encrypt免费证书

记得修改Lsky Pro的配置,在AppServiceProvider.php中添加:

public function boot()
{
    if(config('app.env') === 'production') {
        \URL::forceScheme('https');
    }
}

6.2 插件与主题定制

兰空图床支持插件扩展。我安装了几个实用插件:

  • 水印插件:自动为上传图片添加版权信息
  • WebP转换插件:自动将PNG/JPG转为更小的WebP格式
  • 防盗链插件:限制非授权网站引用图片

修改主题也很简单,只需替换resources/views下的模板文件。我把自己博客的配色方案移植过来,前后只花了半小时。

更多推荐