From 459f51e1c0b830302bd9d82969ac79800941b24c Mon Sep 17 00:00:00 2001 From: nrvo <151435968+nrvo@users.noreply.github.com> Date: Tue, 14 May 2024 02:49:49 +0200 Subject: [PATCH] app/spacedrive --- apps/spacedrive/config.json | 35 +++++++++++++++++++++ apps/spacedrive/docker-compose.yml | 40 ++++++++++++++++++++++++ apps/spacedrive/metadata/description.md | 18 +++++++++++ apps/spacedrive/metadata/logo.jpg | Bin 0 -> 34287 bytes 4 files changed, 93 insertions(+) create mode 100755 apps/spacedrive/config.json create mode 100755 apps/spacedrive/docker-compose.yml create mode 100755 apps/spacedrive/metadata/description.md create mode 100755 apps/spacedrive/metadata/logo.jpg diff --git a/apps/spacedrive/config.json b/apps/spacedrive/config.json new file mode 100755 index 00000000..c3644fe0 --- /dev/null +++ b/apps/spacedrive/config.json @@ -0,0 +1,35 @@ +{ + "$schema": "../schema.json", + "name": "Spacedrive", + "available": true, + "exposable": true, + "port": 9300, + "id": "spacedrive", + "tipi_version": 1, + "version": "0.2.14", + "categories": ["utilities"], + "description": "Spacedrive is an open source cross-platform file explorer, powered by a virtual distributed filesystem written in Rust.", + "short_desc": "Cross-platform file explorer", + "author": "spacedriveapp", + "source": "https://github.com/spacedriveapp/spacedrive", + "website": "https://spacedrive.com/", + "form_fields": [ + { + "type": "text", + "label": "Spacedrive Username", + "max": 50, + "min": 3, + "required": true, + "env_variable": "SD_AUTH_USER" + }, + { + "type": "password", + "label": "Spacedrive Password", + "max": 50, + "min": 12, + "required": true, + "env_variable": "SD_AUTH_PASSWORD" + } + ], + "supported_architectures": ["arm64", "amd64"] +} diff --git a/apps/spacedrive/docker-compose.yml b/apps/spacedrive/docker-compose.yml new file mode 100755 index 00000000..c5c6d38c --- /dev/null +++ b/apps/spacedrive/docker-compose.yml @@ -0,0 +1,40 @@ +version: '3.9' + +services: + spacedrive: + container_name: spacedrive + image: ghcr.io/spacedriveapp/spacedrive/server:0.2.14 + restart: unless-stopped + environment: + - SD_AUTH=${SD_AUTH_USER}:${SD_AUTH_PASSWORD} + ports: + - ${APP_PORT}:8080 + networks: + - tipi_main_network + volumes: + - ${APP_DATA_DIR}/data:/var/spacedrive + labels: + # Main + traefik.enable: true + traefik.http.middlewares.spacedrive-web-redirect.redirectscheme.scheme: https + traefik.http.services.spacedrive.loadbalancer.server.port: 9300 + # Web + traefik.http.routers.spacedrive-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.spacedrive-insecure.entrypoints: web + traefik.http.routers.spacedrive-insecure.service: spacedrive + traefik.http.routers.spacedrive-insecure.middlewares: spacedrive-web-redirect + # Websecure + traefik.http.routers.spacedrive.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.spacedrive.entrypoints: websecure + traefik.http.routers.spacedrive.service: spacedrive + traefik.http.routers.spacedrive.tls.certresolver: myresolver + # Local domain + traefik.http.routers.spacedrive-local-insecure.rule: Host(`spacedrive.${LOCAL_DOMAIN}`) + traefik.http.routers.spacedrive-local-insecure.entrypoints: web + traefik.http.routers.spacedrive-local-insecure.service: spacedrive + traefik.http.routers.spacedrive-local-insecure.middlewares: spacedrive-web-redirect + # Local domain secure + traefik.http.routers.spacedrive-local.rule: Host(`spacedrive.${LOCAL_DOMAIN}`) + traefik.http.routers.spacedrive-local.entrypoints: websecure + traefik.http.routers.spacedrive-local.service: spacedrive + traefik.http.routers.spacedrive-local.tls: true diff --git a/apps/spacedrive/metadata/description.md b/apps/spacedrive/metadata/description.md new file mode 100755 index 00000000..396300b5 --- /dev/null +++ b/apps/spacedrive/metadata/description.md @@ -0,0 +1,18 @@ +# Spacedrive + +Spacedrive is an open source cross-platform file manager, powered by a virtual distributed filesystem (VDFS) written in Rust. + +Organize files across many devices in one place. From cloud services to offline hard drives, Spacedrive combines the storage capacity and processing power of your devices into one personal distributed cloud, that is both secure and intuitive to use. + +For independent creatives, hoarders and those that want to own their digital footprint, Spacedrive provides a free file management experience like no other. + +--- + +![](https://github.com/spacedriveapp/spacedrive/raw/main/apps/landing/public/github.webp?raw=true) + +--- + +## What is a VDFS? +A VDFS (virtual distributed filesystem) is a filesystem designed to work across a variety of storage layers. With a uniform API to manipulate and access content across many devices, VDFS is not restricted to a single machine. It achieves this by maintaining a virtual index of all storage locations, synchronizing the database between clients in realtime. This implementation also uses CAS (Content-addressable storage) to uniquely identify files, while keeping record of logical file paths relative to the storage locations. + +The first implementation of a VDFS can be found in this UC Berkeley paper by Haoyuan Li. This paper describes its use for cloud computing, however the underlying concepts can be translated to open consumer software. diff --git a/apps/spacedrive/metadata/logo.jpg b/apps/spacedrive/metadata/logo.jpg new file mode 100755 index 0000000000000000000000000000000000000000..ecd752b04abf163117858f9043bd70ec2a9c91be GIT binary patch literal 34287 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 L{maPs@B9A&_zTWa literal 0 HcmV?d00001