From 392805db057e1947f289e80c4b8c2d37c865b7d6 Mon Sep 17 00:00:00 2001 From: falkheiland Date: Mon, 23 Sep 2024 16:05:22 +0200 Subject: [PATCH 01/12] initial commit --- apps/sharry/config.json | 33 +++++++++++++++++++++++++ apps/sharry/data/sharry.conf.template | 27 ++++++++++++++++++++ apps/sharry/docker-compose.json | 34 ++++++++++++++++++++++++++ apps/sharry/docker-compose.yml | 1 + apps/sharry/metadata/description.md | 11 +++++++++ apps/sharry/metadata/logo.jpg | Bin 0 -> 31068 bytes 6 files changed, 106 insertions(+) create mode 100644 apps/sharry/config.json create mode 100644 apps/sharry/data/sharry.conf.template create mode 100644 apps/sharry/docker-compose.json create mode 100644 apps/sharry/docker-compose.yml create mode 100644 apps/sharry/metadata/description.md create mode 100644 apps/sharry/metadata/logo.jpg diff --git a/apps/sharry/config.json b/apps/sharry/config.json new file mode 100644 index 0000000000..8591d9f717 --- /dev/null +++ b/apps/sharry/config.json @@ -0,0 +1,33 @@ +{ + "$schema": "../schema.json", + "name": "sharry", + "port": 8681, + "available": true, + "exposable": true, + "dynamic_config": true, + "id": "sharry", + "tipi_version": 1, + "version": "v1.14.0", + "categories": [ + "data" + ], + "description": "Sharry allows to share files with others in a simple way. It is a self-hosted web application. The basic concept is: upload files and get a url back that can then be shared.", + "short_desc": "Sharry is a self-hosted file sharing web application.", + "author": "eikek", + "source": "https://github.com/eikek/sharry", + "website": "https://eikek.github.io/sharry/", + "form_fields": [ + { + "type": "password", + "label": "DB Password", + "required": true, + "env_variable": "DB_PASS" + } + ], + "supported_architectures": [ + "arm64", + "amd64" + ], + "created_at": 1727099286000, + "updated_at": 1727099286000 +} \ No newline at end of file diff --git a/apps/sharry/data/sharry.conf.template b/apps/sharry/data/sharry.conf.template new file mode 100644 index 0000000000..2e03604508 --- /dev/null +++ b/apps/sharry/data/sharry.conf.template @@ -0,0 +1,27 @@ +sharry.restserver { + + base-url = "{{APP_DOMAIN}}" + + bind { + address = "0.0.0.0" + port = 9090 + } + + backend { + auth { + fixed.enabled = true ## enabled admin:admin access + } + + jdbc { + url = "jdbc:postgresql://db:5432/sharrydb" + user = "sharry" + password = "{{DB_PASS}}" + + signup { + mode = "open" + invite-time = "14 days" + invite-password = "generate-invite" + } + } + +} \ No newline at end of file diff --git a/apps/sharry/docker-compose.json b/apps/sharry/docker-compose.json new file mode 100644 index 0000000000..2e1ba40c38 --- /dev/null +++ b/apps/sharry/docker-compose.json @@ -0,0 +1,34 @@ +{ + "services": [ + { + "name": "sharry", + "image": "eikek0/sharry:v1.14.0", + "internalPort": 9090, + "isMain": true, + "volumes": [ + { + "hostPath": "${APP_DATA_DIR}/data/sharry.conf", + "containerPath": "/opt/sharry.conf" + } + ], + "command": "/opt/sharry.conf", + "dependsOn": "db" + }, + { + "name": "db", + "image": "postgres:16.4-alpine", + "isMain": false, + "volumes": [ + { + "hostPath": "${APP_DATA_DIR}/data/postgres/", + "containerPath": "/var/lib/postgresql/data" + } + ], + "environment": { + "POSTGRES_USER": "sharry", + "POSTGRES_PASSWORD": "${DB_PASS}", + "POSTGRES_DB": "sharrydb" + } + } + ] +} \ No newline at end of file diff --git a/apps/sharry/docker-compose.yml b/apps/sharry/docker-compose.yml new file mode 100644 index 0000000000..b121d6c6cb --- /dev/null +++ b/apps/sharry/docker-compose.yml @@ -0,0 +1 @@ +# apps/sharry/docker-compose.json \ No newline at end of file diff --git a/apps/sharry/metadata/description.md b/apps/sharry/metadata/description.md new file mode 100644 index 0000000000..139f608ae4 --- /dev/null +++ b/apps/sharry/metadata/description.md @@ -0,0 +1,11 @@ +# Sharry + +Sharry is a self-hosted file sharing web application. + +Sharry allows to share files with others in a simple way. It is a self-hosted web application. The basic concept is: upload files and get a url back that can then be shared. + +## Links + +https://github.com/eikek/sharry + +https://hub.docker.com/r/eikek0/sharry \ No newline at end of file diff --git a/apps/sharry/metadata/logo.jpg b/apps/sharry/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..80d4fb21d2f0fbca0b10a76f1af7edc32513535b GIT binary patch literal 31068 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 literal 0 HcmV?d00001 From 0d016e3b0499fe8abf8a2a0e55e3106dc0754278 Mon Sep 17 00:00:00 2001 From: falkheiland Date: Mon, 23 Sep 2024 16:19:30 +0200 Subject: [PATCH 02/12] testing --- apps/sharry/{docker-compose.yml => _docker-compose.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename apps/sharry/{docker-compose.yml => _docker-compose.yml} (100%) diff --git a/apps/sharry/docker-compose.yml b/apps/sharry/_docker-compose.yml similarity index 100% rename from apps/sharry/docker-compose.yml rename to apps/sharry/_docker-compose.yml From 1e724d92c509c5295878ab0d240875cc4d5d74f0 Mon Sep 17 00:00:00 2001 From: falkheiland Date: Mon, 23 Sep 2024 16:29:32 +0200 Subject: [PATCH 03/12] added docker-compose.yml --- apps/sharry/_docker-compose.yml | 1 - apps/sharry/docker-compose.yml | 51 +++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) delete mode 100644 apps/sharry/_docker-compose.yml create mode 100644 apps/sharry/docker-compose.yml diff --git a/apps/sharry/_docker-compose.yml b/apps/sharry/_docker-compose.yml deleted file mode 100644 index b121d6c6cb..0000000000 --- a/apps/sharry/_docker-compose.yml +++ /dev/null @@ -1 +0,0 @@ -# apps/sharry/docker-compose.json \ No newline at end of file diff --git a/apps/sharry/docker-compose.yml b/apps/sharry/docker-compose.yml new file mode 100644 index 0000000000..a55d4a5adc --- /dev/null +++ b/apps/sharry/docker-compose.yml @@ -0,0 +1,51 @@ +services: + sharry: + depends_on: + - db + image: eikek0/sharry:v1.14.0 + container_name: sharry + command: /opt/sharry.conf + volumes: + - ${APP_DATA_DIR}/data/sharry.conf:/opt/sharry.conf + ports: + - ${APP_PORT}:9090 + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.sharry-web-redirect.redirectscheme.scheme: https + traefik.http.services.sharry.loadbalancer.server.port: 8000 + # Web + traefik.http.routers.sharry-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.sharry-insecure.entrypoints: web + traefik.http.routers.sharry-insecure.service: sharry + traefik.http.routers.sharry-insecure.middlewares: sharry-web-redirect + # Websecure + traefik.http.routers.sharry.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.sharry.entrypoints: websecure + traefik.http.routers.sharry.service: sharry + traefik.http.routers.sharry.tls.certresolver: myresolver + # Local domain + traefik.http.routers.sharry-local-insecure.rule: Host(`sharry.${LOCAL_DOMAIN}`) + traefik.http.routers.sharry-local-insecure.entrypoints: web + traefik.http.routers.sharry-local-insecure.service: sharry + traefik.http.routers.sharry-local-insecure.middlewares: sharry-web-redirect + # Local domain secure + traefik.http.routers.sharry-local.rule: Host(`sharry.${LOCAL_DOMAIN}`) + traefik.http.routers.sharry-local.entrypoints: websecure + traefik.http.routers.sharry-local.service: sharry + traefik.http.routers.sharry-local.tls: true + runtipi.managed: true + + db: + image: postgres:16.4-alpine + container_name: db + volumes: + - ${APP_DATA_DIR}/data/postgres/:/var/lib/postgresql/data + environment: + - POSTGRES_USER=sharry + - POSTGRES_PASSWORD=${DB_PASS} + - POSTGRES_DB=sharrydb + networks: + - tipi_main_network \ No newline at end of file From fe46a30894112e6058711c612e68bc70c9bbc8e5 Mon Sep 17 00:00:00 2001 From: falkheiland Date: Mon, 23 Sep 2024 16:35:31 +0200 Subject: [PATCH 04/12] chaged dependson --- apps/sharry/docker-compose.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/sharry/docker-compose.json b/apps/sharry/docker-compose.json index 2e1ba40c38..3a9e469476 100644 --- a/apps/sharry/docker-compose.json +++ b/apps/sharry/docker-compose.json @@ -12,7 +12,11 @@ } ], "command": "/opt/sharry.conf", - "dependsOn": "db" + "dependsOn": { + "db": { + "condition": "service_healthy" + } + } }, { "name": "db", From 00328c69457f917393064bb454957419b75494d1 Mon Sep 17 00:00:00 2001 From: falkheiland Date: Mon, 23 Sep 2024 16:37:38 +0200 Subject: [PATCH 05/12] chaged dependson --- apps/sharry/docker-compose.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sharry/docker-compose.json b/apps/sharry/docker-compose.json index 3a9e469476..94cb4474f1 100644 --- a/apps/sharry/docker-compose.json +++ b/apps/sharry/docker-compose.json @@ -14,7 +14,7 @@ "command": "/opt/sharry.conf", "dependsOn": { "db": { - "condition": "service_healthy" + "condition": "service_started" } } }, From d59ac83147e5887be0fae4d1e7b7bf4894db74b6 Mon Sep 17 00:00:00 2001 From: falkheiland Date: Mon, 23 Sep 2024 16:39:26 +0200 Subject: [PATCH 06/12] edited sharry.cof.template --- apps/sharry/data/sharry.conf.template | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/sharry/data/sharry.conf.template b/apps/sharry/data/sharry.conf.template index 2e03604508..4fec58cc3e 100644 --- a/apps/sharry/data/sharry.conf.template +++ b/apps/sharry/data/sharry.conf.template @@ -21,7 +21,8 @@ sharry.restserver { mode = "open" invite-time = "14 days" invite-password = "generate-invite" + } } - } + } } \ No newline at end of file From 63b17b44d759c5867742b073dbbc32dd4f24f0d9 Mon Sep 17 00:00:00 2001 From: falkheiland Date: Mon, 23 Sep 2024 16:42:04 +0200 Subject: [PATCH 07/12] edited sharry.conf.template --- apps/sharry/data/sharry.conf.template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sharry/data/sharry.conf.template b/apps/sharry/data/sharry.conf.template index 4fec58cc3e..fd13c81f09 100644 --- a/apps/sharry/data/sharry.conf.template +++ b/apps/sharry/data/sharry.conf.template @@ -1,6 +1,6 @@ sharry.restserver { - base-url = "{{APP_DOMAIN}}" + base-url = "https://{{APP_DOMAIN}}" bind { address = "0.0.0.0" From f725d2f6439882c0a1f72ae502617bb656b3aefe Mon Sep 17 00:00:00 2001 From: falkheiland Date: Mon, 23 Sep 2024 16:53:37 +0200 Subject: [PATCH 08/12] changed db password to random, added instructions to change user --- apps/sharry/config.json | 3 ++- apps/sharry/metadata/description.md | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/sharry/config.json b/apps/sharry/config.json index 8591d9f717..651e35cb5b 100644 --- a/apps/sharry/config.json +++ b/apps/sharry/config.json @@ -18,8 +18,9 @@ "website": "https://eikek.github.io/sharry/", "form_fields": [ { - "type": "password", + "type": "random", "label": "DB Password", + "hint": "postgresql password", "required": true, "env_variable": "DB_PASS" } diff --git a/apps/sharry/metadata/description.md b/apps/sharry/metadata/description.md index 139f608ae4..d935b65639 100644 --- a/apps/sharry/metadata/description.md +++ b/apps/sharry/metadata/description.md @@ -4,6 +4,8 @@ Sharry is a self-hosted file sharing web application. Sharry allows to share files with others in a simple way. It is a self-hosted web application. The basic concept is: upload files and get a url back that can then be shared. +Standard Admin Account is `admin`:`admin`. Go to `Settings (3 lines) -> Accounts` and create a new admin user account. Login with the new account and disable / remove the standard admin account. + ## Links https://github.com/eikek/sharry From ddf22c3b59497ae04205ba6adb39026e7d8c0065 Mon Sep 17 00:00:00 2001 From: falkheiland Date: Mon, 23 Sep 2024 16:56:50 +0200 Subject: [PATCH 09/12] changed db password to random --- apps/sharry/config.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/sharry/config.json b/apps/sharry/config.json index 651e35cb5b..89b6d4585d 100644 --- a/apps/sharry/config.json +++ b/apps/sharry/config.json @@ -20,8 +20,7 @@ { "type": "random", "label": "DB Password", - "hint": "postgresql password", - "required": true, + "min": 32, "env_variable": "DB_PASS" } ], From f27fc6d8270456d362b434e5d7f605d2ad945946 Mon Sep 17 00:00:00 2001 From: Falk Heiland Date: Thu, 24 Oct 2024 12:36:05 +0200 Subject: [PATCH 10/12] added label runtipi.managed: true to db --- apps/sharry/docker-compose.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/sharry/docker-compose.yml b/apps/sharry/docker-compose.yml index a55d4a5adc..571dd57370 100644 --- a/apps/sharry/docker-compose.yml +++ b/apps/sharry/docker-compose.yml @@ -48,4 +48,6 @@ services: - POSTGRES_PASSWORD=${DB_PASS} - POSTGRES_DB=sharrydb networks: - - tipi_main_network \ No newline at end of file + - tipi_main_network + labels: + runtipi.managed: true \ No newline at end of file From 85215ac839ff62ef2760b8871689b17118cbf6ea Mon Sep 17 00:00:00 2001 From: Falk Heiland Date: Thu, 24 Oct 2024 13:23:56 +0200 Subject: [PATCH 11/12] coderabbit changes --- apps/sharry/data/sharry.conf.template | 2 +- apps/sharry/docker-compose.yml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/apps/sharry/data/sharry.conf.template b/apps/sharry/data/sharry.conf.template index fd13c81f09..2b6e0120af 100644 --- a/apps/sharry/data/sharry.conf.template +++ b/apps/sharry/data/sharry.conf.template @@ -13,7 +13,7 @@ sharry.restserver { } jdbc { - url = "jdbc:postgresql://db:5432/sharrydb" + url = "jdbc:postgresql://sharry-db:5432/sharry-db" user = "sharry" password = "{{DB_PASS}}" diff --git a/apps/sharry/docker-compose.yml b/apps/sharry/docker-compose.yml index 571dd57370..30ee40cc8c 100644 --- a/apps/sharry/docker-compose.yml +++ b/apps/sharry/docker-compose.yml @@ -1,7 +1,7 @@ services: sharry: depends_on: - - db + - sharry-db image: eikek0/sharry:v1.14.0 container_name: sharry command: /opt/sharry.conf @@ -15,7 +15,7 @@ services: # Main traefik.enable: true traefik.http.middlewares.sharry-web-redirect.redirectscheme.scheme: https - traefik.http.services.sharry.loadbalancer.server.port: 8000 + traefik.http.services.sharry.loadbalancer.server.port: 9090 # Web traefik.http.routers.sharry-insecure.rule: Host(`${APP_DOMAIN}`) traefik.http.routers.sharry-insecure.entrypoints: web @@ -38,16 +38,16 @@ services: traefik.http.routers.sharry-local.tls: true runtipi.managed: true - db: + sharry-db: image: postgres:16.4-alpine - container_name: db + container_name: sharry-db volumes: - ${APP_DATA_DIR}/data/postgres/:/var/lib/postgresql/data environment: - POSTGRES_USER=sharry - POSTGRES_PASSWORD=${DB_PASS} - - POSTGRES_DB=sharrydb + - POSTGRES_DB=sharry-db networks: - tipi_main_network labels: - runtipi.managed: true \ No newline at end of file + runtipi.managed: true From bf8c61e32d800f10cd4f79cb0c61d8c44d167e36 Mon Sep 17 00:00:00 2001 From: Falk Heiland Date: Thu, 24 Oct 2024 13:27:55 +0200 Subject: [PATCH 12/12] coderabbit changes --- apps/sharry/docker-compose.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/sharry/docker-compose.yml b/apps/sharry/docker-compose.yml index 30ee40cc8c..34c7db2960 100644 --- a/apps/sharry/docker-compose.yml +++ b/apps/sharry/docker-compose.yml @@ -2,8 +2,9 @@ services: sharry: depends_on: - sharry-db - image: eikek0/sharry:v1.14.0 container_name: sharry + image: eikek0/sharry:v1.14.0 + restart: unless-stopped command: /opt/sharry.conf volumes: - ${APP_DATA_DIR}/data/sharry.conf:/opt/sharry.conf @@ -39,8 +40,9 @@ services: runtipi.managed: true sharry-db: - image: postgres:16.4-alpine container_name: sharry-db + image: postgres:16.4-alpine + restart: unless-stopped volumes: - ${APP_DATA_DIR}/data/postgres/:/var/lib/postgresql/data environment: