From c1bf977d95394254ca6279fbe61e82a59cf57d55 Mon Sep 17 00:00:00 2001 From: Nicolas Meienberger <47644445+meienberger@users.noreply.github.com> Date: Sun, 11 Jun 2023 13:43:22 +0200 Subject: [PATCH] app: add obsidian-livesync (#683) --- README.md | 7 +-- apps/obsidian-livesync/config.json | 43 ++++++++++++++++++ apps/obsidian-livesync/data/local.ini | 22 +++++++++ apps/obsidian-livesync/docker-compose.yml | 42 +++++++++++++++++ .../obsidian-livesync/metadata/description.md | 7 +++ apps/obsidian-livesync/metadata/logo.jpg | Bin 0 -> 9109 bytes 6 files changed, 118 insertions(+), 3 deletions(-) create mode 100644 apps/obsidian-livesync/config.json create mode 100644 apps/obsidian-livesync/data/local.ini create mode 100644 apps/obsidian-livesync/docker-compose.yml create mode 100644 apps/obsidian-livesync/metadata/description.md create mode 100644 apps/obsidian-livesync/metadata/logo.jpg diff --git a/README.md b/README.md index 9c6e1427..0279d488 100644 --- a/README.md +++ b/README.md @@ -55,15 +55,15 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Jellyfin](https://github.com/jellyfin/jellyfin) - A media server for your home collection - [Jellyseerr](https://github.com/Fallenbagel/jellyseerr) - Fork of overseerr for Jellyfin support - [Joplin](https://github.com/laurent22/joplin) - Privacy focused note-taking app -- [Kanboard](https://github.com/kanboard/kanboard) - Kanboard is a free and open source Kanban project management software.- [Kapowarr](https://github.com/Casvt/Kapowarr) - Kapowarr is a software to build and manage a comic book library, fitting in the *arr suite of software. +- [Kanboard](https://github.com/kanboard/kanboard) - Kanboard is a free and open source Kanban project management software. +- [Kapowarr](https://github.com/Casvt/Kapowarr) - Kapowarr is a software to build and manage a comic book library, fitting in the \*arr suite of software. - [Kavita](https://github.com/Kareadita/Kavita) - Kavita is a fast, feature rich, cross platform reading server - [Libreddit](https://github.com/spikecodes/libreddit) - Private front-end for Reddit - [LibrePhotos](https://github.com/LibrePhotos/librephotos) - Complete photo management service - [LibreTranslate](https://github.com/LibreTranslate/LibreTranslate) - Free and Open Source Machine Translation API. 100% self-hosted, offline capable and easy to setup - [Lidarr](https://github.com/Lidarr/Lidarr) - Looks and smells like Sonarr but made for music. - [Lidarr On Steroids](https://github.com/youegraillot/lidarr-on-steroids) - Lidarr with some muscles thanks to deemix -- [LinkStack](https://github.com/LinkStackOrg/LinkStack) - LAbout -LinkStack - the ultimate solution for creating a personalized & professional profile page. +- [LinkStack](https://github.com/LinkStackOrg/LinkStack) - The ultimate solution for creating a personalized & professional profile page. - [Lodestone Core](https://github.com/Lodestone-Team/lodestone_core) - Server hosting tool for Minecraft and other multiplayers - [Logto](https://github.com/logto-io/logto) - Logto is a cost-effective open-source alternative to Auth0. - [Mastodon](https://github.com/mastodon/mastodon) - Your self-hosted, globally interconnected microblogging community @@ -87,6 +87,7 @@ LinkStack - the ultimate solution for creating a personalized & professional pro - [Nitter](https://github.com/zedeus/nitter) - Alternative Twitter front-end - [NocoDB](https://github.com/nocodb/nocodb) - Open Source Airtable Alternative - [Node-RED](https://github.com/node-red/node-red) - Low-code programming for event-driven applications +- [Obsidian LiveSync](https://github.com/vrtmrz/self-hosted-livesync-server) - LiveSync couchdb backend for Obsidian - [OneDev](https://code.onedev.io/onedev/server) - Self-hosted Git Server with Kanban and CI/CD - [Openbooks](https://github.com/evan-buss/openbooks) - Search and Download eBooks - [Overseerr](https://github.com/sct/overseerr) - Request management and media discovery tool for the Plex ecosystem diff --git a/apps/obsidian-livesync/config.json b/apps/obsidian-livesync/config.json new file mode 100644 index 00000000..5d9d2a0d --- /dev/null +++ b/apps/obsidian-livesync/config.json @@ -0,0 +1,43 @@ +{ + "$schema": "../schema.json", + "name": "Obsidian LiveSync", + "port": 5984, + "available": true, + "exposable": true, + "no_gui": true, + "id": "obsidian-livesync", + "tipi_version": 1, + "version": "3.1.2", + "categories": ["utilities"], + "description": "LiveSync couchdb backend for Obsidian", + "short_desc": "LiveSync couchdb backend for Obsidian", + "author": "vorotamoroz", + "source": "https://github.com/vrtmrz/self-hosted-livesync-server", + "form_fields": [ + { + "type": "text", + "label": "CouchDB username", + "min": 5, + "required": true, + "env_variable": "OBSIDIAN_LIVESYNC_USER" + }, + { + "type": "password", + "label": "CouchDB password", + "max": 50, + "min": 8, + "required": true, + "env_variable": "OBSIDIAN_LIVESYNC_PASSWORD" + }, + { + "type": "number", + "label": "CouchDB port", + "hint": "Default is 5984", + "min": 1, + "max": 65535, + "required": false, + "default": "5984", + "env_variable": "CUSTOM_PORTOBSIDIAN_LIVESYNC_PORT" + } + ] +} diff --git a/apps/obsidian-livesync/data/local.ini b/apps/obsidian-livesync/data/local.ini new file mode 100644 index 00000000..d68f1d71 --- /dev/null +++ b/apps/obsidian-livesync/data/local.ini @@ -0,0 +1,22 @@ +[couchdb] +single_node=true +max_document_size = 50000000 + +[chttpd] +require_valid_user = true +max_http_request_size = 4294967296 + +[chttpd_auth] +require_valid_user = true +authentication_redirect = /e=_/_utils/session.html + +[httpd] +WWW-Authenticate = Basic realm="couchdb" +enable_cors = true + +[cors] +origins = app://obsidian.md,capacitor://localhost,http://localhost +credentials = true +headers = accept, authorization, content-type, origin, referer +methods = GET, PUT, POST, HEAD, DELETE +max_age = 3600 diff --git a/apps/obsidian-livesync/docker-compose.yml b/apps/obsidian-livesync/docker-compose.yml new file mode 100644 index 00000000..87780eff --- /dev/null +++ b/apps/obsidian-livesync/docker-compose.yml @@ -0,0 +1,42 @@ +version: '3.7' + +services: + obsidian-livesync: + container_name: obsidian-livesync + image: couchdb:3.1.2 + ports: + - ${OBSIDIAN_LIVESYNC_PORT:-${APP_PORT}}:5984 + environment: + - COUCHDB_USER=${OBSIDIAN_LIVESYNC_USER} + - COUCHDB_PASSWORD=${OBSIDIAN_LIVESYNC_PASSWORD} + volumes: + - ${APP_DATA_DIR}/data/couchdb:/opt/couchdb/data + - ${APP_DATA_DIR}/data/local.ini:/opt/couchdb/etc/local.ini + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.obsidian-livesync-web-redirect.redirectscheme.scheme: https + traefik.http.services.obsidian-livesync.loadbalancer.passhostheader: true + traefik.http.services.obsidian-livesync.loadbalancer.server.port: 5984 + # Web + traefik.http.routers.obsidian-livesync-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.obsidian-livesync-insecure.entrypoints: web + traefik.http.routers.obsidian-livesync-insecure.service: obsidian-livesync + traefik.http.routers.obsidian-livesync-insecure.middlewares: obsidian-livesync-web-redirect + # Websecure + traefik.http.routers.obsidian-livesync.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.obsidian-livesync.entrypoints: websecure + traefik.http.routers.obsidian-livesync.service: obsidian-livesync + traefik.http.routers.obsidian-livesync.tls.certresolver: myresolver + # Local domain + traefik.http.routers.obsidian-livesync-local-insecure.rule: Host(`obsidian-livesync.${LOCAL_DOMAIN}`) + traefik.http.routers.obsidian-livesync-local-insecure.entrypoints: web + traefik.http.routers.obsidian-livesync-local-insecure.service: obsidian-livesync + traefik.http.routers.obsidian-livesync-local-insecure.middlewares: obsidian-livesync-web-redirect + # Local domain secure + traefik.http.routers.obsidian-livesync-local.rule: Host(`obsidian-livesync.${LOCAL_DOMAIN}`) + traefik.http.routers.obsidian-livesync-local.entrypoints: websecure + traefik.http.routers.obsidian-livesync-local.service: obsidian-livesync + traefik.http.routers.obsidian-livesync-local.tls: true diff --git a/apps/obsidian-livesync/metadata/description.md b/apps/obsidian-livesync/metadata/description.md new file mode 100644 index 00000000..8dc15edc --- /dev/null +++ b/apps/obsidian-livesync/metadata/description.md @@ -0,0 +1,7 @@ +## Obsidian LiveSync + +Self-hosted database for synchronizing Obsidian vaults. + +1. Install the **Self-hosted LiveSync** plugin from the [Obsidian Community Plugins](obsidian://show-plugin?id=obsidian-livesync) page. +2. Connect to your server by entering the URL in the plugin settings using a domain name or IP address. +3. If you are not exposing the app you have to use `http://:5984` as the URL. diff --git a/apps/obsidian-livesync/metadata/logo.jpg b/apps/obsidian-livesync/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9d3346762f47d60cd02c42137e33407f4feaf68d GIT binary patch literal 9109 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 h{VB%n@M