1. 为什么需要NAS全家桶一键安装脚本?
在家庭和小型办公环境中搭建私有云存储和媒体中心的需求越来越普遍。传统方式需要分别安装NextCloud、jellyfin和Aria2三个服务,每个都要经历复杂的配置过程:
- NextCloud作为私有云盘需要配置数据库、PHP环境和各种依赖
- jellyfin媒体服务器需要处理硬件加速、转码和权限管理
- Aria2下载工具涉及RPC接口、BT tracker配置等
手动部署至少需要2-3天时间,且容易因环境差异导致各种兼容性问题。我实测过在CentOS 7上从零开始部署这套系统,光是解决PHP版本与NextCloud的兼容性就花了半天。
提示:大多数Linux发行版的默认软件源提供的PHP版本都低于NextCloud的要求,这是手动安装最常见的坑。
2. 脚本功能架构与技术选型
2.1 核心组件版本控制
脚本默认安装的组件版本经过严格测试:
- NextCloud 25.0.7(当前LTS版本)
- jellyfin 10.8.8(支持硬件加速的最新稳定版)
- Aria2 1.36.0(带RPC和BT扩展)
版本锁定机制能避免自动升级导致的兼容性问题。例如在测试中发现:
- NextCloud 26+需要PHP8.1,但jellyfin插件与PHP8.1存在内存泄漏
- Aria2 1.36+的RPC接口有变动
2.2 环境依赖自动处理
脚本会检测并安装以下依赖:
# 检测示例代码片段 check_deps() { [ $(php -v | grep -oP '(?<=PHP )[\d.]+' | cut -d. -f1) -ge 8 ] || install_php8 [ -x "$(command -v docker)" ] || install_docker [ -f /usr/bin/ffmpeg ] || install_ffmpeg }依赖安装采用分层策略:
- 基础依赖:EPEL源、Remi源
- 运行时:PHP8、MariaDB、Redis
- 媒体处理:FFmpeg、Intel/QSV驱动
2.3 网络优化方案
针对国内网络环境特别设计:
- NextCloud应用市场镜像替换为国内源
- Aria2配置内置了30个国内可用的BT tracker
- jellyfin插件仓库使用中科大镜像
实测下载速度对比:
| 组件 | 国际源速度 | 国内源速度 |
|---|---|---|
| NextCloud插件 | 50KB/s | 3MB/s |
| jellyfin插件 | 80KB/s | 5MB/s |
3. 安装流程详解
3.1 系统准备阶段
最低硬件要求:
- CPU:x86_64架构(Intel/AMD),建议4核+
- 内存:4GB(实际测试2GB可运行但性能较差)
- 存储:50GB以上(媒体文件需额外空间)
推荐使用CentOS 7/8或Ubuntu 20.04 LTS。我在树莓派4B(ARM架构)上测试时发现:
- 需要手动编译部分依赖
- jellyfin硬件加速不可用
- 建议ARM设备使用专版脚本
3.2 一键执行过程
典型安装日志:
[INFO] 检测到CentOS 7.9系统 [STEP 1/8] 安装基础依赖... 完成 [STEP 2/8] 配置PHP8.1环境... 完成 [STEP 3/8] 部署MariaDB 10.5... 完成 [STEP 4/8] 安装NextCloud... 完成 [STEP 5/8] 配置jellyfin... 完成 [STEP 6/8] 部署Aria2+RPC... 完成 [STEP 7/8] 防火墙规则配置... 完成 [STEP 8/8] 服务自启动设置... 完成 总耗时: 23分18秒关键交互节点:
- 设置MariaDB的root密码
- 配置NextCloud管理员账号
- 选择jellyfin硬件加速模式(Intel QSV/NVIDIA/None)
3.3 安装后配置向导
首次访问NextCloud时会自动跳转到配置页面,脚本已预先完成:
- 数据库连接配置
- Redis缓存设置
- 内存优化参数
需要手动完成的配置:
- 在NextCloud设置->应用商店中启用"External storage support"
- jellyfin控制台添加媒体库路径(建议挂载到NextCloud的/data目录)
- Aria2 RPC密钥配置(位于/etc/aria2/aria2.conf)
4. 性能优化与问题排查
4.1 NextCloud调优
修改config.php增加:
'memcache.local' => '\\OC\\Memcache\\Redis', 'memcache.locking' => '\\OC\\Memcache\\Redis', 'redis' => [ 'host' => 'localhost', 'port' => 6379, ], 'preview_max_x' => 1024, 'preview_max_y' => 1024,实测效果:
| 操作 | 优化前 | 优化后 |
|---|---|---|
| 首次加载页面 | 3.2s | 1.1s |
| 图片预览生成 | 15s/张 | 3s/张 |
4.2 jellyfin硬件加速
Intel核显配置示例:
<Encoding> <HardwareAccelerationType>qsv</HardwareAccelerationType> <Qsv> <EnableLowPower>true</EnableLowPower> <Enable10bit>false</Enable10bit> </Qsv> </Encoding>转码性能对比(1080p->720p):
| 模式 | CPU占用 | 功耗 | 帧率 |
|---|---|---|---|
| 软件 | 280% | 45W | 24fps |
| QSV | 30% | 18W | 48fps |
4.3 常见问题解决方案
问题1:Aria2 BT下载速度慢解决方法:
# 更新tracker列表 wget -O /etc/aria2/trackers-all.txt https://cdn.jsdelivr.net/gh/ngosang/trackerslist/trackers_all.txt systemctl restart aria2问题2:NextCloud上传文件失败检查项:
- php.ini中的upload_max_filesize(脚本默认设为16G)
- /etc/nginx/conf.d/nextcloud.conf中的client_max_body_size
- 存储目录权限(应设为www-data:www-data)
问题3:jellyfin无法识别新增媒体这是jellyfin的已知问题,手动触发扫描:
curl -X POST "http://localhost:8096/Library/Refresh" \ -H "X-MediaBrowser-Token: [API_KEY]"5. 进阶使用场景
5.1 外网访问方案
安全建议配置:
- 使用Nginx反向代理+Let's Encrypt证书
- 限制NextCloud的admin访问IP
- jellyfin启用HTTPS并关闭UPnP
我的家庭网络配置示例:
server { listen 443 ssl; server_name nas.example.com; ssl_certificate /etc/letsencrypt/live/nas.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/nas.example.com/privkey.pem; location /nextcloud { proxy_pass http://localhost:8080; proxy_set_header Host $host; } location /jellyfin { proxy_pass http://localhost:8096; proxy_set_header X-Real-IP $remote_addr; } }5.2 自动化备份策略
推荐使用脚本自带的备份工具:
/opt/nas-tools/backup.sh \ --nextcloud /var/www/nextcloud \ --jellyfin /var/lib/jellyfin \ --aria2 /etc/aria2 \ --output /mnt/backup备份流程设计:
- 每日增量备份(保留7天)
- 每周全量备份(保留4周)
- 使用rsync同步到远程存储
5.3 手机端配套应用
最佳实践组合:
- NextCloud:官方App(支持自动上传照片)
- jellyfin:Findroid(第三方客户端,比官方App更流畅)
- Aria2:Aria2App(支持扫码添加下载任务)
Android自动化配置示例(使用Tasker):
- 监控DCIM目录变化
- 通过WebDAV上传到NextCloud
- 触发jellyfin库更新
- 手机充电时自动启动Aria2下载队列
这套系统在我家稳定运行了11个月,经历了多次断电和网络波动考验。最实用的功能组合是:手机照片自动备份到NextCloud→家人通过jellyfin相册浏览→大文件通过Aria2远程下载。脚本最大的价值是把原本需要专业运维的工作变成了小白也能操作的简单流程