Docker快速部署高效照片管理系统LibrePhotos搭建私有云相册

文章目录

    • 前言
    • 1.关于LibrePhotos
    • 2.本地部署LibrePhotos
    • 3.LibrePhotos简单使用
    • 4. 安装内网穿透
    • 5.配置LibrePhotos公网地址
    • 6. 配置固定公网地址

前言

想象一下这样的场景:你有一大堆珍贵的回忆照片,但又不想使用各种网盘来管理。怎么办?别担心!我们有解决方案——LibrePhotos。这是一个完全自托管、开源的照片管理和共享平台,功能强大不输Google Photos,最重要的是它能够保护你的隐私,并且让你拥有数据的绝对控制权。

你可能会问:“那如果我没有公网IP或者域名呢?”没问题!这里就要介绍另一个神器——cpolar内网穿透工具。通过这个小工具,你可以轻松实现内外网络互通,无论你在世界的哪个角落都能随时查看和管理照片库。

接下来的内容将带你一步步了解如何在本地Linux系统上部署LibrePhotos,并结合cpolar完成整个过程。如果你对数据隐私有较高的要求,又想拥有一个高效、便捷的照片管理系统,那么这篇文章绝对值得你花时间读一读!

img

1.关于LibrePhotos

LibrePhotos是一个自托管的开源照片管理与共享平台,其功能媲美Google Photos,但更加注重用户的隐私保护,并赋予用户对自己数据的完全控制权。

更多功能特点如下:

  • 开放自由: LibrePhotos基于开源模式,提供免费服务。这意味着您可以根据自身需求灵活调整和优化软件。
  • 自主部署: 用户可以选择在自己的服务器上安装LibrePhotos,确保了照片和视频的安全存储,杜绝隐私泄露的可能性。
  • 强大功能: 通过集成多种先进技术工具(如ImageMagick、FFmpeg、ExifTool等),LibrePhotos不仅支持高质量的照片与视频处理,还具备高效的数据解析能力。此外,平台提供便捷的上传方式、智能整理分类以及直观友好的操作界面,极大提升了用户体验。
  • 智能化管理: 利用face_recognition库进行精准的人脸识别,并结合scikit-learn和hdbscan算法实现照片自动归类;借助im2txt和places365技术对图像内容及拍摄地点进行智能分析,优化搜索功能。
  • 安全可靠: 实现了数据的本地化存储,防止敏感信息外泄。同时,平台配备了严格的安全措施,包括但不限于强大的用户认证机制,确保只有合法用户才能访问相应的资源库。
  • 灵活共享: 用户可以轻松地与家人、朋友或团队成员分享自己的照片集,并可自定义不同的访问权限设置,满足多样化的需求。

适用人群

  • 个人爱好者: 对于那些珍视隐私且希望自行管理数字资产的个体而言,LibrePhotos无疑是一个完美的解决方案。
  • 家庭用户: 家庭成员可以通过共同维护一个照片库来记录并分享生活中的美好瞬间。
  • 专业团队: 摄影师、设计师及小型企业等专业人士或组织亦能利用此平台高效管理和展示其作品集。

2.本地部署LibrePhotos

本例使用Docker进行部署,如果没有安装Docker,可以查看这篇教程进行安装:《Docker安装教程——Linux、Windows、MacOS》

首先下载部署文件

git clone https://github.com/LibrePhotos/librephotos-docker.git

image-20241202145456097

进入到此文件内

cd librephotos-docker
cp librephotos.env .env

image-20241202145528020

修改配置文件

nano .env

image-20241202145549479

修改里面的配置,如果没有需要自行添加该行配置

timeZone=Asia/Shanghai // 时区,需要自行添加该行配置!
userName=chen // 管理员用户名
userPass=chen // 管理员密码
adminEmail=chenyuge1130@sina.com // 管理员邮箱
shhhhKey=123456 // 随机密钥
httpPort=3000 // 暴露的服务端口
dbName=librephotos // 数据库名
dbUser=docker // 数据库用户
dbPass=123456 // 数据库用户密码
gunniWorkers=4 // 工人数量,每个工人预计消耗800MB RAM
HEAVYWEIGHT_PROCESS=4 // 多线程扫描,每个工人预计消耗800MB RAM

61bcf312931b75af5d8831b69365143

按ctrl+x保存退出后输入以下命令运行容器

sudo docker compose -f docker-compose.yml up -d

image-20241202152002003

服务启动后,在浏览器中访问localhost:3000即可。

image-20241202154632797

3.LibrePhotos简单使用

登录之后点击Data路径即可

image-20241202175229063

右上角点击第三个可以修改头像名字

image-20241202175336028

可以选择语言

image-20241202175400471

点击管理面板选择允许上传

image-20241202175445350

我们就可以上传照片了

image-20241202175545675

4. 安装内网穿透

