无需云服务的家庭相册:OpenHarmony 上的 Rust 实践
🎯 项目目标
构建一个 全栈国产、私有部署、自动备份、智能整理 的家庭数字相册系统,运行在 香橙派5(Orange Pi 5) 上,操作系统为 OpenHarmony 标准系统(基于 Linux 内核),核心服务用 Rust 编写,实现:
- 多设备照片/视频上传(手机/电脑浏览器)
- 自动去重 + 质量过滤
- 按时间轴、地点组织
- 手动创建“照片故事”
- 无需云服务、无需公网、无需专用服务器

🧩 一、硬件选型:香橙派5(Orange Pi 5)
| 项目 | 规格 |
|---|---|
| 主控 | 瑞芯微 RK3588S(4×Cortex-A76 + 4×Cortex-A55) |
| 内存 | 4GB / 8GB LPDDR4(推荐 4GB 起) |
| 存储 | 板载 eMMC(可选 16/32/64GB) + TF 卡槽 + USB 3.0(接移动硬盘) |
| 网络 | 2.5G 有线网口 + WiFi 6 + 蓝牙 5.0 |
| 视频输出 | HDMI 2.1(4K@60Hz) |
| 功耗 | 待机 ≈ 3–5W,满载 ≈ 10W |
| 价格 | ¥600–900(含电源) |
| 国产化 | ✅ 芯片/板卡/生态均为国产 |
✅ 完美替代树莓派,性能是其 3–5 倍,且供货稳定。

🖥️ 二、操作系统:OpenHarmony 标准系统(Standard System)
为什么选 OpenHarmony?
- 国产自主:华为发起,开放原子开源基金会托管
- 标准系统 = Linux 内核 + POSIX 兼容
- 支持:
- glibc / systemd / Docker(可选)
- 完整文件系统(ext4)
- 网络协议栈(TCP/IP, HTTP, TLS)
- 用户态应用(可运行 Rust
std程序)
- 社区支持:润和、诚迈、拓维等厂商提供香橙派5适配
获取 OpenHarmony 镜像
- 官方渠道:OpenHarmony SIG - Orange Pi
- 第三方适配(推荐):
- Orange Pi 官方 OpenHarmony 镜像(持续更新)
- 或使用 Debian/Ubuntu for Orange Pi 5(若 OpenHarmony 驱动不完善,可临时替代,仍属国产硬件+开源系统)
💡 实操建议:初期可用 Ubuntu 22.04 for Orange Pi 5(由香橙派官方提供),待 OpenHarmony 标准系统对 USB 存储/WiFi 驱动更成熟后无缝迁移。
🦀 三、Rust 应用架构(标准 std 环境)
由于 OpenHarmony 标准系统提供完整 Linux 环境,Rust 可原生编译运行,无需 no_std。
核心依赖(Cargo.toml)
[dependencies]
axum = "0.7"
tokio = { version = "1.0", features = ["full"] }
serde = { version = "1.0", features = ["derive"] }
sqlx = { version = "0.8", features = ["runtime-tokio-rustls", "sqlite", "chrono"] }
image = "0.25"
exif = "0.7"
image-hash = "1.0"
sha2 = "0.10"
tracing = "0.1"
tracing-subscriber = "0.3"
tower-http = { version = "0.5", features = ["fs", "cors", "services"] }
功能模块
| 模块 | 技术实现 |
|---|---|
| Web 服务 | axum + tower-http::services::ServeDir |
| 数据库 | SQLite(单文件 data/family.db) |
| 存储 | 本地路径 /mnt/photos/(挂载 USB 硬盘) |
| EXIF 解析 | exif crate |
| 去重 | SHA256(精确) + image-hash(感知哈希) |
| 质量评分 | Laplacian 方差(模糊检测) |
| 前端 | 静态 HTML + Tailwind CSS + HTMX(无 JS 框架) |
🗃️ 四、数据与存储设计
目录结构
/home/ohos/family-album/
├── bin/ # Rust 二进制
├── data/
│ ├── family.db # SQLite 数据库
│ └── photos/ # 照片存储(按年月分目录)
│ ├── 2024/
│ │ └── 01/
│ │ └── 20240101_123456_abc.jpg
├── frontend/ # Web 静态资源
│ ├── index.html
│ └── assets/
└── config.toml # 配置文件(端口、存储路径等)
挂载 USB 硬盘(持久化存储)
# 查看设备
lsblk# 格式化(首次)
sudo mkfs.ext4 /dev/sda1# 挂载
sudo mkdir -p /mnt/photos
sudo mount /dev/sda1 /mnt/photos# 开机自动挂载(/etc/fstab)
/dev/sda1 /mnt/photos ext4 defaults 0 2
🚀 五、部署流程(香橙派5 + OpenHarmony)
步骤 1:刷写系统
- 下载 Orange Pi 5 OpenHarmony镜像
- 使用 BalenaEtcher 烧录到 TF 卡
- 插卡、接网线、通电
步骤 2:安装 Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
步骤 3:编译并运行
git clone https://gitee.com/yourname/family-album.git
cd family-album
cargo build --release# 首次初始化
./target/release/family-album --init# 启动服务
./target/release/family-album --data-dir /home/ohos/family-album/data --port 8080
步骤 4:配置 systemd 自启
# /etc/systemd/system/family-album.service
[Unit]
Description=Family Album on Orange Pi 5
After=network.target[Service]
User=ohos
WorkingDirectory=/home/ohos/family-album
ExecStart=/home/ohos/family-album/target/release/family-album --data-dir /home/ohos/family-album/data --port 8080
Restart=always
Environment=RUST_LOG=info[Install]
WantedBy=multi-user.target
sudo systemctl enable --now family-album
步骤 5:访问
- 手机/电脑浏览器打开:
http://<香橙派5内网IP>:8080 - 支持“添加到主屏幕”(PWA)
🔐 六、安全与隐私
- 内网隔离:默认仅局域网访问
- 无用户系统(MVP):后续可加 HTTP Basic Auth
- 数据不出家门:所有照片存储在本地 USB 硬盘
- OpenHarmony 安全机制:应用沙箱(未来可封装为 OpenHarmony FA/PA)
📱 七、手机端使用体验
| 平台 | 方式 |
|---|---|
| iOS | Safari 打开 → 分享 → “添加到主屏幕” |
| Android | Chrome 打开 → 菜单 → “安装应用” |
| 电脑 | 直接浏览器访问 |
✅ 无需 App Store/应用市场,零分发成本。
🔄 八、未来演进(OpenHarmony 深度集成)
- 打包为 OpenHarmony 应用(.hap)
- 使用 ArkTS 开发前端
- Rust 作为 Native Engine(通过 NAPI 调用)
- 分布式能力
- 多设备协同:手机拍照 → 自动同步到香橙派5
- AI 增强
- 利用 RK3588S 的 NPU 运行轻量人脸识别(如 InsightFace)
✅ 九、方案优势总结
| 维度 | 优势 |
|---|---|
| 国产化 | 芯片(瑞芯微)+ 板卡(香橙派)+ OS(OpenHarmony)+ 语言(Rust 开源) |
| 隐私安全 | 数据 100% 本地,无云依赖 |
| 低功耗 | 5W 待机,24/7 运行无压力 |
| 零维护 | 单二进制 + SQLite,无数据库运维 |
| 情感价值 | 时间轴 + 故事线 + “一年前的今天”推送 |
| 可扩展 | 未来支持 AI、分布式、大屏播放 |
