• 开源照片管理服务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 -d
    
    version: "3.8"
    services:
      proxy:
        image: reallibrephotos/librephotos-proxy:${tag}
        container_name: librephotos-proxy
        restart: unless-stopped
        volumes:
          - ${scanDirectory}:/data
          - ${data}/protected_media:/protected_media
        ports:
          - ${httpPort}:80
        depends_on:
          - backend
          - frontend
    
      db:
        image: postgres:13
        container_name: librephotos-db
        restart: unless-stopped
        environment:
          - POSTGRES_USER=${dbUser}
          - POSTGRES_PASSWORD=${dbPass}
          - POSTGRES_DB=${dbName}
        volumes:
          - ${data}/db:/var/lib/postgresql/data
        command: postgres -c fsync=off -c synchronous_commit=off -c full_page_writes=off -c random_page_cost=1.0
        healthcheck:
          test: psql -U ${dbUser} -d ${dbName} -c "SELECT 1;"
          interval: 5s
          timeout: 5s
          retries: 5
    
      frontend:
        image: reallibrephotos/librephotos-frontend:${tag}
        container_name: librephotos-frontend
        restart: unless-stopped
    
      backend:
        image: reallibrephotos/librephotos:${tag}
        container_name: librephotos-backend
        restart: unless-stopped
        volumes:
          - ${scanDirectory}:/data
          - ${data}/protected_media:/protected_media
          - ${data}/logs:/logs
          - ${data}/cache:/root/.cache
        environment:
          - 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77

    一共用到了 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64

    相比源文件,老苏修改了 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    目录结构

    运行

    在浏览器中输入 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

  • 相关阅读:
    LeetCode简单题之检查相同字母间的距离
    数据结构之二叉树
    Cilium系列-12-启用 Pod 的 BBR 拥塞控制
    基于matlab的强化学习QLearning路径规划性能仿真
    【前端修炼场】 — 练习一(熟悉html常见标志语言)
    十七.镜头知识之AA制程提高摄像头性能
    玩转SQLite7:基本语法与数据类型
    Java命令行形式将程序打包成jar包,防止报错:没有主清单属性
    【LeetCode】209. 长度最小的子数组
    哈希表的实现(c语言)
  • 原文地址:https://blog.csdn.net/wbsu2004/article/details/132616492