不过我们目前只能在本地局域网内使用手机电脑等设备访问刚刚使用docker部署的使用LibrePhotos。假设你是一名摄影师,经常需要在外拍摄。你希望有一个安全、可靠的地方来存储和管理自己的照片,并且能够随时随地访问这些照片进行编辑或分享。使用LibrePhotos + Cpolar的组合可以完美解决这个问题,安装一个cpolar内网穿透工具就能轻松实现远程访问内网主机中部署的服务了,接下来介绍一下如何安装cpolar内网穿透。

下面是安装cpolar步骤:

Cpolar官网地址: https://www.cpolar.com

使用一键脚本安装命令

sudo curl https://get.cpolar.sh | sh

img

安装完成后,执行下方命令查看cpolar服务状态:(如图所示running即为正常启动)

sudo systemctl status cpolar

img

Cpolar安装和成功启动服务后,在浏览器上输入ubuntu主机IP加9200端口即:【http://localhost:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可:

image-20240801133735424

5.配置LibrePhotos公网地址

登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理——创建隧道:

  • 隧道名称:可自定义,本例使用了: LibrePhotos 注意不要与已有的隧道名称重复
  • 协议:http
  • 本地地址:3000
  • 域名类型:随机域名
  • 地区:选择China Top

image-20241203113437295

创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了两个公网地址,接下来就可以在其他电脑(异地)上,使用任意一个地址在浏览器中访问即可。

image-20241203113542118

如下图所示,成功实现使用公网地址异地远程访问本地部署的LibrePhotos。

image-20241203114701527

使用账号登录即可正常使用了:

image-20241203114743976

小结

为了方便演示,我们在上边的操作过程中使用cpolar生成的HTTP公网地址隧道,其公网地址是随机生成的。这种随机地址的优势在于建立速度快,可以立即使用。然而,它的缺点是网址是随机生成,这个地址在24小时内会发生随机变化,更适合于临时使用。

如果有长期使用LibrePhotos远程使用照片管理器,或者异地访问与使用其他本地部署的服务的需求,但又不想每天重新配置公网地址,还想让公网地址好看又好记并体验更多功能与更快的带宽,那我推荐大家选择使用固定的二级子域名方式来配置公网地址。

6. 配置固定公网地址

由于以上使用cpolar所创建的隧道使用的是随机公网地址,24小时内会随机变化,不利于长期远程访问。因此我们可以为其配置二级子域名,该地址为固定地址,不会随机变化。

点击左侧的预留,选择保留二级子域名,地区选择China TOP,然后设置一个二级子域名名称,填写备注信息,点击保留。

image-20241203115420298

保留成功后复制保留的二级子域名地址:LibrePhotos

登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道LibrePhotos,点击右侧的编辑

image-20241203115505430

修改隧道信息,将保留成功的二级子域名配置到隧道中

  • 域名类型:选择二级子域名
  • Sub Domain:填写保留成功的二级子域名
  • 地区: China TOP

点击更新

image-20241203115532463

现在一个永久不会变化的网址就设置好了。

image-20241203115629065

我们复制下来打开浏览器粘贴,现在我们使用固定的公网地址访问LibrePhotos可以看到访问成功。image-20241203115728741

可以看到登录后正常访问。

image-20241203115839828

通过今天的分享,相信你也已经掌握了如何利用Docker和cpolar在本地Linux系统上部署LibrePhotos的方法了。这样一来,不仅能够保护你的照片数据隐私,还能随时随地进行管理与共享。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/7735.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源免费】基于Vue和SpringBoot的医院资源管理系统(附论文)

本文项目编号 T 161 ,文末自助获取源码 \color{red}{T161,文末自助获取源码} T161,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

被占用的电脑文件推沟里

在使用电脑的过程中,你是否遇到过这种情况:想删除、移动或重命名一个文件,结果系统无情地告诉你——“文件被占用,无法操作!”这时候,IObit Unlocker 就该闪亮登场了!这款免费的文件解锁工具&am…

Coze插件开发之基于已有服务创建并上架到扣子商店

Coze插件开发之基于已有服务创建并上架到扣子商店 在应用开发中,需要调用各种插件,以快速进行开发。但有时需要调用的插件在扣子商店里没有,那怎么办呢? 今天就来带大家快速基于已有服务创建一个新的插件 简单来讲,就是…

微信小程序-点餐(美食屋)02开发实践

目录 概要 整体架构流程 (一)用户注册与登录 (二)菜品浏览与点餐 (三)订单管理 (四)后台管理 部分代码展示 1.index.wxml 2.list.wxml 3.checkout.wxml 4.detail.wxml 小结优点 概要…

[Dialog屏幕开发] 屏幕绘制(下拉菜单)

阅读该篇文章之前,可先阅读下述资料 [Dialog屏幕开发] Table Control 列数据操作https://blog.csdn.net/Hudas/article/details/145343731?spm1001.2014.3001.5501上篇文章我们的屏幕已实现了如下功能 我们已经设置了按钮对Table Control 列的数据进行了操作 接下…

类与对象(下)

