开源照片管理服务LibrePhotos

本文是为了解决网友
赵云遇到的问题,顺便折腾的。虽然软件跑起来了,但是他遇到的问题,超出了老苏的认知。当然最终问题还是得到了解决,不过与LibrePhotos无关;
什么是 LibrePhotos ?
LibrePhotos是一个自托管的开源照片管理和共享平台。它旨在提供一个类似于商业化照片服务的功能,但用户可以完全控制自己的数据,并在自己的服务器上存储照片。
什么是 UhuruPhotos ?
UhuruPhotos是一款功能齐全,使用Jetpack Compose和最新的android技术编写的LibrePhotos android客户端。它借鉴了Google Photos的很多想法,旨在成为功能齐全的相册替代品,包括离线支持、备份和同步等功能。

安装
在群晖上以 Docker 方式安装。
docker-compose.yml
将下面的内容保存为 docker-compose.yml 文件
源文件来自:https://github.com/LibrePhotos/librephotos-docker/blob/main/docker-compose.yml,老苏只修改了
container_name;
# DO NOT EDIT
# The .env file has everything you need to edit.
# Run options:
# 1. Use prebuilt images (preferred method):
# run cmd: docker-compose up -d
# 2. Build images on your own machine:
# build cmd: COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker-compose build
# run cmd: docker-compose up -dversion: "3.8"
services:proxy:image: reallibrephotos/librephotos-proxy:${tag}container_name: librephotos-proxyrestart: unless-stoppedvolumes:- ${scanDirectory}:/data- ${data}/protected_media:/protected_mediaports:- ${httpPort}:80depends_on:- backend- frontenddb:image: postgres:13container_name: librephotos-dbrestart: unless-stoppedenvironment:- POSTGRES_USER=${dbUser}- POSTGRES_PASSWORD=${dbPass}- POSTGRES_DB=${dbName}volumes:- ${data}/db:/var/lib/postgresql/datacommand: postgres -c fsync=off -c synchronous_commit=off -c full_page_writes=off -c random_page_cost=1.0healthcheck:test: psql -U ${dbUser} -d ${dbName} -c "SELECT 1;"interval: 5stimeout: 5sretries: 5frontend:image: reallibrephotos/librephotos-frontend:${tag}container_name: librephotos-frontendrestart: unless-stoppedbackend:image: reallibrephotos/librephotos:${tag}container_name: librephotos-backendrestart: unless-stoppedvolumes:- ${scanDirectory}:/data- ${data}/protected_media:/protected_media- ${data}/logs:/logs- ${data}/cache:/root/.cacheenvironment:- SECRET_KEY=${shhhhKey:-}- BACKEND_HOST=backend- ADMIN_EMAIL=${adminEmail:-}- ADMIN_USERNAME=${userName:-}- ADMIN_PASSWORD=${userPass:-}- DB_BACKEND=postgresql- DB_NAME=${dbName}- DB_USER=${dbUser}- DB_PASS=${dbPass}- DB_HOST=${dbHost}- DB_PORT=5432- MAPBOX_API_KEY=${mapApiKey:-}- WEB_CONCURRENCY=${gunniWorkers:-1}- SKIP_PATTERNS=${skipPatterns:-}- ALLOW_UPLOAD=${allowUpload:-false}- CSRF_TRUSTED_ORIGINS=${csrfTrustedOrigins:-}- DEBUG=0- HEAVYWEIGHT_PROCESS=${HEAVYWEIGHT_PROCESS:-}depends_on:db:condition: service_healthy
一共用到了 4 个镜像,其中:
reallibrephotos/librephotos-proxy:反向代理服务;reallibrephotos/librephotos:后端服务;reallibrephotos/librephotos-frontend:前端页面;
以上 3 个镜像 latest 对应的版本均为 2023w31
postgres:13:数据库服务;
env.txt
将下面的内容保存为 env.txt 文件
源文件来自:https://github.com/LibrePhotos/librephotos-docker/blob/main/librephotos.env,请根据自己的环境进行修改;
# This file contains all the things you need to change to set up your Libre Photos.
# There are a few items that must be set for it to work such as the location of your photos.
# After the mandatory entries there are some optional ones that you may set. # Start of mandatory changes. # Location of your photos.
scanDirectory=./librephotos/pictures# Internal data of LibrePhotos
data=./librephotos/data# ------------------------------------------------------------------------------------------------# Wow, we are at the optional now. Pretty easy so far. You do not have to change any of the below.# Set this value if you have a custom domain name. This allows uploads and django-admin access. If you do not have a custom domain name, leave this blank.
csrfTrustedOrigins=#What port should Libre Photos be accessed at (Default 3000)
httpPort=3068# What branch should we install the latest weekly build or the development branch (dev)
tag=latest# Number of workers, which take care of the request to the api. This setting can dramatically affect the ram usage.
# A positive integer generally in the 2-4 x $(NUM_CORES) range.
# You’ll want to vary this a bit to find the best for your particular workload.
# Each worker needs 800MB of RAM. Change at your own will. Default is 2.
gunniWorkers=2# You can set the database name. Did you know Libre Photos was forked from OwnPhotos?
dbName=librephotos# Here you can change the user name for the database.
dbUser=docker# The password used by the database.
dbPass=AaAa1234# Default minimum rating to interpret as favorited. This default value is used when creating a new user.
# Users can change this in their settings (Dashboards > Library).
DEFAULT_FAVORITE_MIN_RATING=4# Database host. Only change this if you want to use your own existing Postgres server. If using your own server, you can remove the 'db' container from docker-compose.yml. If you're changing the name of the DB's container name (DB_CONT_NAME further down), you need to set this variable to match that name too.
dbHost=db# Set the names of the docker containers to your own entries. Or don't, I'm not your dad.
# Changing these will require you to `make rename` to rename the services, and start the system with your chosen `docker-compose up -d` invocation again.
# Note that changing the DB_CONT_NAME will also need you to set the `dbHost` variable to the same value.
DB_CONT_NAME=db
BACKEND_CONT_NAME=backend
FRONTEND_CONT_NAME=frontend
PROXY_CONT_NAME=proxy
PGADMIN_CONT_NAME=pgadmin
# ---------------------------------------------------------------------------------------------# If you are not a developer ignore the following parameters: you will never need them.# Where shall we store the backend and frontend code files.
codedir=./librephotos/code# Location for pgAdmin
pgAdminLocation=./librephotos/pgadmin
相比源文件,老苏修改了 3处
scanDirectory:从./librephotos/pictures修改为了./pictures;data:从./librephotos/data修改为了./data;httpPort:从3000修改为了3068,这个只要不冲突就行;
其他参数,除了 dbPass 可以按需要修改外,其他的直接用默认值就可以,除非你清楚每个参数的用途
如果执行时遇到下面的错误,请用 UTF-8 格式保存 env.txt 文件

