From 95d4db2fff65f1d7d463c7c387cea635b3e57cfe Mon Sep 17 00:00:00 2001 From: Leon van Kammen Date: Tue, 5 Aug 2025 18:59:03 +0200 Subject: [PATCH] optimized rclone http server --- manyfold/README.md | 64 ++++++++++++++++++++++++- manyfold/cli/manyfold.sh | 2 + manyfold/root/hook.d/boot/httpserver.sh | 7 ++- 3 files changed, 69 insertions(+), 4 deletions(-) diff --git a/manyfold/README.md b/manyfold/README.md index 82944b9..ef1010e 100644 --- a/manyfold/README.md +++ b/manyfold/README.md @@ -27,6 +27,7 @@ $ docker load < $(nix-build nix/docker.nix) | `FEDERATE_DRIVE_PORT` | `3215` | specify default library where user-files are uploaded (regular dir or mounted rclone path) | | `FEDERATE_DRIVE_USER` | `` | specify HTTP AUTH credentials (`user` e.g.) for restricted sharing | | `FEDERATE_DRIVE_PW` | `` | specify HTTP AUTH credentials (`pass` e.g.) for restricted sharing | +| `FEDERATE_DRIVE_CACHE`| `1m0s` | specify interval to re-check all models/directories | # Default database / admin login @@ -41,7 +42,7 @@ $ docker load < $(nix-build nix/docker.nix) The server-image will boot `manyfold/cli/manyfold.sh boot` and check for directory `/manyfold` (in the container). When found, it uses the files in there instead (`/manyfold/usr/src/app/public/404.html` instead of `/usr/src/app/public/404.html` e.g.). -# Federated (remote) network-drives +# Federated drives (inbound) > Thanks to [rclone](https://rclone.org) network-drives automatically show up as manyfold libraries. @@ -60,12 +61,71 @@ Your drives will get automagically mounted and added to the database automagical TIP: use **alphanumeric** names for rclone remotes (manyfold libraries choke on dot- or other special-characters) -**Sharing [federating] a drive with other instances** By default environment-flag `FEDERATE_DRIVE_PATH` will share path `/mnt/models` as an open web directory. This means it can be added as remote by other instances. See the environment-flags for more options. +
+ **Example connect to other XRForge instance** +
+``` +$ rclone config +Current remotes: + +Name Type +==== ==== + +e) Edit existing remote +n) New remote +d) Delete remote +r) Rename remote +c) Copy remote +s) Set configuration password +q) Quit config +e/n/d/r/c/s/q> n + +Enter name for new remote. +name> xrforge_instanceC + +Option Storage. +Type of storage to configure. +Choose a number from below, or type in your own value. + +... +22 / HTTP +... + +Storage> 22 + +Option url. +URL of HTTP host to connect to. +E.g. "https://example.com", or "https://user:pass@example.com" to use a username and password. +Enter a value. +url> http://url-to-another-xrforge-instance.com + +Option no_escape. +Do not escape URL metacharacters in path names. +Enter a boolean value (true or false). Press Enter for the default (false). +no_escape> + +Edit advanced config? +y) Yes +n) No (default) +y/n> n + +Configuration complete. +Options: +- type: http +- url: http://localhost:8791 +Keep this "test" remote? +y) Yes this is OK (default) +e) Edit this remote +d) Delete this remote +y/e/d> y +``` +
+ # Unixy event hooks Until WebEvents [will get implemented on a REST-level in manyfold](https://github.com/orgs/manyfold3d/projects/4/views/1?filterQuery=Pub&pane=issue&itemId=108834509&issue=manyfold3d%7Cmanyfold%7C4097) Things like boot-phase, scheduler and file-changes can be reacted up via the `/root/hook.d` directory: diff --git a/manyfold/cli/manyfold.sh b/manyfold/cli/manyfold.sh index 2e3dac7..09abbd4 100755 --- a/manyfold/cli/manyfold.sh +++ b/manyfold/cli/manyfold.sh @@ -29,6 +29,7 @@ run(){ -e MULTIUSER=enabled \ -e FEDERATION=enabled \ -e THEME=vapor \ + -e FEDERATE_DRIVE_CACHE=5s \ --cap-add SYS_ADMIN --security-opt apparmor:unconfined --device /dev/fuse \ xrforge #ghcr.io/manyfold3d/manyfold-solo:latest @@ -172,6 +173,7 @@ boot(){ rclone_mount set_upload_path start_hook_daemon + hook boot # emit unixy hook-event (/root/hook.d/boot/* scripts) exec "$@" # exec prevents error 's6-overlay-suexec: fatal: can only run as pid 1' } diff --git a/manyfold/root/hook.d/boot/httpserver.sh b/manyfold/root/hook.d/boot/httpserver.sh index 8d90ff3..30d11f5 100755 --- a/manyfold/root/hook.d/boot/httpserver.sh +++ b/manyfold/root/hook.d/boot/httpserver.sh @@ -1,7 +1,7 @@ #!/bin/sh -set -x test -z "$FEDERATE_DRIVE_PATH" && FEDERATE_DRIVE_PATH=/mnt/models test -z "$FEDERATE_DRIVE_PORT" && FEDERATE_DRIVE_PORT=3215 +test -z "$FEDERATE_DRIVE_CACHE" && FEDERATE_DRIVE_CACHE=1m0s test "$FEDERATE_DRIVE_PATH" = 0 && exit 0 # nothing to do (disabled) @@ -9,4 +9,7 @@ test -n "$FEDERATE_DRIVE_USER" && test -m "$FEDERATE_DRIVE_PW" && { AUTH="--user $FEDERATE_DRIVE_USER --pass $FEDERATE_DRIVE_PW" } -rclone serve http --addr 0.0.0.0:$FEDERATE_DRIVE_PORT ${AUTH} $FEDERATE_DRIVE_PATH & +set -x +rclone serve http \ + --poll-interval $FEDERATE_DRIVE_CACHE \ + --addr 0.0.0.0:$FEDERATE_DRIVE_PORT ${AUTH} $FEDERATE_DRIVE_PATH &> /var/log/rclone.log &