开源照片管理系统PhotoPrism的容器化部署与远程管理配置
文章目录
- 前言
- 1.关于PhotoPrism
- 2.本地部署PhotoPrism
- 3.PhotoPrism简单使用
- 4. 安装内网穿透
- 5.配置PhotoPrism公网地址
- 6. 配置固定公网地址
前言
你是不是用手机拍照片的时候无所谓拍了多少张,但在整理的时候却要占用超多时间?别怕,今天给大家介绍一款超级神器——PhotoPrism!这款由前 Google 工程师 Michael Mayer 打造的开源项目,不仅能帮你自动分类和标记照片,还能让你的照片展示得如同专业画廊一般。无论是普通的 JPEG 还是专业的 RAW 格式,它都能轻松搞定。接下来,就让我们一起用 Docker 快速部署 PhotoPrism,并结合 Cpolar 内网穿透工具,实现随时随地远程管理你的珍贵回忆吧!
1.关于PhotoPrism
- 智能照片组织与搜索:PhotoPrism利用AI技术,能自动识别照片中的人物、物体、场景等内容。比如,你想找一张去海边度假的照片,只需输入“海滩”,瞬间就能筛选出所有相关照片!再也不用在无数张照片里大海捞针了。
- 全面的文件格式支持:无论是JPG、PNG这些常见格式,还是RAW、Live Photos,甚至是视频文件,PhotoPrism都能一网打尽。这下,不管你拍的是什么照片,它都能帮你管理得井井有条。
- 面部识别:内置强大的面部识别功能,不仅能自动识别照片中的人脸,还能让你手动标记人名,方便按人物浏览照片。再也不怕照片里的人认不出了!
- 地理信息展示:如果你是个旅行达人,PhotoPrism的地理信息功能绝对会让你爱不释手。它能自动提取照片中的GPS信息,并在高清世界地图上展示出来,带你重温每一次旅行的美好记忆。
- WebDAV同步:提供了WebDAV同步功能,让你能与其他设备双向同步照片,轻松实现多设备间的照片管理。再也不用担心手机、电脑上的照片不同步了!
2.本地部署PhotoPrism
本例使用Docker Compose部署,如果没有安装Docker,可以查看这篇教程进行安装:《Docker安装教程——Linux、Windows、MacOS》
打开终端执行下方命令一键安装 :
sudo docker run -d \--name photoprism \--security-opt seccomp=unconfined \--security-opt apparmor=unconfined \-p 2342:2342 \-e PHOTOPRISM_UPLOAD_NSFW="true" \-e PHOTOPRISM_ADMIN_PASSWORD="insecure" \-v /photoprism/storage \-v ~/Pictures:/photoprism/originals \photoprism/photoprism:latest
打开浏览器输入:localhost:2342,就能看到PhotoPrism的登录界面了。
3.PhotoPrism简单使用
第一次使用时需要设置管理员账号和密码。
初始账号是:admin,密码是:insecure,您后期可以在帐户设置页面上更改它。
登录好以后就可以进入到PhotoPrism界面来使用了。
左下角头像设置可以设置为简体中文,使用更方便。
上传照片后PhotoPrism会自行分类
4. 安装内网穿透
不过我们目前只能在本地局域网内使用电脑等设备访问刚刚使用docker部署的使用PhotoPrism。使用PhotoPrism + Cpolar的组合可以完美解决这个问题,安装一个cpolar内网穿透工具就能轻松实现远程访问内网主机中部署的服务了,接下来介绍一下如何安装cpolar内网穿透。
下面是安装cpolar步骤:
Cpolar官网地址: https://www.cpolar.com
使用一键脚本安装命令
sudo curl https://get.cpolar.sh | sh
安装完成后,执行下方命令查看cpolar服务状态:(如图所示running即为正常启动)
sudo systemctl status cpolar
Cpolar安装和成功启动服务后,在浏览器上输入ubuntu主机IP加9200端口即:【http://localhost:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可:
5.配置PhotoPrism公网地址
登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理——创建隧道:
- 隧道名称:可自定义,本例使用了:PhotoPrism 注意不要与已有的隧道名称重复
- 协议:http
- 本地地址:2342
- 域名类型:随机域名
- 地区:选择China Top
创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了两个公网地址,接下来就可以在其他电脑(异地)上,使用任意一个地址在浏览器中访问即可。
如下图所示,成功实现使用公网地址异地远程访问本地部署的PhotoPrism
小结
为了方便演示,我们在上边的操作过程中使用cpolar生成的HTTP公网地址隧道,其公网地址是随机生成的。这种随机地址的优势在于建立速度快,可以立即使用。然而,它的缺点是网址是随机生成,这个地址在24小时内会发生随机变化,更适合于临时使用。
如果有长期使用PhotoPrism,或者异地访问与使用其他本地部署的服务的需求,但又不想每天重新配置公网地址,还想让公网地址好看又好记并体验更多功能与更快的带宽,那我推荐大家选择使用固定的二级子域名方式来配置公网地址。
6. 配置固定公网地址
由于以上使用cpolar所创建的隧道使用的是随机公网地址,24小时内会随机变化,不利于长期远程访问。因此我们可以为其配置二级子域名,该地址为固定地址,不会随机变化。
点击左侧的预留,选择保留二级子域名,地区选择China TOP,然后设置一个二级子域名名称,填写备注信息,点击保留。
保留成功后复制保留的二级子域名地址:PhotoPrism
登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道PhotoPrism,点击右侧的编辑
。
修改隧道信息,将保留成功的二级子域名配置到隧道中
- 域名类型:选择二级子域名
- Sub Domain:填写保留成功的二级子域名
- 地区: China TOP
点击更新
现在点击在线隧道列表可以查看到公网地址已经发生变化了,此时一个永久不会变化的网址就设置好了。
我们复制下来打开浏览器粘贴,现在我们使用固定的公网地址访问PhotoPrism可以看到访问成功。
希望今天分享的这款神器——PhotoPrism能让你的照片管理变得轻松又愉快。如果这篇文章帮到了你,别忘了给我点个赞、分享给更多小伙伴哦!毕竟,好东西就是要大家一起享受嘛!谁不想让自己的照片库看起来像专业画廊一样呢?快来试试吧,你的相册从此将告别杂乱无章,迎接井然有序的新时代!
相关文章:
开源照片管理系统PhotoPrism的容器化部署与远程管理配置
文章目录 前言1.关于PhotoPrism2.本地部署PhotoPrism3.PhotoPrism简单使用4. 安装内网穿透5.配置PhotoPrism公网地址6. 配置固定公网地址 前言 你是不是用手机拍照片的时候无所谓拍了多少张,但在整理的时候却要占用超多时间?别怕,今天给大家…...
macOS Python 环境配置指南
1. 检查现有 Python 环境 python3 --version # 检查 Python 3 版本 pip3 --version # 检查 pip 版本 2. 安装 pyenv(Python 版本管理工具) # 使用 Homebrew 安装 pyenvbrew install pyenv# 配置 pyenv 环境变量(添加到 ~/.zshrc&#…...
如何阅读、学习 Git 核心源代码 ?
学习 Git 核心源代码是一个深入理解版本控制系统底层原理的绝佳方式。以下是分阶段的系统性建议,结合了实践经验和学习路径设计: 一、前置知识储备 C语言进阶 重点掌握指针操作(尤其是二级指针和函数指针)结构体嵌套与内存对齐…...
学习黑客 MAC 地址深入了解
在江湖之中,每位少侠既有“门派”加身,也需持有“令牌”通行。MAC地址便是我被师门铁订在骨血里的“先天武功心法”,铸于出厂之时,终身不变,只有破阵高手才能暗度陈仓才能改写;而IP地址则是我行走江湖的“后…...
长事务:数据库中的“隐形炸弹“——金仓数据库运维避坑指南
引言:凌晨三点的告警 "张工!生产库又告警了!"凌晨三点的电话铃声总是格外刺耳。运维团队发现数据库频繁进入单用户模式,排查发现某核心表的年龄值(Age)已突破20亿大关。经过一夜奋战,…...
WTK6900C-48L:离线语音芯片重构玩具DNA,从“按键操控”到“声控陪伴”的交互跃迁
一:开发背景 随着消费升级和AI技术进步,传统玩具的机械式互动已难以满足市场需求。语音控制芯片的引入使玩具实现了从被动玩耍到智能交互的跨越式发展。通过集成高性价比的语音识别芯片,现代智能玩具不仅能精准响应儿童指令,还能实…...
一文读懂Python之requests模块(36)
一、requests模块简介 requests模块是python中原生的一款基于网络请求的模块,功能强大,简单便捷且高效 ,该模块可以模拟浏览器发送请求,主要包括指定url、发起请求、获取响应数据和持久化存储,包括 GET、POST、PUT、…...
Java 异常
Java 异常的体系结构 java.lang.Throwable ├── Error(严重错误,程序无法处理) │ ├── OutOfMemoryError │ ├── StackOverflowError │ └── ... └── Exception(程序可以处理的异常)├── Check…...
智能外呼机器人的核心优势
随着人工智能技术的快速发展,智能外呼机器人已成为企业降本增效的重要工具。其通过整合语音识别(ASR)、自然语言处理(NLP)、语音合成(TTS)等技术,不仅替代了大量重复性人工劳动&…...
n8n - 开放灵活的智能自动化工作流平台
n8n - 开放灵活的智能自动化工作流平台 在当今数字化转型的大潮中,自动化已成为众多企业提升效率、优化流程的关键手段。而在众多自动化工具中,n8n以其开放灵活且强大的功能脱颖而出,成为技术团队的可靠选择。今天,我们将深入了解n8n这个开源自动化工作流平台,探索其广泛…...
window 显示驱动开发-处理内存段(二)
KMD 不需要在其内存段中指定 GPU 可用的所有视频内存资源。 但是,KMD 必须指定 VidMm 在系统上运行的所有进程中管理的所有内存资源。 例如: 实现固定函数管道的顶点着色器微代码可以驻留在 GPU 地址空间中,但在 VidMm 管理的内存之外&#x…...
RSS 2025|斯坦福提出「统一视频行动模型UVA」:实现机器人高精度动作推理
导读 在机器人领域,让机器人像人类一样理解视觉信息并做出精准行动,一直是科研人员努力的方向。今天,我们要探讨的统一视频行动模型(Unified Video Action Model,UVA),就像给机器人装上了一个“…...
代码随想录算法训练营第60期第三十天打卡
大家好,今天我们要走进一个全新的章节,这一章叫做贪心算法,前面我们讲的是回溯算法,那究竟什么是贪心算法呢?我们一起走进今天的内容。 第一部分贪心的理论基础 其实大家看这个名字估计也会有一定了解,贪心…...
腾讯云:数字世界的“量子熔炉”与硅基文明引擎
一、算力拓扑学:重新定义空间的计算密度 腾讯云的算力网络正在突破经典物理限制,其分布式架构通过“量子化”资源调度实现超维计算: 虚拟化跃迁:基于KVM的轻量级虚拟化技术,将单台物理服务器切割为百…...
Python Cookbook-7.7 通过 shelve 修改对象
任务 你正在使用标准库模块shelve。你用shelve处理过的一些值是易变的对象(mutableobjects),而且你需要修改这些对象。 解决方案 shelve 模块提供了一种持久的字典——在强大的关系型数据库和简洁的 marshal、pickledbm 以及类似的文件格式之间,它有着…...
Baklib构建AI就绪知识管理体系
Baklib构建AI就绪知识体系 在数字化转型加速的背景下,Baklib通过其AI就绪知识管理体系,为企业提供了从数据整合到智能应用的完整解决方案。该平台以知识中台为核心架构,依托自然语言处理与机器学习技术,对分散在企业文档系统、协…...
嵌入式开发学习日志Day16
一、指针函数 函数的返回值为指针的函数; 注意:不能返回局部变量的地址; 可以返回静态变量的地址; 可以返回全局变量的地址; 1、动态内存分配 void *malloc(size_t size); //申请空间的函数 void free(*ptr); …...
SLAM文献之KernelGPA: A Globally Optimal Solution to Deformable SLAM in Closed-form
KernelGPA: A Globally Optimal Solution to Deformable SLAM in Closed-form 提出了一种在非刚性变形环境下求解 SLAM 问题的闭式全局最优解方法。下面是对其算法原理和核心推导过程的系统解析。 一、算法背景与目标 问题描述: 传统 SLAM 主要假设环境为刚性&am…...
C++之“继承”
继续开始关于C相关的内容。C作为面向对象的语言,有三大特性:封装,继承,多态。 这篇文章我们开始学习:继承。 一、继承的概念和定义 1. 继承的概念 什么是继承呢? 字面意思理解来看:继承就是…...
java集成telegram机器人
java集成telegram机器人 最近项目需要集成telegram机器人,来实现消息推送功能,以此记录下。 1.创建telegram账号 没有账号的可以去某宝上买一个,千万不要用自己的手机号86去注册,你懂得。 2. 打开BotFather对话创建机器人获取…...
从代码学习深度学习 - 单发多框检测(SSD)PyTorch版
文章目录 前言工具函数数据处理工具 (`utils_for_data.py`)训练工具 (`utils_for_train.py`)检测相关工具 (`utils_for_detection.py`)可视化工具 (`utils_for_huitu.py`)模型类别预测层边界框预测层连接多尺度预测高和宽减半块基础网络块完整的模型训练模型读取数据集和初始化…...
因子分析——数学原理及R语言代码
这里写自定义目录标题 因子分析参数估计方法主成分法主因子法 因子旋转 代码实现Reference 因子分析 FactorAnalysis的目的是从多个高度相关的观测变量中提取出少数几个LatentFactor,这些因子代表了变量背后的共通结构,从而实现降维并提升可解释性。 假…...
CSS3 过渡与动画
在现代网页设计中,平滑的过渡和生动的动画效果已成为提升用户体验不可或缺的元素。CSS3 为我们提供了强大的 transition 和 animation 属性,让开发者能够轻松实现各种视觉效果。本文将深入探讨这两大功能的特性和应用场景。 一、CSS3 过渡(T…...
【JAVA】【重试间隔】多线程中两种常见的重试间隔
一、前言 报!! 小南啊,今日有个小任务交给你去办。就是程序中有个数据处理,总是会出错,不知道是什么原因,你去处理一下! 二、主题 围绕数据处理问题去看,从中发现,是因为…...
在现代Web应用中集成 PDF.js (pdfjs-dist 5.2 ESM): 通过 jsdelivr 实现动态加载与批注功能的思考
PDF 文档在现代 Web 应用中越来越常见,无论是作为文档预览、报告展示还是在线编辑的载体。Mozilla 的 PDF.js 是一个功能强大的 JavaScript 库,它使得在浏览器端渲染和显示 PDF 文件成为可能,无需依赖原生插件。 本文将深入探讨如何在你的项…...
android ViewModel liveData无法监听之多线程下activityViewModels不安全
我们一般的,会遇到liveData无法监听到结果,可能存在主要2种可能: liveData没有正确注册;liveData连续多次设置值,中间的值,会被丢弃,但最后一次是能监听到的。 但是我们容易忽略一种case&…...
【即插即用涨点模块】DSConv动态蛇形卷积:自适应聚焦细长弯曲的局部结构特征,助力分割高效提点【附源码+注释】
《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...
守护数字家园:个人博客安全防护指南
前言 在之前的文章《WordPress个人博客搭建(一)》《WordPress个人博客搭建(二)》《WordPress个人博客搭建(三)》中,我们已经在非凡云云服务器上,借助1Panel搭建起属于自己的数字庭院…...
课外活动:简单了解原生测试框架Unittest前置后置的逻辑
简单了解原生测试框架Unittest前置后置的逻辑 一、测试框架执行顺序解析 1.1 基础执行流程 import unittestclass A(unittest.TestCase):classmethoddef setUpClass(cls):print(f"【CLASS START】{cls.__name__}")def setUp(self):print(f"【TEST START】{se…...
带你玩转 Flink TumblingWindow:从理论到代码的深度探索
0.前言 在深入探讨 TumblingWindow 之前,我们先来了解一下流处理或流计算中“窗口”的基本概念。在数据流中,源会持续不断地生成数据,因此计算最终值是不可行的。 在大多数用例中,为了获取有意义的信息,最好使用两种方…...
Java线程安全问题深度解析与解决方案
一、线程安全问题的本质 并发编程的核心挑战:当多个线程同时访问共享资源时,由于操作系统的抢占式调度特性,可能导致不可预期的结果。这种因非原子操作和竞态条件引发的数据不一致问题,称为线程安全问题。 二、经典线程安全问题案…...
python实现的音乐播放器
python实现的音乐播放器 音乐播放器,原来写过一个简陋的例子,可见 https://blog.csdn.net/cnds123/article/details/137874107 那个不能拖动播放进度条上的滑块到新的位置播放。下面介绍的可以拖动播放进度条上的滑块到新的位置播放。 简单实用的音乐播放器 这个简单实用的…...
SMT贴片工艺核心优化与生产实践
内容概要 作为现代电子制造的核心环节,SMT贴片工艺的优化直接决定了产品可靠性与生产效率。本文系统性梳理工艺链中的关键控制点,从锡膏印刷精度到回流焊温度曲线,再到AOI检测技术升级,形成覆盖全流程的优化框架。针对行业普遍存…...
趣味编程:爱心
概述:五月十一号就是母亲节了,本篇博客主要是为母亲所写,这是属于程序员的浪漫,这篇博客是对母亲这么多年无微不至爱的情书。 目录 1. 效果展示 2. 源码展示 3. 代码逻辑详解 3.1 头文件与常量定义 3.2 心形曲线参数方程 3.…...
C语言—指针2
1. const 修饰变量 1.1 const修饰变量 变量被const修饰时,变量此时为常变量,本质为常量,语法上不可被修改,但是如果此时需要修改变量值,可以通过指针的方式修改。 虽然此时通过指针的方式确实修改了变量的值ÿ…...
66、微服务保姆教程(九)微服务的高可用性
微服务的高可用性与扩展 服务的高可用性 集群搭建与负载均衡。服务的故障容错与自愈。分布式事务与一致性 分布式事务的挑战与解决方案。使用 RocketMQ 实现分布式事务。微服务的监控与可观测性 metrics 和日志的收集与分析。sentinel 的监控功能。容器化与云原生 将微服务部署…...
主场景 工具栏 植物卡牌的渲染
前置知识:使用easyx图形库 1.IMAGE内存变量存储的是一张位图(图像),存储了像素数据(颜色,尺寸等) 2.loadimage(&变量名,"加载的文件路径")表示从文件中加载图像到变量中 3. saveimage("文件路径", &变…...
超详细!RxSwift 中的 BehaviorRelay 使用教程(含原理 + 示例 + 实战)
目录 前言 1.什么是 BehaviorRelay 2.基本使用方式 3.BehaviorRelay的常用API 4.BehaviorRelay 和其它类型的对比 5.BehaviorRelay的使用场景 1.绑定UITableView 2.MVVM 场景下使用 BehaviorRelay 6.使用注意事项以及建议 1.注意事项 2.使用建议总结 7.推荐阅读 前…...
【软件测试学习day7】Junit5
Junit 是单元测试框架,本期掌握 Junit5 的基础用法。 1. 注解 首先引入 Junit 依赖: <dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.9.1</version…...
前端实战中的单例模式:以医疗药敏管理为例
目录 一、什么是单例模式?1. 状态共享性 —— 数据唯一,任意访问,任意修改2. 生命周期控制性 —— 自己掌控何时创建、何时销毁 二、实战分析:医疗药敏管理系统中的单例应用三、其他场景示例单例实现:ConfigManager.ts…...
如何在 Logback 日志框架中加入链路 ID
在 Logback 日志框架中加入链路 ID,能有效将同一条链路的日志串联起来,便于追踪和排查问题。 1. 生成和管理链路 ID 要保证在整个请求链路里都能获取到链路 ID,可借助 ThreadLocal 来实现。以下是一个简单的工具类示例: import…...
晶振:智能设备的“心跳”如何支撑5G与航天
在现代科技飞速发展的时代,智能设备已深度融入我们生活的方方面面,而晶振,作为智能设备的“心跳”,正默默发挥着不可替代的关键作用。无论是翱翔太空的神舟飞船,还是人们手中须臾不离的智能手机,亦或是推动…...
【HarmonyOS 5】App Linking 应用间跳转详解
目录 什么是 App Linking 使用场景 工作原理 如何开发 1.开通 App Linking 2.确定域名 3.服务端部署 applinking.json 文件 4.AGC绑定域名 5.项目配置 6.组装聚合链接 7.解析聚合链接中的参数 其他 如何获取应用ID 什么是 App Linking App Linking 是一款创建跨…...
neo4j官方示例
目录 一、准备数据 1.执行查看结果 二、操作 1.find 单个节点 2.同上,已某个属性去查询 3. 指定查询个数 4.条件查询 5.查询某个人出演的电影汇总 6.查询tom出演的电影中,还有其他演员的信息。 7.查询跟电影(Cloud Atlas)有关的演员࿰…...
基于vueflow可拖拽元素的示例(基于官网示例的单文件示例)
效果图 代码 <template><div style"width: 100%;height: calc(100vh - 84px)"><VueFlow :nodes"nodes" :edges"edges" drop"onDrop" dragover"onDragOver" dragleave"onDragLeave"><div cl…...
minio单点登录与集成(免密)
需求:系统A里,需要实现与MINIO单点登录集成,也就是说,登录了系统A,在访问MINIO时不需要再输入用户密码就可以直接访问。 具体场景如下: 在系统A的一个页面里,配置一个按钮链接,点击…...
深入理解 Docker 网络原理:构建高效、灵活的容器网络
在现代软件开发中,Docker 已经成为了容器化技术的代名词,广泛应用于开发、测试和生产环境。Docker 使得开发者能够将应用及其依赖打包成一个轻量级的容器,并通过 Docker 容器化技术来实现高效的部署与管理。 然而,在日常使用 Dock…...
Hutool中的Pair类详解
1. Pair类概述 Hutool工具库中的Pair类是一个简单的键值对数据结构,用于存储两个相关联的对象。它类似于Map的Entry,但更加轻量级,适用于需要临时存储两个相关联数据的场景。 2. Pair类的主要特点 简单轻量:不依赖复杂的数据结…...
没有Mac,我是怎么上传IPA到App Store的?
没有Mac,我是怎么上传IPA到App Store的? 最近赶一个小项目上线,写的是一个Flutter做的App。安卓版本一晚上搞定,iOS上架却差点把人整崩。 不是我技术菜,是实在太麻烦了。最关键的,是我这台Windows笔电根本…...
RISC-V hardfault分析工具,RTTHREAD-RVBACKTRACE
RV BACKTRACE 简介 本文主要讲述RV BACKTRACE 的内部主要原理 没有接触过rvbacktrace可以看下面两篇文章,理解一下如何使用RVBACKTRACE RVBacktrace RISC-V极简栈回溯组件:https://club.rt-thread.org/ask/article/64bfe06feb7b3e29.html RVBacktra…...