From 5e91df714f673c6ce86d8eda4a1e27cda8c43e18 Mon Sep 17 00:00:00 2001 From: DrMxrcy Date: Mon, 20 Mar 2023 08:26:00 -0400 Subject: [PATCH 1/2] Add Duplicati --- README.md | 1 + apps/App-Simple-Template/config.json | 16 +++++++ apps/App-Simple-Template/docker-compose.yml | 26 ++++++++++ .../metadata/description.md | 45 ++++++++++++++++++ apps/App-Simple-Template/metadata/logo.jpg | Bin 0 -> 5201 bytes 5 files changed, 88 insertions(+) create mode 100644 apps/App-Simple-Template/config.json create mode 100644 apps/App-Simple-Template/docker-compose.yml create mode 100644 apps/App-Simple-Template/metadata/description.md create mode 100644 apps/App-Simple-Template/metadata/logo.jpg diff --git a/README.md b/README.md index 4bc43a42..bfd920e7 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Codex.Docs](https://github.com/codex-team/codex.docst) - Free Docs app powered by Editor.js ecosystem. - [Deluge](https://github.com/linuxserver/docker-deluge) - Deluge is a lightweight, Free Software, cross-platform BitTorrent client - [DokuWiki](https://github.com/dokuwiki/dokuwiki) - DokuWiki is a simple to use and highly versatile Open Source wiki software +- [Duplicati](https://github.com/linuxserver/docker-duplicati) - Store securely encrypted backups in the cloud! - [Filebrowser](https://github.com/filebrowser/filebrowser) - Web File Browser - [Firefly III](https://github.com/firefly-iii/firefly-iii) - A personal finances manager - [Fireshare](https://github.com/ShaneIsrael/fireshare) - Self host your media and share with unique links diff --git a/apps/App-Simple-Template/config.json b/apps/App-Simple-Template/config.json new file mode 100644 index 00000000..3167b2b9 --- /dev/null +++ b/apps/App-Simple-Template/config.json @@ -0,0 +1,16 @@ +{ + "$schema": "../schema.json", + "name": "Duplicati", + "port": 8159, + "available": true, + "exposable": true, + "id": "duplicati", + "tipi_version": 1, + "version": "2.0.6", + "categories": ["data"], + "description": "Duplicati is a free, open source, backup client that securely stores encrypted, incremental, compressed backups on cloud storage services and remote file servers.", + "short_desc": "Store securely encrypted backups in the cloud!", + "author": "https://github.com/duplicati", + "source": "https://github.com/linuxserver/docker-duplicati", + "form_fields": [] +} diff --git a/apps/App-Simple-Template/docker-compose.yml b/apps/App-Simple-Template/docker-compose.yml new file mode 100644 index 00000000..00f44aeb --- /dev/null +++ b/apps/App-Simple-Template/docker-compose.yml @@ -0,0 +1,26 @@ +version: "3" + +services: + duplicati: + container_name: duplicati + image: lscr.io/linuxserver/duplicati:2.0.6 + ports: + - ${APP_PORT}:8200 + volumes: + - ${APP_DATA_DIR}/data/duplicati-config:/config + - ${ROOT_FOLDER_HOST}:/backups/runtipi-folder + - /home:/source + environment: + - PUID=1000 + - PGID=1000 + - TZ=${TZ} + networks: + - tipi_main_network + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.duplicati.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.duplicati.entrypoints: websecure + traefik.http.routers.duplicati.service: duplicati + traefik.http.routers.duplicati.tls.certresolver: myresolver + traefik.http.services.duplicati.loadbalancer.server.port: 8200 + diff --git a/apps/App-Simple-Template/metadata/description.md b/apps/App-Simple-Template/metadata/description.md new file mode 100644 index 00000000..3f32393f --- /dev/null +++ b/apps/App-Simple-Template/metadata/description.md @@ -0,0 +1,45 @@ +# Folder Info + +By Defualt, The template has a few folders mounted +- /backups/runtipi-folder - Tipi Root Folder +- /source - Home Directory + +# Duplicati + +Store securely encrypted backups on cloud storage services! + +Duplicati is a free, open source, backup client that securely stores encrypted, incremental, compressed backups on cloud storage services and remote file servers. It works with: + +   _Amazon S3, [IDrive e2](https://www.idrive.com/e2/duplicati "Using Duplicati with IDrive e2"), [Backblaze (B2)](https://www.backblaze.com/blog/duplicati-backups-cloud-storage/ "Duplicati with Backblaze B2 Cloud Storage"), Box, Dropbox, FTP, Google Cloud and Drive, HubiC, MEGA, Microsoft Azure and OneDrive, Rackspace Cloud Files, OpenStack Storage (Swift), Sia, Storj DCS, SSH (SFTP), WebDAV, Tencent Cloud Object Storage (COS), [and more!](https://duplicati.readthedocs.io/en/latest/01-introduction/#supported-backends)_ + +Duplicati is licensed under LGPL and available for Windows, OSX and Linux (.NET 4.7.1+ or Mono 5.10.0+ required). + +# [](https://github.com/duplicati/duplicati#support)Support + +Duplicati is supported by an [active community and you can reach them via our forum](https://forum.duplicati.com). + +We have a great [Duplicati manual](https://docs.duplicati.com) that you can also [contribute to](https://github.com/kees-z/DuplicatiDocs). + +# [](https://github.com/duplicati/duplicati#features)Features + +- Duplicati uses AES-256 encryption (or GNU Privacy Guard) to secure all data before it is uploaded. +- Duplicati uploads a full backup initially and stores smaller, incremental updates afterwards to save bandwidth and storage space. +- A scheduler keeps backups up-to-date automatically. +- Integrated updater notifies you when a new release is out +- Encrypted backup files are transferred to targets like FTP, Cloudfiles, WebDAV, SSH (SFTP), Amazon S3 and others. +- Duplicati allows backups of folders, document types like e.g. documents or images, or custom filter rules. +- Duplicati is available as application with an easy-to-use user interface and as command line tool. +- Duplicati can make proper backups of opened or locked files using the Volume Snapshot Service (VSS) under Windows or the Logical Volume Manager (LVM) under Linux. This allows Duplicati to back up the Microsoft Outlook PST file while Outlook is running. +- Filters, deletion rules, transfer and bandwidth options, etc + +# [](https://github.com/duplicati/duplicati#why-use-duplicati)Why use Duplicati? + +Keep your data safe, store it far away, update your backup regularly! This is a simple rule but many backup solutions do not achieve that today. But Duplicati does! + +Keep your data safe! Bad guys on the Internet seem to look for interesting data everywhere. But people do not want to see any of their private data revealed anywhere. Duplicati provides strong encryption to make sure that your data looks like garbage to others. With a well chosen password your backup files will be more safe on a public webserver than your unencrypted files at home. + +Store your backup far away! The best backup is useless when it is destroyed together with its original data. Just assume that a fire destroys your office - would your backup survive? Duplicati stores backups on various remote file servers and it supports incremental backups so that only changed parts need to be transferred. This makes it easy to use a destination far away from the original data. + +Backup regularly! The worst case is that your backup is outdated simply because someone forgot to make a backup at the right time. Duplicati has a built-in scheduler, so that it's easy to have a regular, up-to-date backup. Furthermore, Duplicati uses file compression and is able to store incremental backups to save storage space and bandwidth. + +# [](https://github.com/duplicati/duplicati#contributing) \ No newline at end of file diff --git a/apps/App-Simple-Template/metadata/logo.jpg b/apps/App-Simple-Template/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5e26a862193c4105ee3cd28b20af2723feda7e28 GIT binary patch literal 5201 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 Date: Mon, 20 Mar 2023 21:28:14 +0100 Subject: [PATCH 2/2] fix(duplicati): wrong folder name and update logo --- apps/App-Simple-Template/metadata/logo.jpg | Bin 5201 -> 0 bytes .../config.json | 0 .../docker-compose.yml | 3 +-- .../metadata/description.md | 25 +++++++++--------- apps/duplicati/metadata/logo.jpg | Bin 0 -> 9449 bytes 5 files changed, 14 insertions(+), 14 deletions(-) delete mode 100644 apps/App-Simple-Template/metadata/logo.jpg rename apps/{App-Simple-Template => duplicati}/config.json (100%) rename apps/{App-Simple-Template => duplicati}/docker-compose.yml (98%) rename apps/{App-Simple-Template => duplicati}/metadata/description.md (57%) create mode 100644 apps/duplicati/metadata/logo.jpg diff --git a/apps/App-Simple-Template/metadata/logo.jpg b/apps/App-Simple-Template/metadata/logo.jpg deleted file mode 100644 index 5e26a862193c4105ee3cd28b20af2723feda7e28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5201 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 A4FCWD literal 0 HcmV?d00001