CloudCommander is an amazing web-based file manager for your server files. It is a good replacement for FileBrowser since it's much more capable and has way less quirks, even if the UI is a little bit more old-style.
Create a standard user to host the CloudCommander installation. You will most probably never run it as this user, but always as different users, to allow it manage files owned by those users.
useradd -d /data/daemons/cloudcmd -m cloudcmd
See Using npm on Gentoo on how to setup your non-root user environment to use npm.
Then, install CloudCommander:
su - cloudcmd npm i cloudcmd -g
You might want to set this in the user .bashrc in case you want to give write permissions to users in a specific group to the files managed by CloudCommander:
export UMASK=0002
Running CloudCommander behind NGINX is easy, this is an example:
location /cloudcmd/ { client_max_body_size 512M; proxy_pass http://127.0.0.1:3002; proxy_http_version 1.1; proxy_set_header Connection $http_connection; proxy_set_header Connection 'upgrade'; proxy_cache_bypass $http_upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }
Remember to set the correct port as each instance of CloudCommander will have to run with it's own port, and set a reasonable location URL.
You can run it by hand with the following example line:
cloudcmd --packer zip --root /data/shares/common --prefix /common --port 5005 --confirm-copy --confirm-move --no-auth --no-config-auth --no-contact --vim --no-dropbox --name "Common Share"
Or you can automate it…
I assume you want to run it as user myuser.
As the starting script, since i use OpenRC, i have written the following init script wihch needs to be dropped to /etc/init.d/cloudcmd:
#!/sbin/openrc-run # Copyright 2024 Willy Garidol # Distributed under the terms of the GNU General Public License v3 depend() { need localmount net } CC_SLOT="${SVCNAME#cloudcmd.}" CC_USER=${USER:-${CC_SLOT}} CC_GROUP=${GROUP:-${CC_SLOT}} CC_PACKER=${PACKER:-zip} description=${DESCRIPTION:-Cloud based filebrowser} pidfile="/run/${RC_SVCNAME}.pid" command_background=true command="/data/daemons/filebrowser/.npm_install/bin/cloudcmd" command_args="--packer ${CC_PACKER} --root \"${FOLDER}\" --prefix ${BASE_URL} --port ${PORT} --confirm-copy --confirm-move --no-auth --no-config-auth --no-contact --vim --no-dropbox --name \“${DESCRIPTION}\”" command_user="${CC_USER}:${CC_GROUP}" start_pre() { if [ "${CC_SLOT}" = "cloudcmd" ] then ebegin "Error: do not run this script, run a link to it!" eend 255 fi }
make it executable!
Now, create a file /etc/conf.d/cloudcmd.myshare:
BASE_URL="/files/MyFiles" DESCRIPTION="Common web archive" FOLDER="/data/MyFiles" GROUP="users" PORT=3005 USER="filebrowser" PACKER="zip" # or "tar"
And create the symlink, start it and add to autostart:
ln -s /etc/init.d/cloudcmd /etc/init.d/cloudcmd.myshare rc-update add cloudcmd.myshare default /etc/init.d/cloudcmd.myshare start
To add more shares, just create new links to the cloudcmd init script and create the associated config file.
npm u cloudcmd