From 7b7979fd61556be86e10eac117a95e43e84e7e4d Mon Sep 17 00:00:00 2001 From: ed Date: Sun, 19 Mar 2023 21:45:35 +0000 Subject: [PATCH] add sftpgo to comparison + update docs --- README.md | 33 ++-- docs/versus.md | 375 +++++++++++++++++++++++---------------- scripts/docker/README.md | 1 + 3 files changed, 237 insertions(+), 172 deletions(-) diff --git a/README.md b/README.md index dd64eb3d..c96ccc51 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,12 @@ # πŸ’ΎπŸŽ‰ copyparty -* portable file sharing hub (py2/py3) [(on PyPI)](https://pypi.org/project/copyparty/) -* MIT-Licensed, 2019-05-26, ed @ irc.rizon.net +turn almost any device into a file server with resumable uploads/downloads using [*any*](#browser-support) web browser +* server only needs Python (2 or 3), all dependencies optional +* πŸ”Œ protocols: [http](#the-browser) // [ftp](#ftp-server) // [webdav](#webdav-server) // [smb/cifs](#smb-server) +* πŸ“± [android app](#android-app) // [iPhone shortcuts](#ios-shortcuts) -## summary - -turn your phone or raspi into a portable file server with resumable uploads/downloads using *any* web browser - -* server only needs Python (`2.7` or `3.3+`), all dependencies optional -* browse/upload with [IE4](#browser-support) / netscape4.0 on win3.11 (heh) -* protocols: [http](#the-browser) // [ftp](#ftp-server) // [webdav](#webdav-server) // [smb/cifs](#smb-server) -* [android app](#android-app) and [iPhone shortcuts](#ios-shortcuts) - -**[Get started](#quickstart)!** or visit the **[read-only demo server](https://a.ocv.me/pub/demo/)** πŸ‘€ running from a basement in finland +πŸ‘‰ **[Get started](#quickstart)!** or visit the **[read-only demo server](https://a.ocv.me/pub/demo/)** πŸ‘€ running from a basement in finland πŸ“· **screenshots:** [browser](#the-browser) // [upload](#uploading) // [unpost](#unpost) // [thumbnails](#thumbnails) // [search](#searching) // [fsearch](#file-search) // [zip-DL](#zip-downloads) // [md-viewer](#markdown-viewer) @@ -84,6 +77,7 @@ turn your phone or raspi into a portable file server with resumable uploads/down * [security](#security) - some notes on hardening * [gotchas](#gotchas) - behavior that might be unexpected * [cors](#cors) - cross-site request config + * [https](#https) - both HTTP and HTTPS are accepted * [recovering from crashes](#recovering-from-crashes) * [client crashes](#client-crashes) * [frefox wsod](#frefox-wsod) - firefox 87 can crash during uploads @@ -274,7 +268,7 @@ server notes: * iPhones: the volume control doesn't work because [apple doesn't want it to](https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html#//apple_ref/doc/uid/TP40009523-CH5-SW11) * *future workaround:* enable the equalizer, make it all-zero, and set a negative boost to reduce the volume - * "future" because `AudioContext` is broken in the current iOS version (15.1), maybe one day... + * "future" because `AudioContext` can't maintain a stable playback speed in the current iOS version (15.7), maybe one day... * Windows: folders cannot be accessed if the name ends with `.` * python or windows bug @@ -1098,13 +1092,15 @@ see the top of [./copyparty/web/browser.css](./copyparty/web/browser.css) where ## reverse-proxy -running copyparty next to other websites hosted on an existing webserver such as nginx or apache +running copyparty next to other websites hosted on an existing webserver such as nginx, caddy, or apache you can either: * give copyparty its own domain or subdomain (recommended) * or do location-based proxying, using `--rp-loc=/stuff` to tell copyparty where it is mounted -- has a slight performance cost and higher chance of bugs * if copyparty says `incorrect --rp-loc or webserver config; expected vpath starting with [...]` it's likely because the webserver is stripping away the proxy location from the request URLs -- see the `ProxyPass` in the apache example below +some reverse proxies (such as [Caddy](https://caddyserver.com/)) can automatically obtain a valid https/tls certificate for you, and some support HTTP/2 and QUIC which could be a nice speed boost + example webserver configs: * [nginx config](contrib/nginx/copyparty.conf) -- entire domain/subdomain @@ -1234,7 +1230,7 @@ if you want to run the copyparty server on your android device, see [install on # iOS shortcuts -there is no iPhone app, but the following shortcuts are almost just as good: +there is no iPhone app, but the following shortcuts are almost as good: * [upload to copyparty](https://www.icloud.com/shortcuts/41e98dd985cb4d3bb433222bc1e9e770) ([offline](https://github.com/9001/copyparty/raw/hovudstraum/contrib/ios/upload-to-copyparty.shortcut)) ([png](https://user-images.githubusercontent.com/241032/226118053-78623554-b0ed-482e-98e4-6d57ada58ea4.png)) based on the [original](https://www.icloud.com/shortcuts/ab415d5b4de3467b9ce6f151b439a5d7) by [Daedren](https://github.com/Daedren) (thx!) * can strip exif, upload files, pics, vids, links, clipboard @@ -1337,6 +1333,13 @@ by default, except for `GET` and `HEAD` operations, all requests must either: cors can be configured with `--acao` and `--acam`, or the protections entirely disabled with `--allow-csrf` +## https + +both HTTP and HTTPS are accepted by default, but letting a [reverse proxy](#reverse-proxy) handle the https/tls/ssl would be better (probably more secure by default) + +copyparty doesn't speak HTTP/2 or QUIC, so using a reverse proxy would solve that as well + + # recovering from crashes ## client crashes diff --git a/docs/versus.md b/docs/versus.md index cffc9f9f..80735b39 100644 --- a/docs/versus.md +++ b/docs/versus.md @@ -17,6 +17,7 @@ currently up to date with [awesome-selfhosted](https://github.com/awesome-selfho ### ...in reviews: * βœ… = advantages over copyparty + * πŸ’Ύ = what copyparty offers as an alternative * πŸ”΅ = similarities * ⚠️ = disadvantages (something copyparty does "better") @@ -46,6 +47,7 @@ currently up to date with [awesome-selfhosted](https://github.com/awesome-selfho * [kodbox](#kodbox) * [filebrowser](#filebrowser) * [filegator](#filegator) + * [sftpgo](#sftpgo) * [updog](#updog) * [goshs](#goshs) * [gimme-that](#gimme-that) @@ -53,6 +55,7 @@ currently up to date with [awesome-selfhosted](https://github.com/awesome-selfho * [linx](#linx) * [h5ai](#h5ai) * [autoindex](#autoindex) + * [miniserve](#miniserve) * [briefly considered](#briefly-considered) @@ -89,6 +92,7 @@ the softwares, * `i` = [kodbox](https://github.com/kalcaddle/kodbox) * `j` = [filebrowser](https://github.com/filebrowser/filebrowser) * `k` = [filegator](https://github.com/filegator/filegator) +* `l` = [sftpgo](https://github.com/drakkan/sftpgo) some softwares not in the matrixes, * [updog](#updog) @@ -96,6 +100,9 @@ some softwares not in the matrixes, * [gimme-that](#gimmethat) * [ass](#ass) * [linx](#linx) +* [h5ai](#h5ai) +* [autoindex](#autoindex) +* [miniserve](#miniserve) symbol legend, * `β–ˆ` = absolutely @@ -106,62 +113,64 @@ symbol legend, ## general -| feature / software | a | b | c | d | e | f | g | h | i | j | k | -| ----------------------- | - | - | - | - | - | - | - | - | - | - | - | -| intuitive UX | | β•± | β–ˆ | β–ˆ | β–ˆ | | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | -| config GUI | | β–ˆ | β–ˆ | β–ˆ | β–ˆ | | | β–ˆ | β–ˆ | β–ˆ | | -| good documentation | | | | β–ˆ | β–ˆ | β–ˆ | β–ˆ | | | β–ˆ | β–ˆ | -| runs on iOS | β•± | | | | | β•± | | | | | | -| runs on Android | β–ˆ | | | | | β–ˆ | | | | | | -| runs on WinXP | β–ˆ | β–ˆ | | | | β–ˆ | | | | | | -| runs on Windows | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β•± | β–ˆ | β–ˆ | β–ˆ | -| runs on Linux | β–ˆ | β•± | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | -| runs on Macos | β–ˆ | | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | -| runs on FreeBSD | β–ˆ | | | β€’ | β–ˆ | β–ˆ | β–ˆ | β€’ | β–ˆ | β–ˆ | | -| portable binary | β–ˆ | β–ˆ | β–ˆ | | | β–ˆ | β–ˆ | | | β–ˆ | | -| zero setup, just go | β–ˆ | β–ˆ | β–ˆ | | | β•± | β–ˆ | | | β–ˆ | | -| android app | β•± | | | β–ˆ | β–ˆ | | | | | | | -| iOS app | | | | β–ˆ | β–ˆ | | | | | | | +| feature / software | a | b | c | d | e | f | g | h | i | j | k | l | +| ----------------------- | - | - | - | - | - | - | - | - | - | - | - | - | +| intuitive UX | | β•± | β–ˆ | β–ˆ | β–ˆ | | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | +| config GUI | | β–ˆ | β–ˆ | β–ˆ | β–ˆ | | | β–ˆ | β–ˆ | β–ˆ | | β–ˆ | +| good documentation | | | | β–ˆ | β–ˆ | β–ˆ | β–ˆ | | | β–ˆ | β–ˆ | β•± | +| runs on iOS | β•± | | | | | β•± | | | | | | | +| runs on Android | β–ˆ | | | | | β–ˆ | | | | | | | +| runs on WinXP | β–ˆ | β–ˆ | | | | β–ˆ | | | | | | | +| runs on Windows | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β•± | β–ˆ | β–ˆ | β–ˆ | β–ˆ | +| runs on Linux | β–ˆ | β•± | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | +| runs on Macos | β–ˆ | | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | +| runs on FreeBSD | β–ˆ | | | β€’ | β–ˆ | β–ˆ | β–ˆ | β€’ | β–ˆ | β–ˆ | | β–ˆ | +| portable binary | β–ˆ | β–ˆ | β–ˆ | | | β–ˆ | β–ˆ | | | β–ˆ | | β–ˆ | +| zero setup, just go | β–ˆ | β–ˆ | β–ˆ | | | β•± | β–ˆ | | | β–ˆ | | β•± | +| android app | β•± | | | β–ˆ | β–ˆ | | | | | | | | +| iOS app | β•± | | | β–ˆ | β–ˆ | | | | | | | | * `zero setup` = you can get a mostly working setup by just launching the app, without having to install any software or configure whatever * `a`/copyparty remarks: * no gui for server settings; only for client-side stuff * can theoretically run on iOS / iPads using [iSH](https://ish.app/), but only the iPad will offer sufficient multitasking i think * [android app](https://f-droid.org/en/packages/me.ocv.partyup/) is for uploading only + * no iOS app but has [shortcuts](https://github.com/9001/copyparty#ios-shortcuts) for easy uploading * `b`/hfs2 runs on linux through wine * `f`/rclone must be started with the command `rclone serve webdav .` or similar * `h`/chibisafe has undocumented windows support +* `i`/sftpgo must be launched with a command ## file transfer *the thing that copyparty is actually kinda good at* -| feature / software | a | b | c | d | e | f | g | h | i | j | k | -| ----------------------- | - | - | - | - | - | - | - | - | - | - | - | -| download folder as zip | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | | β–ˆ | | β–ˆ | β–ˆ | β•± | -| download folder as tar | β–ˆ | | | | | | | | | β–ˆ | | -| upload | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | -| parallel uploads | β–ˆ | | | β–ˆ | β–ˆ | | β€’ | | β–ˆ | | β–ˆ | -| resumable uploads | β–ˆ | | | | | | | | β–ˆ | | β–ˆ | -| upload segmenting | β–ˆ | | | | | | | β–ˆ | β–ˆ | | β–ˆ | -| upload acceleration | β–ˆ | | | | | | | | β–ˆ | | β–ˆ | -| upload verification | β–ˆ | | | β–ˆ | β–ˆ | | | | β–ˆ | | | -| upload deduplication | β–ˆ | | | | β–ˆ | | | | β–ˆ | | | -| upload a 999 TiB file | β–ˆ | | | | β–ˆ | β–ˆ | β€’ | | β–ˆ | | β–ˆ | -| keep last-modified time | β–ˆ | | | β–ˆ | β–ˆ | β–ˆ | | | | | | -| upload rules | β•± | β•± | β•± | β•± | β•± | | | β•± | β•± | | β•± | -| β”— max disk usage | β–ˆ | β–ˆ | | | β–ˆ | | | | β–ˆ | | | -| β”— max filesize | β–ˆ | | | | | | | β–ˆ | | | β–ˆ | -| β”— max items in folder | β–ˆ | | | | | | | | | | | -| β”— max file age | β–ˆ | | | | | | | | β–ˆ | | | -| β”— max uploads over time | β–ˆ | | | | | | | | | | | -| β”— compress before write | β–ˆ | | | | | | | | | | | -| β”— randomize filename | β–ˆ | | | | | | | β–ˆ | β–ˆ | | | -| β”— mimetype reject-list | β•± | | | | | | | | β€’ | β•± | | -| β”— extension reject-list | β•± | | | | | | | β–ˆ | β€’ | β•± | | -| checksums provided | | | | β–ˆ | β–ˆ | | | | β–ˆ | β•± | | -| cloud storage backend | β•± | β•± | β•± | β–ˆ | β–ˆ | β–ˆ | β•± | | | β•± | β–ˆ | +| feature / software | a | b | c | d | e | f | g | h | i | j | k | l | +| ----------------------- | - | - | - | - | - | - | - | - | - | - | - | - | +| download folder as zip | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | | β–ˆ | | β–ˆ | β–ˆ | β•± | β–ˆ | +| download folder as tar | β–ˆ | | | | | | | | | β–ˆ | | | +| upload | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | +| parallel uploads | β–ˆ | | | β–ˆ | β–ˆ | | β€’ | | β–ˆ | | β–ˆ | | +| resumable uploads | β–ˆ | | | | | | | | β–ˆ | | β–ˆ | β•± | +| upload segmenting | β–ˆ | | | | | | | β–ˆ | β–ˆ | | β–ˆ | β•± | +| upload acceleration | β–ˆ | | | | | | | | β–ˆ | | β–ˆ | | +| upload verification | β–ˆ | | | β–ˆ | β–ˆ | | | | β–ˆ | | | | +| upload deduplication | β–ˆ | | | | β–ˆ | | | | β–ˆ | | | | +| upload a 999 TiB file | β–ˆ | | | | β–ˆ | β–ˆ | β€’ | | β–ˆ | | β–ˆ | β•± | +| keep last-modified time | β–ˆ | | | β–ˆ | β–ˆ | β–ˆ | | | | | | β–ˆ | +| upload rules | β•± | β•± | β•± | β•± | β•± | | | β•± | β•± | | β•± | β•± | +| β”— max disk usage | β–ˆ | β–ˆ | | | β–ˆ | | | | β–ˆ | | | β–ˆ | +| β”— max filesize | β–ˆ | | | | | | | β–ˆ | | | β–ˆ | β–ˆ | +| β”— max items in folder | β–ˆ | | | | | | | | | | | β•± | +| β”— max file age | β–ˆ | | | | | | | | β–ˆ | | | | +| β”— max uploads over time | β–ˆ | | | | | | | | | | | β•± | +| β”— compress before write | β–ˆ | | | | | | | | | | | | +| β”— randomize filename | β–ˆ | | | | | | | β–ˆ | β–ˆ | | | | +| β”— mimetype reject-list | β•± | | | | | | | | β€’ | β•± | | β•± | +| β”— extension reject-list | β•± | | | | | | | β–ˆ | β€’ | β•± | | β•± | +| checksums provided | | | | β–ˆ | β–ˆ | | | | β–ˆ | β•± | | | +| cloud storage backend | β•± | β•± | β•± | β–ˆ | β–ˆ | β–ˆ | β•± | | | β•± | β–ˆ | β–ˆ | * `upload segmenting` = files are sliced into chunks, making it possible to upload files larger than 100 MiB on cloudflare for example @@ -178,25 +187,29 @@ symbol legend, * can provide checksums for single files on request * can probably do extension/mimetype rejection similar to copyparty * `k`/filegator download-as-zip is not streaming; it creates the full zipfile before download can start +* `l`/sftpgo: + * resumable/segmented uploads only over SFTP, not over HTTP + * upload rules are totals only, not over time + * can probably do extension/mimetype rejection similar to copyparty ## protocols and client support -| feature / software | a | b | c | d | e | f | g | h | i | j | k | -| ----------------------- | - | - | - | - | - | - | - | - | - | - | - | -| serve https | β–ˆ | | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | -| serve webdav | β–ˆ | | | β–ˆ | β–ˆ | β–ˆ | β–ˆ | | β–ˆ | | | -| serve ftp | β–ˆ | | | | | β–ˆ | | | | | | -| serve ftps | β–ˆ | | | | | β–ˆ | | | | | | -| serve sftp | | | | | | β–ˆ | | | | | | -| serve smb/cifs | β•± | | | | | β–ˆ | | | | | | -| serve dlna | | | | | | β–ˆ | | | | | | -| listen on unix-socket | | | | β–ˆ | β–ˆ | | β–ˆ | β–ˆ | β–ˆ | | β–ˆ | -| zeroconf | β–ˆ | | | | | | | | | | | -| supports netscape 4 | β•± | | | | | β–ˆ | | | | | β€’ | -| ...internet explorer 6 | β•± | β–ˆ | | β–ˆ | | β–ˆ | | | | | β€’ | -| mojibake filenames | β–ˆ | | | β€’ | β€’ | β–ˆ | β–ˆ | β€’ | β€’ | β€’ | | -| undecodable filenames | β–ˆ | | | β€’ | β€’ | β–ˆ | | β€’ | β€’ | | | +| feature / software | a | b | c | d | e | f | g | h | i | j | k | l | +| ----------------------- | - | - | - | - | - | - | - | - | - | - | - | - | +| serve https | β–ˆ | | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | +| serve webdav | β–ˆ | | | β–ˆ | β–ˆ | β–ˆ | β–ˆ | | β–ˆ | | | β–ˆ | +| serve ftp | β–ˆ | | | | | β–ˆ | | | | | | β–ˆ | +| serve ftps | β–ˆ | | | | | β–ˆ | | | | | | β–ˆ | +| serve sftp | | | | | | β–ˆ | | | | | | β–ˆ | +| serve smb/cifs | β•± | | | | | β–ˆ | | | | | | | +| serve dlna | | | | | | β–ˆ | | | | | | | +| listen on unix-socket | | | | β–ˆ | β–ˆ | | β–ˆ | β–ˆ | β–ˆ | | β–ˆ | β–ˆ | +| zeroconf | β–ˆ | | | | | | | | | | | | +| supports netscape 4 | β•± | | | | | β–ˆ | | | | | β€’ | | +| ...internet explorer 6 | β•± | β–ˆ | | β–ˆ | | β–ˆ | | | | | β€’ | | +| mojibake filenames | β–ˆ | | | β€’ | β€’ | β–ˆ | β–ˆ | β€’ | β€’ | β€’ | | β•± | +| undecodable filenames | β–ˆ | | | β€’ | β€’ | β–ˆ | | β€’ | β€’ | | | β•± | * `webdav` = protocol convenient for mounting a remote server as a local filesystem; see zeroconf: * `zeroconf` = the server announces itself on the LAN, [automatically appearing](https://user-images.githubusercontent.com/241032/215344737-0eae8d98-9496-4256-9aa8-cd2f6971810d.png) on other zeroconf-capable devices @@ -206,57 +219,62 @@ symbol legend, * `a`/copyparty remarks: * extremely minimal samba/cifs server * netscape 4 / ie6 support is mostly listed as a joke altho some people have actually found it useful ([ie4 tho](https://user-images.githubusercontent.com/241032/118192791-fb31fe00-b446-11eb-9647-898ea8efc1f7.png)) +* `l`/sftpgo translates mojibake filenames into valid utf-8 (information loss) ## server configuration -| feature / software | a | b | c | d | e | f | g | h | i | j | k | -| ----------------------- | - | - | - | - | - | - | - | - | - | - | - | -| config from cmd args | β–ˆ | | | | | β–ˆ | β–ˆ | | | β–ˆ | | -| config files | β–ˆ | β–ˆ | β–ˆ | β•± | β•± | β–ˆ | | β–ˆ | | β–ˆ | β€’ | -| runtime config reload | β–ˆ | β–ˆ | β–ˆ | | | | | β–ˆ | β–ˆ | β–ˆ | β–ˆ | -| same-port http / https | β–ˆ | | | | | | | | | | | -| listen multiple ports | β–ˆ | | | | | | | | | | | -| virtual file system | β–ˆ | β–ˆ | β–ˆ | | | | β–ˆ | | | | | -| reverse-proxy ok | β–ˆ | | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β€’ | β€’ | β€’ | -| folder-rproxy ok | β–ˆ | | | | β–ˆ | β–ˆ | | β€’ | β€’ | β€’ | β€’ | +| feature / software | a | b | c | d | e | f | g | h | i | j | k | l | +| ----------------------- | - | - | - | - | - | - | - | - | - | - | - | - | +| config from cmd args | β–ˆ | | | | | β–ˆ | β–ˆ | | | β–ˆ | | β•± | +| config files | β–ˆ | β–ˆ | β–ˆ | β•± | β•± | β–ˆ | | β–ˆ | | β–ˆ | β€’ | β•± | +| runtime config reload | β–ˆ | β–ˆ | β–ˆ | | | | | β–ˆ | β–ˆ | β–ˆ | β–ˆ | | +| same-port http / https | β–ˆ | | | | | | | | | | | | +| listen multiple ports | β–ˆ | | | | | | | | | | | β–ˆ | +| virtual file system | β–ˆ | β–ˆ | β–ˆ | | | | β–ˆ | | | | | β–ˆ | +| reverse-proxy ok | β–ˆ | | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β€’ | β€’ | β€’ | β–ˆ | +| folder-rproxy ok | β–ˆ | | | | β–ˆ | β–ˆ | | β€’ | β€’ | β€’ | β€’ | | * `folder-rproxy` = reverse-proxying without dedicating an entire (sub)domain, using a subfolder instead +* `l`/sftpgo: + * config: users must be added through gui / api calls ## server capabilities -| feature / software | a | b | c | d | e | f | g | h | i | j | k | -| ----------------------- | - | - | - | - | - | - | - | - | - | - | - | -| accounts | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | -| single-sign-on | | | | β–ˆ | β–ˆ | | | | β€’ | | | -| token auth | | | | β–ˆ | β–ˆ | | | β–ˆ | | | | -| per-volume permissions | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | | β–ˆ | β–ˆ | β•± | -| per-folder permissions | β•± | | | β–ˆ | β–ˆ | | β–ˆ | | β–ˆ | β–ˆ | β•± | -| per-file permissions | | | | β–ˆ | β–ˆ | | β–ˆ | | β–ˆ | | | -| per-file passwords | β–ˆ | | | β–ˆ | β–ˆ | | β–ˆ | | β–ˆ | | | -| unmap subfolders | β–ˆ | | | | | | β–ˆ | | | β–ˆ | β•± | -| index.html blocks list | | | | | | | β–ˆ | | | β€’ | | -| write-only folders | β–ˆ | | | | | | | | | | β–ˆ | -| files stored as-is | β–ˆ | β–ˆ | β–ˆ | β–ˆ | | β–ˆ | β–ˆ | | | β–ˆ | β–ˆ | -| file versioning | | | | β–ˆ | β–ˆ | | | | | | | -| file encryption | | | | β–ˆ | β–ˆ | β–ˆ | | | | | | -| file indexing | β–ˆ | | β–ˆ | β–ˆ | β–ˆ | | | β–ˆ | β–ˆ | β–ˆ | | -| β”— per-volume db | β–ˆ | | β€’ | β€’ | β€’ | | | β€’ | β€’ | | | -| β”— db stored in folder | β–ˆ | | | | | | | β€’ | β€’ | β–ˆ | | -| β”— db stored out-of-tree | β–ˆ | | β–ˆ | β–ˆ | β–ˆ | | | β€’ | β€’ | β–ˆ | | -| β”— existing file tree | β–ˆ | | β–ˆ | | | | | | | β–ˆ | | -| file action event hooks | β–ˆ | | | | | | | | | β–ˆ | | -| one-way folder sync | β–ˆ | | | β–ˆ | β–ˆ | β–ˆ | | | | | | -| full sync | | | | β–ˆ | β–ˆ | | | | | | | -| speed throttle | | β–ˆ | β–ˆ | | | β–ˆ | | | β–ˆ | | | -| anti-bruteforce | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | | | | β€’ | | | -| dyndns updater | | β–ˆ | | | | | | | | | | -| self-updater | | | β–ˆ | | | | | | | | | -| log rotation | β–ˆ | | β–ˆ | β–ˆ | β–ˆ | | | β€’ | β–ˆ | | | -| upload tracking / log | β–ˆ | β–ˆ | β€’ | β–ˆ | β–ˆ | | | β–ˆ | β–ˆ | | | -| curl-friendly ls | β–ˆ | | | | | | | | | | | -| curl-friendly upload | β–ˆ | | | | | β–ˆ | β–ˆ | β€’ | | | | +| feature / software | a | b | c | d | e | f | g | h | i | j | k | l | +| ----------------------- | - | - | - | - | - | - | - | - | - | - | - | - | +| accounts | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | +| per-account chroot | | | | | | | | | | | | β–ˆ | +| single-sign-on | | | | β–ˆ | β–ˆ | | | | β€’ | | | | +| token auth | | | | β–ˆ | β–ˆ | | | β–ˆ | | | | | +| 2fa | | | | β–ˆ | β–ˆ | | | | | | | β–ˆ | +| per-volume permissions | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | | β–ˆ | β–ˆ | β•± | β–ˆ | +| per-folder permissions | β•± | | | β–ˆ | β–ˆ | | β–ˆ | | β–ˆ | β–ˆ | β•± | β–ˆ | +| per-file permissions | | | | β–ˆ | β–ˆ | | β–ˆ | | β–ˆ | | | | +| per-file passwords | β–ˆ | | | β–ˆ | β–ˆ | | β–ˆ | | β–ˆ | | | | +| unmap subfolders | β–ˆ | | | | | | β–ˆ | | | β–ˆ | β•± | β€’ | +| index.html blocks list | | | | | | | β–ˆ | | | β€’ | | | +| write-only folders | β–ˆ | | | | | | | | | | β–ˆ | β–ˆ | +| files stored as-is | β–ˆ | β–ˆ | β–ˆ | β–ˆ | | β–ˆ | β–ˆ | | | β–ˆ | β–ˆ | β–ˆ | +| file versioning | | | | β–ˆ | β–ˆ | | | | | | | | +| file encryption | | | | β–ˆ | β–ˆ | β–ˆ | | | | | | β–ˆ | +| file indexing | β–ˆ | | β–ˆ | β–ˆ | β–ˆ | | | β–ˆ | β–ˆ | β–ˆ | | | +| β”— per-volume db | β–ˆ | | β€’ | β€’ | β€’ | | | β€’ | β€’ | | | | +| β”— db stored in folder | β–ˆ | | | | | | | β€’ | β€’ | β–ˆ | | | +| β”— db stored out-of-tree | β–ˆ | | β–ˆ | β–ˆ | β–ˆ | | | β€’ | β€’ | β–ˆ | | | +| β”— existing file tree | β–ˆ | | β–ˆ | | | | | | | β–ˆ | | | +| file action event hooks | β–ˆ | | | | | | | | | β–ˆ | | β–ˆ | +| one-way folder sync | β–ˆ | | | β–ˆ | β–ˆ | β–ˆ | | | | | | | +| full sync | | | | β–ˆ | β–ˆ | | | | | | | | +| speed throttle | | β–ˆ | β–ˆ | | | β–ˆ | | | β–ˆ | | | β–ˆ | +| anti-bruteforce | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | | | | β€’ | | | β–ˆ | +| dyndns updater | | β–ˆ | | | | | | | | | | | +| self-updater | | | β–ˆ | | | | | | | | | | +| log rotation | β–ˆ | | β–ˆ | β–ˆ | β–ˆ | | | β€’ | β–ˆ | | | β–ˆ | +| upload tracking / log | β–ˆ | β–ˆ | β€’ | β–ˆ | β–ˆ | | | β–ˆ | β–ˆ | | | β•± | +| curl-friendly ls | β–ˆ | | | | | | | | | | | | +| curl-friendly upload | β–ˆ | | | | | β–ˆ | β–ˆ | β€’ | | | | | * `unmap subfolders` = "shadowing"; mounting a local folder in the middle of an existing filesystem tree in order to disable access below that path * `files stored as-is` = uploaded files are trivially readable from the server HDD, not sliced into chunks or in weird folder structures or anything like that @@ -277,49 +295,52 @@ symbol legend, * `k`/filegator remarks: * `per-* permissions` -- can limit a user to one folder and its subfolders * `unmap subfolders` -- can globally filter a list of paths +* `l`/sftpgo: + * `file action event hooks` also include on-download triggers + * `upload tracking / log` in main logfile ## client features -| feature / software | a | b | c | d | e | f | g | h | i | j | k | -| ---------------------- | - | - | - | - | - | - | - | - | - | - | - | -| single-page app | β–ˆ | | β–ˆ | β–ˆ | β–ˆ | | | β–ˆ | β–ˆ | β–ˆ | β–ˆ | -| themes | β–ˆ | β–ˆ | | β–ˆ | | | | | β–ˆ | | | -| directory tree nav | β–ˆ | β•± | | | β–ˆ | | | | β–ˆ | | β•± | -| multi-column sorting | β–ˆ | | | | | | | | | | | -| thumbnails | β–ˆ | | | β•± | β•± | | | β–ˆ | β–ˆ | β•± | | -| β”— image thumbnails | β–ˆ | | | β–ˆ | β–ˆ | | | β–ˆ | β–ˆ | β–ˆ | | -| β”— video thumbnails | β–ˆ | | | β–ˆ | β–ˆ | | | | β–ˆ | | | -| β”— audio spectrograms | β–ˆ | | | | | | | | | | | -| audio player | β–ˆ | | | β–ˆ | β–ˆ | | | | β–ˆ | β•± | | -| β”— gapless playback | β–ˆ | | | | | | | | β€’ | | | -| β”— audio equalizer | β–ˆ | | | | | | | | | | | -| β”— waveform seekbar | β–ˆ | | | | | | | | | | | -| β”— OS integration | β–ˆ | | | | | | | | | | | -| β”— transcode to lossy | β–ˆ | | | | | | | | | | | -| video player | β–ˆ | | | β–ˆ | β–ˆ | | | | β–ˆ | β–ˆ | | -| β”— video transcoding | | | | | | | | | β–ˆ | | | -| audio BPM detector | β–ˆ | | | | | | | | | | | -| audio key detector | β–ˆ | | | | | | | | | | | -| search by path / name | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | | β–ˆ | | β–ˆ | β–ˆ | β•± | -| search by date / size | β–ˆ | | | | β–ˆ | | | β–ˆ | β–ˆ | | | -| search by bpm / key | β–ˆ | | | | | | | | | | | -| search by custom tags | | | | | | | | β–ˆ | β–ˆ | | | -| search in file contents | | | | β–ˆ | β–ˆ | | | | β–ˆ | | | -| search by custom parser | β–ˆ | | | | | | | | | | | -| find local file | β–ˆ | | | | | | | | | | | -| undo recent uploads | β–ˆ | | | | | | | | | | | -| create directories | β–ˆ | | | β–ˆ | β–ˆ | β•± | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | -| image viewer | β–ˆ | | | β–ˆ | β–ˆ | | | | β–ˆ | β–ˆ | β–ˆ | -| markdown viewer | β–ˆ | | | | β–ˆ | | | | β–ˆ | β•± | β•± | -| markdown editor | β–ˆ | | | | β–ˆ | | | | β–ˆ | β•± | β•± | -| readme.md in listing | β–ˆ | | | β–ˆ | | | | | | | | -| rename files | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β•± | β–ˆ | | β–ˆ | β–ˆ | β–ˆ | -| batch rename | β–ˆ | | | | | | | | β–ˆ | | | -| cut / paste files | β–ˆ | β–ˆ | | β–ˆ | β–ˆ | | | | β–ˆ | | | -| move files | β–ˆ | β–ˆ | | β–ˆ | β–ˆ | | β–ˆ | | β–ˆ | β–ˆ | β–ˆ | -| delete files | β–ˆ | β–ˆ | | β–ˆ | β–ˆ | β•± | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | -| copy files | | | | | β–ˆ | | | | β–ˆ | β–ˆ | β–ˆ | +| feature / software | a | b | c | d | e | f | g | h | i | j | k | l | +| ---------------------- | - | - | - | - | - | - | - | - | - | - | - | - | +| single-page app | β–ˆ | | β–ˆ | β–ˆ | β–ˆ | | | β–ˆ | β–ˆ | β–ˆ | β–ˆ | | +| themes | β–ˆ | β–ˆ | | β–ˆ | | | | | β–ˆ | | | | +| directory tree nav | β–ˆ | β•± | | | β–ˆ | | | | β–ˆ | | β•± | | +| multi-column sorting | β–ˆ | | | | | | | | | | | | +| thumbnails | β–ˆ | | | β•± | β•± | | | β–ˆ | β–ˆ | β•± | | | +| β”— image thumbnails | β–ˆ | | | β–ˆ | β–ˆ | | | β–ˆ | β–ˆ | β–ˆ | | | +| β”— video thumbnails | β–ˆ | | | β–ˆ | β–ˆ | | | | β–ˆ | | | | +| β”— audio spectrograms | β–ˆ | | | | | | | | | | | | +| audio player | β–ˆ | | | β–ˆ | β–ˆ | | | | β–ˆ | β•± | | | +| β”— gapless playback | β–ˆ | | | | | | | | β€’ | | | | +| β”— audio equalizer | β–ˆ | | | | | | | | | | | | +| β”— waveform seekbar | β–ˆ | | | | | | | | | | | | +| β”— OS integration | β–ˆ | | | | | | | | | | | | +| β”— transcode to lossy | β–ˆ | | | | | | | | | | | | +| video player | β–ˆ | | | β–ˆ | β–ˆ | | | | β–ˆ | β–ˆ | | | +| β”— video transcoding | | | | | | | | | β–ˆ | | | | +| audio BPM detector | β–ˆ | | | | | | | | | | | | +| audio key detector | β–ˆ | | | | | | | | | | | | +| search by path / name | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | | β–ˆ | | β–ˆ | β–ˆ | β•± | | +| search by date / size | β–ˆ | | | | β–ˆ | | | β–ˆ | β–ˆ | | | | +| search by bpm / key | β–ˆ | | | | | | | | | | | | +| search by custom tags | | | | | | | | β–ˆ | β–ˆ | | | | +| search in file contents | | | | β–ˆ | β–ˆ | | | | β–ˆ | | | | +| search by custom parser | β–ˆ | | | | | | | | | | | | +| find local file | β–ˆ | | | | | | | | | | | | +| undo recent uploads | β–ˆ | | | | | | | | | | | | +| create directories | β–ˆ | | | β–ˆ | β–ˆ | β•± | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | +| image viewer | β–ˆ | | | β–ˆ | β–ˆ | | | | β–ˆ | β–ˆ | β–ˆ | | +| markdown viewer | β–ˆ | | | | β–ˆ | | | | β–ˆ | β•± | β•± | | +| markdown editor | β–ˆ | | | | β–ˆ | | | | β–ˆ | β•± | β•± | | +| readme.md in listing | β–ˆ | | | β–ˆ | | | | | | | | | +| rename files | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β•± | β–ˆ | | β–ˆ | β–ˆ | β–ˆ | β–ˆ | +| batch rename | β–ˆ | | | | | | | | β–ˆ | | | | +| cut / paste files | β–ˆ | β–ˆ | | β–ˆ | β–ˆ | | | | β–ˆ | | | | +| move files | β–ˆ | β–ˆ | | β–ˆ | β–ˆ | | β–ˆ | | β–ˆ | β–ˆ | β–ˆ | | +| delete files | β–ˆ | β–ˆ | | β–ˆ | β–ˆ | β•± | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | β–ˆ | +| copy files | | | | | β–ˆ | | | | β–ˆ | β–ˆ | β–ˆ | | * `single-page app` = multitasking; possible to continue navigating while uploading * `audio player Β» os-integration` = use the [lockscreen](https://user-images.githubusercontent.com/241032/142711926-0700be6c-3e31-47b3-9928-53722221f722.png) or [media hotkeys](https://user-images.githubusercontent.com/241032/215347492-b4250797-6c90-4e09-9a4c-721edf2fb15c.png) to play/pause, prev/next song @@ -335,20 +356,21 @@ symbol legend, ## integration -| feature / software | a | b | c | d | e | f | g | h | i | j | k | -| ----------------------- | - | - | - | - | - | - | - | - | - | - | - | -| OS alert on upload | β–ˆ | | | | | | | | | β•± | | -| discord | β–ˆ | | | | | | | | | β•± | | -| β”— announce uploads | β–ˆ | | | | | | | | | | | -| β”— custom embeds | | | | | | | | | | | | -| sharex | β–ˆ | | | β–ˆ | | β–ˆ | β•± | β–ˆ | | | | -| flameshot | | | | | | β–ˆ | | | | | | +| feature / software | a | b | c | d | e | f | g | h | i | j | k | l | +| ----------------------- | - | - | - | - | - | - | - | - | - | - | - | - | +| OS alert on upload | β–ˆ | | | | | | | | | β•± | | β•± | +| discord | β–ˆ | | | | | | | | | β•± | | β•± | +| β”— announce uploads | β–ˆ | | | | | | | | | | | β•± | +| β”— custom embeds | | | | | | | | | | | | β•± | +| sharex | β–ˆ | | | β–ˆ | | β–ˆ | β•± | β–ˆ | | | | | +| flameshot | | | | | | β–ˆ | | | | | | | * sharex `β•±` = yes, but does not provide example sharex config * `a`/copyparty remarks: * `OS alert on upload` available as [a plugin](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/notify.py) * `discord Β» announce uploads` available as [a plugin](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/discord-announce.py) * `j`/filebrowser can probably pull those off with command runners similar to copyparty +* `l`/sftpgo has nothing built-in but is very extensible ## another matrix @@ -366,6 +388,7 @@ symbol legend, | kodbox | php | β–‘ gpl3 | 92 MB | | filebrowser | go | β–ˆ apl2 | 20 MB | | filegator | php | β–ˆ mit | β€’ | +| sftpgo | go | β€Ό agpl | 44 MB | | updog | python | β–ˆ mit | 17 MB | | goshs | go | β–ˆ mit | 11 MB | | gimme-that | python | β–ˆ mit | 4.8 MB | @@ -379,6 +402,7 @@ symbol legend, # reviews * βœ… are advantages over copyparty + * πŸ’Ύ are what copyparty offers as an alternative * πŸ”΅ are similarities * ⚠️ are disadvantages (something copyparty does "better") @@ -412,10 +436,11 @@ symbol legend, * ⚠️ http/webdav only; no ftp, zeroconf * ⚠️ less awesome music player * ⚠️ doesn't run on android or ipads +* ⚠️ AGPL licensed * βœ… great ui/ux * βœ… config gui * βœ… apps (android / iphone) - * copyparty: android upload-only app + * πŸ’Ύ android upload-only app + iPhone upload shortcut * βœ… more granular permissions (per-file) * βœ… search: fulltext indexing of file contents * βœ… webauthn passwordless authentication @@ -430,10 +455,11 @@ symbol legend, * ⚠️ http/webdav only; no ftp, zeroconf * ⚠️ less awesome music player * ⚠️ doesn't run on android or ipads +* ⚠️ AGPL licensed * βœ… great ui/ux * βœ… config gui * βœ… apps (android / iphone) - * copyparty: android upload-only app + * πŸ’Ύ android upload-only app + iPhone upload shortcut * βœ… more granular permissions (per-file) * βœ… search: fulltext indexing of file contents @@ -467,7 +493,7 @@ symbol legend, * βœ… searchable image tags; delete by tag * βœ… browser extension to upload files to the server * βœ… reject uploads by file extension - * copyparty: can reject uploads [by extension](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/reject-extension.py) or [mimetype](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/reject-mimetype.py) using plugins + * πŸ’Ύ can reject uploads [by extension](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/reject-extension.py) or [mimetype](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/reject-mimetype.py) using plugins * βœ… token auth (api keys) ## [kodbox](https://github.com/kalcaddle/kodbox) @@ -512,6 +538,30 @@ symbol legend, * ⚠️ doesn't support crazy filenames * ⚠️ limited file search +## [sftpgo](https://github.com/drakkan/sftpgo) +* go; cross-platform (windows, linux, mac) +* ⚠️ http uploads not resumable / accelerated / integrity-checked + * ⚠️ on cloudflare: max upload size 100 MiB + * πŸ”΅ sftp uploads are resumable +* ⚠️ web UI is very minimal + a bit slow + * ⚠️ no thumbnails / image viewer / audio player + * ⚠️ basic file manager (no cut/paste/move) +* ⚠️ no filesystem indexing / search +* ⚠️ doesn't run on phones, tablets +* ⚠️ no zeroconf (mdns/ssdp) +* ⚠️ AGPL licensed +* πŸ”΅ ftp, ftps, webdav +* βœ… sftp server +* βœ… settings gui +* βœ… acme (automatic tls certs) + * πŸ’Ύ relies on caddy/certbot/acme.sh +* βœ… at-rest encryption + * πŸ’Ύ relies on LUKS/BitLocker +* βœ… can use S3/GCS as storage backend + * πŸ’Ύ relies on rclone-mount +* βœ… on-download event hook (otherwise same as copyparty) +* βœ… more extensive permissions control + ## [updog](https://github.com/sc0tfree/updog) * python; cross-platform * basic directory listing with upload feature @@ -526,7 +576,7 @@ symbol legend, * ⚠️ uploads not resumable / accelerated / integrity-checked * ⚠️ on cloudflare: max upload size 100 MiB * βœ… cool clipboard widget - * copyparty: the markdown editor is an ok substitute + * πŸ’Ύ the markdown editor is an ok substitute * πŸ”΅ read-only and upload-only modes (same as copyparty's write-only) * πŸ”΅ https, webdav, but no ftp @@ -538,7 +588,7 @@ symbol legend, * ⚠️ weird folder structure for uploads * βœ… clamav antivirus check on upload! neat * πŸ”΅ optional max-filesize, os-notification on uploads - * copyparty: os-notification available as [a plugin](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/notify.py) + * πŸ’Ύ os-notification available as [a plugin](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/notify.py) ## [ass](https://github.com/tycrek/ass) * nodejs; recommends docker @@ -549,12 +599,13 @@ symbol legend, * ⚠️ on cloudflare: max upload size 100 MiB * βœ… token auth * βœ… gps metadata stripping - * copyparty: possible with [a plugin](https://github.com/9001/copyparty/blob/hovudstraum/bin/mtag/image-noexif.py) + * πŸ’Ύ possible with [a plugin](https://github.com/9001/copyparty/blob/hovudstraum/bin/mtag/image-noexif.py) * βœ… discord integration (custom embeds, upload webhook) - * copyparty: [upload webhook plugin](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/discord-announce.py) + * πŸ’Ύ [upload webhook plugin](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/discord-announce.py) * βœ… reject uploads by mimetype - * copyparty: can reject uploads [by extension](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/reject-extension.py) or [mimetype](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/reject-mimetype.py) using plugins -* βœ… can use S3 as storage backend; copyparty relies on rclone-mount for that + * πŸ’Ύ can reject uploads [by extension](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/reject-extension.py) or [mimetype](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/reject-mimetype.py) using plugins +* βœ… can use S3 as storage backend + * πŸ’Ύ relies on rclone-mount * βœ… custom 404 pages ## [linx](https://github.com/ZizzyDizzyMC/linx-server/) @@ -564,12 +615,13 @@ symbol legend, * πŸ”΅ some of its unique features have been added to copyparty as former linx users have migrated * file expiration timers, filename randomization * βœ… password-protected files - * copyparty: password-protected folders + filekeys to skip the folder password seem to cover most usecases + * πŸ’Ύ password-protected folders + filekeys to skip the folder password seem to cover most usecases * βœ… file deletion keys * βœ… download files as torrents * βœ… remote uploads (send a link to the server and it downloads it) - * copyparty: available as [a plugin](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/wget.py) -* βœ… can use S3 as storage backend; copyparty relies on rclone-mount for that + * πŸ’Ύ available as [a plugin](https://github.com/9001/copyparty/blob/hovudstraum/bin/hooks/wget.py) +* βœ… can use S3 as storage backend + * πŸ’Ύ relies on rclone-mount ## [h5ai](https://larsjung.de/h5ai/) * ⚠️ read only; no upload/move/delete @@ -581,7 +633,16 @@ symbol legend, ## [autoindex](https://github.com/nielsAD/autoindex) * ⚠️ read only; no upload/move/delete * βœ… directory cache for faster browsing of cloud storage - * copyparty: local index/cache for recursive search (names/attrs/tags), but not for browsing + * πŸ’Ύ local index/cache for recursive search (names/attrs/tags), but not for browsing + +## [miniserve](https://github.com/svenstaro/miniserve) +* rust; cross-platform (windows, linux, mac) +* ⚠️ uploads not resumable / accelerated / integrity-checked + * ⚠️ on cloudflare: max upload size 100 MiB +* ⚠️ no thumbnails / image viewer / audio player / file manager +* ⚠️ no filesystem indexing / search +* πŸ”΅ upload, tar/zip download, qr-code +* βœ… faster at loading huge folders # briefly considered diff --git a/scripts/docker/README.md b/scripts/docker/README.md index 6971c1cb..78f4c181 100644 --- a/scripts/docker/README.md +++ b/scripts/docker/README.md @@ -14,6 +14,7 @@ docker run --rm -it -u 1000 -p 3923:3923 -v /mnt/nas:/w -v $PWD/cfgdir:/cfg copy * `/cfg` is an optional folder with zero or more config files (*.conf) to load * `copyparty/ac` is the recommended [image edition](#editions) * you can download the image from github instead by replacing `copyparty/ac` with `ghcr.io/9001/copyparty-ac` +* if you are using rootless podman, remove `-u 1000` i'm unfamiliar with docker-compose and alternatives so let me know if this section could be better πŸ™