xrforge/manyfold
2025-08-05 18:17:22 +02:00
..
cli fix/reproduce: work in progress [might break] 2025-08-05 18:17:22 +02:00
root fix/reproduce: work in progress [might break] 2025-08-05 18:17:22 +02:00
usr/src/app/app/views/models milestone 4g: manyfold.sh auto-generate experience.zip index.json on change (template: download zip) 2025-08-04 20:27:55 +02:00
manyfold.sql docker env $UPLOAD_PATH allows specifying default [upload] lib 2025-07-30 15:09:03 +02:00
README.md fix/reproduce: work in progress [might break] 2025-08-05 18:17:22 +02:00
xrforge.landscape.svg milestone 4g: manyfold.sh auto-generate experience.zip index.json on change (inotify) 2025-08-04 18:06:41 +02:00

Manyfold container

The XRForge-serverimage is a pre-configured Manyfold container (reproducably via nix dockertools). It also contains some extra's, to better fit an XR audience.

To run the container, see the sysadmin documentation of the manyfold project.

Build the container-image

$ docker load < $(nix-build nix/docker.nix)

Extra environment-variables

environment variable default info
APPNAME manyfold manyfold instance name
THEME default bootstrap theme
NO_OVERLAYFS `` disable the filesystem overlay mechanism
NO_DEFAULTDB `` disable the default db (activates manyfold installer)
NO_DELETEBIGFILES `` disable deleting big files which are older than 5 days and bigger than ($currentyear-2020) MB's
NO_PACKAGEALL `` don't package all experiences every hour to /usr/src/app/public/experiences.zip
RCLONE_REMOTE `` specify single rclone remote name (without semicolon) to mount (default: mount all rclone remotes)
UPLOAD_PATH /mnt/models specify default library where user-files are uploaded (regular dir or mounted rclone path)
FEDERATE_DRIVE_PATH /mnt/models serve path over HTTP (so other instances can add it as a remote). Specify 0 to disable
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

Default database / admin login

  • email: xrforge@localhost
  • login: xrforge
  • password: xrforge!1

please modify the password in the settings screen of the webinterface.

Filesystem overlay-mechanism

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

Thanks to rclone network-drives automatically show up as manyfold libraries.

To enable rclone to mount network drives, the container must be run with FUSE-device support. The quickest way is:

  • add -v ./manyfold/root/.config:/root/.config --cap-add SYS_ADMIN --security-opt apparmor:unconfined --device /dev/fuse to the docker cmd
  • add network drives by running docker exec -it rclone config in a running container
  • profit!

Your drives will get automagically mounted and added to the database automagically (by manyfold.sh rclone_automount-cmd) during container boot.

NOTE: by default all rclone remotes automagically show up as separate manyfold libraries, however use RCLONE_REMOTE this to specify a combined or union rclone remote.

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.

Unixy event hooks

Until WebEvents will get implemented on a REST-level in manyfold Things like boot-phase, scheduler and file-changes can be reacted up via the /root/hook.d directory:

$ ls /root/hook.d
boot
daily
hourly
inotify_CREATE
inotify_MODIFY

You can put scripts in there, which are fired when needed.

Example: [manyfold/root/hook.d/daily/delete_big_files.sh] is triggered daily to cleanup files which exceed a certain age/size.

Currently inotify events (inotify_MODIFY e.g.) are triggered for local file-changes (/mnt/models e.g.). In theory, federated drives can still be reacted upon, but by integrating with XRForge's ActivityPub (Follow feature e.g.)

Perhaps in the future this will also work for rclone remotes, by writing a hourly-script which scans them and fires inotify_MODIFY accordingly.