然后执行下面的命令
# 新建文件夹 librephotos 和 子目录
mkdir -p /volume1/docker/librephotos/{data/{cache,db,logs,protected_media},pictures}# 进入 librephotos 目录
cd /volume1/docker/librephotos# 将 docker-compose.yml 和 env.txt 放入当前目录# 一键启动
docker-compose --env-file env.txt up -d
目录结构

运行
在浏览器中输入 http://群晖IP:3068 ,第一次会看到注册页面

然后需要登录

登录成功后的主界面

需要点 Edit User 按钮来设置路径,直接点击下面的 data 或者直接输入 /data,点 Save 保存即可

右下角会提示开始扫描

鼠标移到右上角的红点,可以看到照片处理进度

变成绿色时,表示已处理完成

虽然支持 AI,但期望值不要太高了

android 客户端
这是一个第三方的移动客户端,下载地址:https://github.com/savvasdalkitsis/uhuruphotos-android
选择右侧的 Manage media on mypersonal cloud

输入服务器地址、账号和密码

设置 Allow允许通知

从 Media without date 分类中查看

虽然还处于早期阶段,但它已经具备了很多功能,例如:与 LibrePhotos 服务器定期后台同步等

参考文档
LibrePhotos/librephotos: Self hosted alternative to Google Photos
地址:https://github.com/LibrePhotos/librephotos
LibrePhotos/librephotos-docker
地址:https://github.com/LibrePhotos/librephotos-docker
🐋 Docker | LibrePhotos
地址:https://docs.librephotos.com/docs/installation/standard-install/
UhuruPhotos. A LibrePhotos android client : selfhosted
地址:https://www.reddit.com/r/selfhosted/comments/ui5xwi/uhuruphotos_a_librephotos_android_client/
savvasdalkitsis/uhuruphotos-android: A LibrePhotos android client written using Jetpack Compose and all the latest Android technologies
地址:https://github.com/savvasdalkitsis/uhuruphotos-android
相关文章:
开源照片管理服务LibrePhotos
本文是为了解决网友 赵云遇到的问题,顺便折腾的。虽然软件跑起来了,但是他遇到的问题,超出了老苏的认知。当然最终问题还是得到了解决,不过与 LibrePhotos 无关; 什么是 LibrePhotos ? LibrePhotos 是一个自托管的开源…...
Linux指令
1 Linux 系统目录结构 /bin 存放系统指令(可执行文件) /boot 存放linux系统开机引导程序 /dev 存放设备文件的地方 /etc 存放系统配置文件的地方 /home 存放用户家目录的地方。 /lib和/lib64 存放系统动态链接库的地方。 /lostfound linux文件系统下特有…...
如何在Mac电脑上安装WeasyPrint:简单易懂的步骤
1. 安装homebrew 首先需要确保安装了homebrew,通过homebrew安装weasyprint可以将需要的库都安装好,比pip安装更简单快捷。 安装方法如下: /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)&qu…...
手机电脑scoket通信 手机软件 APP inventor 服务端程序python
python scoket 通信 再帮助同学坐课题的时候接触到了scoket通信,了解到这应该是基层网络通信的原理,于是就导出搜索了一下相关的资料,简单来说scoket通信就是,可以让不同设备在同一个网络环境的条件下,可以实现相互通…...
软考高级之系统架构师之系统安全性和保密性设计
今天是2023年08月31日,距离软考高级只有65天,加油! 备注:资料搜集自网络。 基础 信息必须依赖于存储、传输、处理及应用的载体(媒介)而存在。信息系统安全可以划分设备安全、数据安全、内容安全和行为安…...
FPGA实现电机转速PID控制
通过纯RTL实现电机转速PID控制,包括电机编码器值读取,电机速度、正反转控制,PID算法,卡尔曼滤波,最终实现对电机速度进行控制,使其能够渐近设定的编码器目标值。 一、设计思路 前面通过SOPC之NIOS Ⅱ实现电…...
C++中的volatile
volatile的本意是“易变的”,是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可…...
数学建模--一维插值法的多种插值方式的Python实现
目录 1.算法流程步骤 2.算法核心代码 3.算法效果展示 1.算法流程步骤 #算法的核心就是利用scipy中的interpolate来完成工作 #一共是5种一维插值算法形式: #插值方法:1.阶梯插值 2.线性插值 3.2阶样条插值 4.3阶样条插值 #"nearest"阶梯插值 #"zero&…...
爱校对:让法律、医疗、教育行业的文本更加无懈可击
在今天这个信息爆炸的世界里,文本准确性成了法律、医疗和教育这些严谨行业中一个不能忽视的要点。一个小错误可能造成严重的后果,甚至影响人们的生命和事业。这正是为什么更多的专业人士开始选择使用“爱校对”来确保他们的文档、研究和通讯无懈可击。 法…...
使用pip下载第三方软件包报错超时处理方法
报错如下: WARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, statusNone)) after connection broken by ‘ReadTimeoutEr ror(“HTTPSConnectionPool(host‘files.pythonhosted.org’, port443): Read timed out. (read timeout15)”)’: /p…...
计算古坐标——基于GPlates Web Service的坐标点重建
Gplates客户端和在线门户,pygplates和gplately是存在内在联系的应用,它们主要实现可视化,输入板块模型和化石点的现今坐标信息,在GPlates中可视化呈现,点位的坐标计算并不展现。而rgplates利用R语言提供了直接进行坐标…...
智安网络|加强软件供应链安全保障:共同抵御威胁的关键路径
在当今数字化时代,软件供应链安全成为了一个备受关注的话题。各行各业都依赖于软件产品和服务来支持其业务运营。然而,随着供应链的不断扩大和复杂化,软件供应链安全问题也日益突出。那么应该如何解决? 首先,软件供应…...
华为Mate 60系列发售,北斗卫星通信技术进一步深入大众消费市场
近日,华为Mate 60系列手机在没有举办发布会的情况下在官方商城突然上架开售,人气火爆。 值得一提的是,华为Mate60 Pro支持卫星通话,无地面网络时,也能拨打和接听卫星电话,还可自由编辑卫星消息。华为 Mate6…...
Grad-CAM,即梯度加权类激活映射 (Gradient-weighted Class Activation Mapping)
Grad-CAM,即梯度加权类激活映射 (Gradient-weighted Class Activation Mapping),是一种用于解释卷积神经网络决策的方法。它通过可视化模型对于给定输入的关注区域来提供洞察。 原理: Grad-CAM的关键思想是将输出类别的梯度(相对于特定卷积…...
程序发布——使用pyinstaller打包识别程序为exe可执行文件 详解
当我们使用python完成项目开发后,必然面对着如何将自己的程序分享给其他人使用,这就离不开程序的打包工作。对于大多数人而言,我们还是使用windows电脑居多,因此我们在大多数场景是需要将程序打包为exe的可执行文件。笔者将在本章节详细介绍使用pyinstaller进行打包的全过程…...
Docker 使用
简介 Docker是一个开源的容器引擎,它有助于更快地交付应用。 Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用 Docker可更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。 Docker…...
电脑c盘变红满了怎么清理?4个方法轻松清理!
“我的电脑才用了不到一年,现在就已经满了!电脑c盘变红满了应该怎么清理呢?有什么方法能帮我清理的干净一点吗?希望大家给我出出主意。” 随着我们使用电脑时间的增多,电脑C盘可能会变得满满当当,这会不仅会…...
【UE 材质】实现角度渐变材质、棋盘纹理材质
目标 步骤 一、角度渐变材质 1. 首先通过“Mask”节点将"Texture Coordinate" 节点的R、G通道分离 2. 通过“RemapValueRange”节点将0~1范围映射到-1~1 可以看到此时R通道效果: G通道效果: 继续补充如下节点 二、棋盘纹理材质 原视频链接&…...
[深度学习]1. 深度学习知识点汇总
本文记录了我在学习深度学习的过程中遇到过的不懂的知识点,为了方便翻阅,故将其发表于此,随时更新,供大家参考。 深度学习常见知识点 1. 测试精度和训练精度 在深度学习中,测试精度和训练精度是两个重要的指标&#…...
鲁棒优化入门(6)—Matlab+Yalmip两阶段鲁棒优化通用编程指南(上)
0.引言 上一篇博客介绍了使用Yalmip工具箱求解单阶段鲁棒优化的方法。这篇文章将和大家一起继续研究如何使用Yalmip工具箱求解两阶段鲁棒优化(默认看到这篇博客时已经有一定的基础了,如果没有可以看看我专栏里的其他文章)。关于两阶段鲁棒优化与列与约束生成算法的原…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
OpenGL-什么是软OpenGL/软渲染/软光栅?
软OpenGL(Software OpenGL)或者软渲染指完全通过CPU模拟实现的OpenGL渲染方式(包括几何处理、光栅化、着色等),不依赖GPU硬件加速。这种模式通常性能较低,但兼容性极强,常用于不支持硬件加速…...
GB/T 43887-2024 核级柔性石墨板材检测
核级柔性石墨板材是指以可膨胀石墨为原料、未经改性和增强、用于核工业的核级柔性石墨板材。 GB/T 43887-2024核级柔性石墨板材检测检测指标: 测试项目 测试标准 外观 GB/T 43887 尺寸偏差 GB/T 43887 化学成分 GB/T 43887 密度偏差 GB/T 43887 拉伸强度…...
