Table of Contents

Cloud Commander

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.

Installation

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

Reverse Proxy

Running CloudCommander behind NGINX is easy, this is an example:

filebrowser.conf
  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.

Running

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.

Updates

npm u cloudcmd