再谈构造函数 构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值 class Date { public: Date(int year, int month, int day){_year year;_month month;_day day;} private: int _year; int _month; int _d…

【机器学习】深入探索SVM:支持向量机的原理与应用

目录 🍔 SVM引入 1.1什么是SVM? 1.2支持向量机分类 1.3 线性可分、线性和非线性的区分 🍔 小结 学习目标 知道SVM的概念 🍔 SVM引入 1.1什么是SVM? 看一个故事,故事是这样子的: 在很久以前的情人节&#xf…

Dev-C++分辨率低-解决办法

目录 【工具】Dev-C分辨率低-解决办法问题背景完整操作指南第一步:打开属性设置 【工具】Dev-C分辨率低-解决办法 问题背景 Dev-C因版本老旧(长期未更新),在高分辨率显示器上存在界面模糊问题。通过修改Windows兼容性设置可优化…

[VSCode] vscode下载安装及安装中文插件详解(附下载链接)

VSCode 是一款由微软开发且跨平台的免费源代码编辑器;该软件支持语法高亮、代码自动补全、代码重构、查看定义功能,并且内置了命令行工具和Git版本控制系统。 下载链接:https://pan.quark.cn/s/3a90aef4b645 提取码:NFy5 通过上面…

javascript-es6 (一)

作用域(scope) 规定了变量能够被访问的“范围”,离开了这个“范围”变量便不能被访问 局部作用域 函数作用域: 在函数内部声明的变量只能在函数内部被访问,外部无法直接访问 function getSum(){ //函数内部是函数作用…

c语言中的数组(上)

数组的概念 数组是⼀组相同类型元素的集合; 数组中存放的是1个或者多个数据,但是数组元素个数不能为0。 数组中存放的多个数据,类型是相同的。 数组分为⼀维数组和多维数组,多维数组⼀般⽐较多⻅的是⼆维数组。 数组创建 在C语言…

C#,入门教程(05)——Visual Studio 2022源程序(源代码)自动排版的功能动画图示

上一篇: C#,入门教程(04)——Visual Studio 2022 数据编程实例:随机数与组合https://blog.csdn.net/beijinghorn/article/details/123533838https://blog.csdn.net/beijinghorn/article/details/123533838 新来的徒弟们交上来的C#代码&#…

用Python和PyQt5打造一个股票涨幅统计工具

在当今的金融市场中,股票数据的实时获取和分析是投资者和金融从业者的核心需求之一。无论是个人投资者还是专业机构,都需要一个高效的工具来帮助他们快速获取股票数据并进行分析。本文将带你一步步用Python和PyQt5打造一个股票涨幅统计工具,不…

为什么IDEA提示不推荐@Autowired❓️如果使用@Resource呢❓️

前言 在使用 Spring 框架时,依赖注入(DI)是一个非常重要的概念。通过注解,我们可以方便地将类的实例注入到其他类中,提升开发效率。Autowired又是被大家最为熟知的方式,但很多开发者在使用 IntelliJ IDEA …

C# OpenCV机器视觉:利用CNN实现快速模板匹配

在一个阳光灿烂的周末,阿强正瘫在沙发上,百无聊赖地换着电视频道。突然,一则新闻吸引了他的注意:某博物馆里一幅珍贵的古画离奇失踪,警方怀疑是被一伙狡猾的盗贼偷走了,现场只留下一些模糊不清的监控画面&a…

iOS 集成ffmpeg

前言 本来打算用flutter去实现一个ffmpeg的项目的,不过仔细分析了一下,我后期需要集成OpenGL ES做视频渲染处理,OpenGL ES的使用目前在flutter上面还不是很成熟,所以最后还是选择用原生来开发 ffmpeg集成到iOS工程 iOS对于ffmp…

tmux 介绍与使用

tmux有什么用 1.关闭终端时,在终端运行着的程序不会一起被关闭。 比如,我在终端命令行执行htop。当我关闭这个终端时,htop进程也随着这个终端的关闭而结束。我在终端运行着一个程序,它应该一直运行着。我一不小心把终端关闭了&a…

独立开发者常见开发的应用有哪些

1. 工具类应用 工具类应用旨在解决用户的特定问题或提高效率,通常功能简单,但实用性强。这类应用开发周期较短,适合独立开发者。 常见例子: 生产力工具:待办事项管理(如 Todoist)、日历同步工…

Linux Futex学习笔记

Futex 简介 概述: Futex(Fast Userspace Mutex)是linux的一种特有机制,设计目标是避免传统的线程同步原语(如mutex、条件变量等)在用户空间和内核空间之间频繁的上下文切换。Futex允许在用户空间处理锁定和等待的操作&#xff0…

Neural networks 神经网络

发展时间线 基础概念 多层神经网络结构 神经网络中一个网络层的数学表达 TensorFlow实践 创建网络层 神经网络的创建、训练与推理 推理 推理可以理解为执行一次前向传播 前向传播 前向传播直观数学表达 前向传播直观数学表达的Python实现 前向传播向量化实现 相关数学知识…