在 Orange Pi 上自建 Nextcloud 私有网盘
公有网盘用起来总有各种不踏实——容量、限速、隐私,哪一条都能让人想把它搬回自己手里。正好手边有块吃灰的开发板,就有了这次"自己搭一个私有网盘"的折腾。
硬件准备
用的是一块 Orange Pi 3 LTS,配置很"树莓派":
| 项目 | 参数 |
|---|---|
| SoC | Allwinner H6(ARM Cortex-A53 ×4,arm64) |
| 内存 | 2GB |
| 存储 | 64GB microSD 卡 |
| 网络 | 板载 Wi-Fi + 百兆有线 |
2GB 内存跑个网盘绰绰有余,关键是功耗低、常年开机不心疼。
系统与软件栈
系统刷的是 Ubuntu 22.04.5 LTS。网盘服务选 Nextcloud 33,它依赖一套标准的 LEMP 栈:
nginx— Web 服务器与反向代理,统一 80/443 入口PHP 8.3-FPM— Nextcloud 是 PHP 写的MySQL 8.0— 存元数据、用户、分享记录Redis— 缓存与锁,加速访问
装 PHP 模块
Nextcloud 对 PHP 扩展有明确要求,装齐这些基本就不会在安装向导里报缺模块:
sudo apt install php8.3-fpm php8.3-xml php8.3-mbstring php8.3-curl \
php8.3-gd php8.3-zip php8.3-intl php8.3-mysql \
php8.3-bcmath php8.3-gmp php8.3-imagick
MySQL 走 native_password
MySQL 8 默认的 caching_sha2_password 偶尔会和 PHP 驱动闹别扭,干脆给专用账号改回老认证方式,省得后面排查:
ALTER USER 'nextcloud'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
安装 Nextcloud
把 Nextcloud 解压到 /var/www/nextcloud/,然后重点改 config.php 里的两处:
trusted_domains— 受信域。这里不加对域名/IP,访问时会报"通过不被信任的域名访问"。overwriteprotocol— 如果前面套了 HTTPS 反代,需要显式告诉 Nextcloud 自己是 HTTPS,否则生成的资源链接会混用 http。
'trusted_domains' => [
0 => '192.168.1.x',
1 => 'localhost',
],
'overwriteprotocol' => 'https',
之后跑一下数据库初始化,创建管理员账号,就能通过浏览器进入网盘了。
两个值得记下的坑
1. 温度偏高
这块板子没有散热片,长期跑下来 CPU 温度在 70°C 上下。虽然不至于立刻出问题,但长时间高温会让稳定性打折扣。如果打算 7×24 运行,加一块小散热片或风扇是值得的投资。
2. 一次诡异的自动重启
有阵子发现它隔段时间会自己重启。查日志发现是内核里 cpufreq_dt(CPU 频率驱动)触发了一个空指针,随后硬件看门狗在 16 秒后强制重启了系统。
定位过程里学到一个实用技巧:把 systemd 日志持久化打开,重启后才留得住现场:
# /etc/systemd/journald.conf
Storage=persistent
否则每次重启日志就没了,根本没法追溯"它是怎么死的"。
小结
用一块几十块的板子跑起一个完整、数据完全自控的私有网盘,这件事本身门槛并不高——真正的功夫在软件栈的配置和出问题后的排查上。装起来只是开始,让它稳定地跑下去,才是折腾的乐趣所在。
下一步就是让它能被外网访问,这就牵扯到内网穿透了,另起一篇聊。