无需云服务的家庭相册: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

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 框架)

🗃️ 四、数据与存储设计

目录结构

bash 复制代码
/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 硬盘(持久化存储)

bash 复制代码
# 查看设备
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:刷写系统

步骤 2:安装 Rust

bash 复制代码
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env

步骤 3:编译并运行

bash 复制代码
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 自启

ini 复制代码
# /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
bash 复制代码
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 深度集成)

  1. 打包为 OpenHarmony 应用 (.hap)
    • 使用 ArkTS 开发前端
    • Rust 作为 Native Engine(通过 NAPI 调用)
  2. 分布式能力
    • 多设备协同:手机拍照 → 自动同步到香橙派5
  3. AI 增强
    • 利用 RK3588S 的 NPU 运行轻量人脸识别(如 InsightFace)

✅ 九、方案优势总结

维度 优势
国产化 芯片(瑞芯微)+ 板卡(香橙派)+ OS(OpenHarmony)+ 语言(Rust 开源)
隐私安全 数据 100% 本地,无云依赖
低功耗 5W 待机,24/7 运行无压力
零维护 单二进制 + SQLite,无数据库运维
情感价值 时间轴 + 故事线 + "一年前的今天"推送
可扩展 未来支持 AI、分布式、大屏播放

相关推荐
豐儀麟阁贵4 小时前
4.5数组排序算法
java·开发语言·数据结构·算法·排序算法
Jane-6667775 小时前
C语言——栈与队列
c语言·开发语言
“抚琴”的人5 小时前
C# 取消机制(CancellationTokenSource/CancellationToken)
开发语言·c#·wpf·1024程序员节·取消机制
Halo_tjn5 小时前
Java Map集合
java·开发语言·计算机
lsx2024065 小时前
DOM 创建节点
开发语言
程序猿小蒜6 小时前
基于springboot的车辆管理系统设计与实现
java·数据库·spring boot·后端·spring·oracle
richxu202510016 小时前
C语言<<超全.超重要>>知识点总结
c语言·开发语言
2501_916008896 小时前
用多工具组合把 iOS 混淆做成可复用的工程能力(iOS混淆|IPA加固|无源码混淆|Ipa Guard|Swift Shield)
android·开发语言·ios·小程序·uni-app·iphone·swift
胎粉仔6 小时前
Swift 初阶 —— inout 参数 & 数据独占问题
开发语言·ios·swift·1024程序员节