From 884232fbea7c7ab794173f6620d49aeedac8de89 Mon Sep 17 00:00:00 2001 From: Nicolas Meienberger Date: Thu, 29 Sep 2022 23:38:49 +0200 Subject: [PATCH 1/3] app: add librephotos --- apps/librephotos/config.json | 49 +++++++++++++ apps/librephotos/docker-compose.yml | 84 +++++++++++++++++++++++ apps/librephotos/metadata/description.md | 0 apps/librephotos/metadata/logo.jpg | Bin 0 -> 24303 bytes 4 files changed, 133 insertions(+) create mode 100644 apps/librephotos/config.json create mode 100644 apps/librephotos/docker-compose.yml create mode 100644 apps/librephotos/metadata/description.md create mode 100644 apps/librephotos/metadata/logo.jpg diff --git a/apps/librephotos/config.json b/apps/librephotos/config.json new file mode 100644 index 00000000..b294d42c --- /dev/null +++ b/apps/librephotos/config.json @@ -0,0 +1,49 @@ +{ + "$schema": "../schema.json", + "name": "LibrePhotos", + "port": 8110, + "available": true, + "exposable": true, + "id": "librephotos", + "tipi_version": 1, + "version": "2022w36", + "categories": ["photography"], + "description": "", + "short_desc": "", + "author": "Niaz Faridani-Rad", + "source": "https://github.com/LibrePhotos/librephotos", + "form_fields": [ + { + "type": "email", + "label": "LibrePhotos admin email", + "required": true, + "env_variable": "LIBREPHOTOS_EMAIL" + }, + { + "type": "text", + "label": "LibrePhotos admin username", + "max": 50, + "min": 3, + "required": true, + "env_variable": "LIBREPHOTOS_USERNAME" + }, + { + "type": "password", + "label": "LibrePhotos admin password", + "max": 50, + "min": 8, + "required": true, + "env_variable": "LIBREPHOTOS_PASSWORD" + }, + { + "type": "random", + "label": "DB password", + "env_variable": "LIBREPHOTOS_DB_PASSWORD" + }, + { + "type": "random", + "label": "Secret key", + "env_variable": "LIBREPHOTOS_SECRET_KEY" + } + ] +} diff --git a/apps/librephotos/docker-compose.yml b/apps/librephotos/docker-compose.yml new file mode 100644 index 00000000..634f24a7 --- /dev/null +++ b/apps/librephotos/docker-compose.yml @@ -0,0 +1,84 @@ +version: "3.7" +services: + librephotos: + image: reallibrephotos/librephotos-proxy:2022w36 + container_name: librephotos + restart: unless-stopped + volumes: + - ${APP_DATA_DIR}/data/scan:/data + - ${ROOT_FOLDER_HOST}/media/data/images:/protected_media + ports: + - ${APP_PORT}:80 + depends_on: + - librephotos-backend + - librephotos-frontend + networks: + - tipi_main_network + + librephotos-db: + image: postgres:13 + container_name: librephotos-db + restart: unless-stopped + environment: + - POSTGRES_USER=tipi + - POSTGRES_PASSWORD=${LIBREPHOTOS_DB_PASSWORD} + - POSTGRES_DB=librephotos + volumes: + - ${APP_DATA_DIR}/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 + #Checking health of Postgres db + healthcheck: + test: psql -U tipi -d librephotos -c "SELECT 1;" + interval: 5s + timeout: 5s + retries: 5 + networks: + - tipi_main_network + + librephotos-frontend: + image: reallibrephotos/librephotos-frontend:2022w36 + container_name: librephotos-frontend + restart: unless-stopped + depends_on: + - librephotos-backend + networks: + - tipi_main_network + + librephotos-backend: + image: reallibrephotos/librephotos:2022w36 + container_name: librephotos-backend + restart: unless-stopped + volumes: + - ${APP_DATA_DIR}/data/scan:/data + - ${ROOT_FOLDER_HOST}/media/data/images:/protected_media + - ${APP_DATA_DIR}/data/logs:/logs + - ${APP_DATA_DIR}/data/cache:/root/.cache + environment: + - SECRET_KEY=${LIBREPHOTOS_SECRET_KEY} + - BACKEND_HOST=backend + - ADMIN_EMAIL=${LIBREPHOTOS_EMAIL} + - ADMIN_USERNAME=${LIBREPHOTOS_USERNAME} + - ADMIN_PASSWORD=${LIBREPHOTOS_PASSWORD} + - DB_BACKEND=postgresql + - DB_NAME=librephotos + - DB_USER=tipi + - DB_PASS=${LIBREPHOTOS_DB_PASSWORD} + - DB_HOST= + - DB_PORT=5432 + - REDIS_HOST=librephotos-redis + - REDIS_PORT=6379 + - ALLOW_UPLOAD=true + - DEBUG=0 + # Wait for Postgres + depends_on: + librephotos-db: + condition: service_healthy + networks: + - tipi_main_network + + librephotos-redis: + image: redis:6 + container_name: librephotos-redis + restart: unless-stopped + networks: + - tipi_main_network \ No newline at end of file diff --git a/apps/librephotos/metadata/description.md b/apps/librephotos/metadata/description.md new file mode 100644 index 00000000..e69de29b diff --git a/apps/librephotos/metadata/logo.jpg b/apps/librephotos/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6744a65870e3bfa7825aa093e4490d9131b54a32 GIT binary patch literal 24303 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 Date: Fri, 30 Sep 2022 11:55:35 +0200 Subject: [PATCH 2/3] wip: librephotos --- apps/librephotos/data/proxy/nginx.conf | 62 ++++++++++++++++++++++++++ apps/librephotos/docker-compose.yml | 3 +- 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 apps/librephotos/data/proxy/nginx.conf diff --git a/apps/librephotos/data/proxy/nginx.conf b/apps/librephotos/data/proxy/nginx.conf new file mode 100644 index 00000000..773e5003 --- /dev/null +++ b/apps/librephotos/data/proxy/nginx.conf @@ -0,0 +1,62 @@ +user nginx; +worker_processes 1; + +error_log /var/log/nginx/error.log debug; + +events { + worker_connections 1024; +} + +http { + server { + listen 80; + + location / { + # React routes are entirely on the App side in the web broswer + # Always proxy to root with the same page request when nginx 404s + error_page 404 /; + proxy_intercept_errors on; + proxy_set_header Host $host; + proxy_pass http://librephotos-frontend:3000/; + } + location ~ ^/(api|media)/ { + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host __backend_name__; + include uwsgi_params; + proxy_pass http://librephotos-backend:8001; + } + # needed for webpack-dev-server + location /ws { + proxy_pass http://librephotos-frontend:3000; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + } + # Django media + location /protected_media { + internal; + alias /protected_media/; + } + + location /static/drf-yasg { + proxy_pass http://librephotos-backend:8001; + } + + location /data { + internal; + alias /data/; + } + + # Original Photos + location /original { + internal; + alias /data/; + } + # Nextcloud Original Photos + location /nextcloud_original { + internal; + alias /data/nextcloud_media/; + } + } +} \ No newline at end of file diff --git a/apps/librephotos/docker-compose.yml b/apps/librephotos/docker-compose.yml index 634f24a7..cf6f23cb 100644 --- a/apps/librephotos/docker-compose.yml +++ b/apps/librephotos/docker-compose.yml @@ -7,6 +7,7 @@ services: volumes: - ${APP_DATA_DIR}/data/scan:/data - ${ROOT_FOLDER_HOST}/media/data/images:/protected_media + - ${APP_DATA_DIR}/data/proxy/nginx.conf:/etc/nginx/nginx.conf:ro ports: - ${APP_PORT}:80 depends_on: @@ -55,7 +56,7 @@ services: - ${APP_DATA_DIR}/data/cache:/root/.cache environment: - SECRET_KEY=${LIBREPHOTOS_SECRET_KEY} - - BACKEND_HOST=backend + - BACKEND_HOST=librephotos-backend - ADMIN_EMAIL=${LIBREPHOTOS_EMAIL} - ADMIN_USERNAME=${LIBREPHOTOS_USERNAME} - ADMIN_PASSWORD=${LIBREPHOTOS_PASSWORD} From b0dedd1f6ae3b4bb570e15d8e5b276f72a0e35ff Mon Sep 17 00:00:00 2001 From: Nicolas Meienberger Date: Wed, 12 Oct 2022 21:26:47 +0200 Subject: [PATCH 3/3] app: add librephotos --- apps/librephotos/config.json | 2 +- apps/librephotos/data/cache/.gitkeep | 0 apps/librephotos/data/db/.gitkeep | 0 apps/librephotos/data/logs/.gitkeep | 0 .../librephotos/data/protected_media/.gitkeep | 0 apps/librephotos/data/proxy/nginx.conf | 2 +- apps/librephotos/data/scan/.gitkeep | 0 apps/librephotos/docker-compose.yml | 17 ++++++------- apps/librephotos/metadata/description.md | 24 +++++++++++++++++++ 9 files changed, 35 insertions(+), 10 deletions(-) create mode 100644 apps/librephotos/data/cache/.gitkeep create mode 100644 apps/librephotos/data/db/.gitkeep create mode 100644 apps/librephotos/data/logs/.gitkeep create mode 100644 apps/librephotos/data/protected_media/.gitkeep create mode 100644 apps/librephotos/data/scan/.gitkeep diff --git a/apps/librephotos/config.json b/apps/librephotos/config.json index b294d42c..6737ca50 100644 --- a/apps/librephotos/config.json +++ b/apps/librephotos/config.json @@ -1,7 +1,7 @@ { "$schema": "../schema.json", "name": "LibrePhotos", - "port": 8110, + "port": 8132, "available": true, "exposable": true, "id": "librephotos", diff --git a/apps/librephotos/data/cache/.gitkeep b/apps/librephotos/data/cache/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/librephotos/data/db/.gitkeep b/apps/librephotos/data/db/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/librephotos/data/logs/.gitkeep b/apps/librephotos/data/logs/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/librephotos/data/protected_media/.gitkeep b/apps/librephotos/data/protected_media/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/librephotos/data/proxy/nginx.conf b/apps/librephotos/data/proxy/nginx.conf index 773e5003..e324b37b 100644 --- a/apps/librephotos/data/proxy/nginx.conf +++ b/apps/librephotos/data/proxy/nginx.conf @@ -22,7 +22,7 @@ http { location ~ ^/(api|media)/ { proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header Host __backend_name__; + proxy_set_header Host librephotos-backend; include uwsgi_params; proxy_pass http://librephotos-backend:8001; } diff --git a/apps/librephotos/data/scan/.gitkeep b/apps/librephotos/data/scan/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/apps/librephotos/docker-compose.yml b/apps/librephotos/docker-compose.yml index cf6f23cb..7814beb2 100644 --- a/apps/librephotos/docker-compose.yml +++ b/apps/librephotos/docker-compose.yml @@ -6,7 +6,7 @@ services: restart: unless-stopped volumes: - ${APP_DATA_DIR}/data/scan:/data - - ${ROOT_FOLDER_HOST}/media/data/images:/protected_media + - ${APP_DATA_DIR}/data/protected_media:/protected_media - ${APP_DATA_DIR}/data/proxy/nginx.conf:/etc/nginx/nginx.conf:ro ports: - ${APP_PORT}:80 @@ -17,19 +17,20 @@ services: - tipi_main_network librephotos-db: - image: postgres:13 + image: postgres:14 container_name: librephotos-db restart: unless-stopped environment: - - POSTGRES_USER=tipi - - POSTGRES_PASSWORD=${LIBREPHOTOS_DB_PASSWORD} - - POSTGRES_DB=librephotos + POSTGRES_PASSWORD: ${LIBREPHOTOS_DB_PASSWORD} + POSTGRES_USER: tipi + POSTGRES_DB: librephotos volumes: - ${APP_DATA_DIR}/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 #Checking health of Postgres db healthcheck: - test: psql -U tipi -d librephotos -c "SELECT 1;" + # test: psql -U tipi -d librephotos -c "SELECT 1;" + test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"] interval: 5s timeout: 5s retries: 5 @@ -51,7 +52,7 @@ services: restart: unless-stopped volumes: - ${APP_DATA_DIR}/data/scan:/data - - ${ROOT_FOLDER_HOST}/media/data/images:/protected_media + - ${APP_DATA_DIR}/data/protected_media:/protected_media - ${APP_DATA_DIR}/data/logs:/logs - ${APP_DATA_DIR}/data/cache:/root/.cache environment: @@ -64,7 +65,7 @@ services: - DB_NAME=librephotos - DB_USER=tipi - DB_PASS=${LIBREPHOTOS_DB_PASSWORD} - - DB_HOST= + - DB_HOST=librephotos-db - DB_PORT=5432 - REDIS_HOST=librephotos-redis - REDIS_PORT=6379 diff --git a/apps/librephotos/metadata/description.md b/apps/librephotos/metadata/description.md index e69de29b..3ca6df28 100644 --- a/apps/librephotos/metadata/description.md +++ b/apps/librephotos/metadata/description.md @@ -0,0 +1,24 @@ +- The [demo is available here](https://demo2.librephotos.com/). User is ```demo```, password is ```demo1234```. +- You can watch development videos on [Niaz Faridani-Rad's channel](https://www.youtube.com/channel/UCZJ2pk2BPKxwbuCV9LWDR0w) +- You can join our [Discord](https://discord.gg/xwRvtSDGWb). + +![](https://github.com/LibrePhotos/librephotos/blob/dev/screenshots/mockups_main_fhd.png?raw=true) +Mockup designed by rawpixel.com / Freepik + +## Installation + +Step-by-step installation instructions are available in our [documentation](https://docs.librephotos.com/1/) + +## Features + + - Support for all types of photos including raw photos + - Support for videos + - Timeline view + - Scans pictures on the file system + - Multiuser support + - Generate albums based on events like "Thursday in Berlin" + - Face recognition / Face classification + - Reverse geocoding + - Object / Scene detection + - Semantic image search + - Search by metadata \ No newline at end of file