diff --git a/.metadata b/.metadata index 24ace8d..337b2e0 100644 Binary files a/.metadata and b/.metadata differ diff --git a/.recipes/staticweb_filebrowser/config/filebrowser-config b/.recipes/staticweb_filebrowser/config/filebrowser-config new file mode 120000 index 0000000..4a5ccf6 --- /dev/null +++ b/.recipes/staticweb_filebrowser/config/filebrowser-config @@ -0,0 +1 @@ +../storage/volumes/filebrowser_data \ No newline at end of file diff --git a/.recipes/staticweb_filebrowser/docker-compose.yml b/.recipes/staticweb_filebrowser/docker-compose.yml new file mode 100644 index 0000000..d3f6aad --- /dev/null +++ b/.recipes/staticweb_filebrowser/docker-compose.yml @@ -0,0 +1,28 @@ +# Static website with Filebrowser as an admin tool. +# +services: + # https://github.com/filebrowser/filebrowser + # https://hub.docker.com/r/filebrowser/filebrowser + filebrowser: + image: filebrowser/filebrowser:latest + restart: unless-stopped + # Take care a possible public port collision. + ports: + - 8201:80 + # The same Linux user running the reverse proxy webserver. + user: 33:1001 + environment: + TZ: Europe/Budapest + # Default credentials: admin/admin + # Note, FB_NOAUTH only matters if the database is still empty. + #FB_NOAUTH: true + FB_BASEURL: "/" + volumes: + # The Linux user defined above must have R/W access here. + - ./storage/volumes/staticweb:/srv + - ./storage/volumes/filebrowser_data/filebrowser.json:/.filebrowser.json + - ./storage/volumes/filebrowser_data/database.db:/.database.db + extra_hosts: + - "host.docker.internal:host-gateway" + labels: + com.centurylinklabs.watchtower.enable: true diff --git a/.recipes/staticweb_filebrowser/storage/volumes/filebrowser_data/database.db b/.recipes/staticweb_filebrowser/storage/volumes/filebrowser_data/database.db new file mode 100644 index 0000000..e69de29 diff --git a/.recipes/staticweb_filebrowser/storage/volumes/filebrowser_data/filebrowser.json b/.recipes/staticweb_filebrowser/storage/volumes/filebrowser_data/filebrowser.json new file mode 100644 index 0000000..be9d08a --- /dev/null +++ b/.recipes/staticweb_filebrowser/storage/volumes/filebrowser_data/filebrowser.json @@ -0,0 +1,8 @@ +{ + "port": 80, + "baseURL": "/", + "address": "", + "log": "stdout", + "database": "/.database.db", + "root": "/srv" +} diff --git a/.recipes/staticweb_filebrowser/storage/volumes/staticweb/index.html b/.recipes/staticweb_filebrowser/storage/volumes/staticweb/index.html new file mode 100644 index 0000000..5c19f81 --- /dev/null +++ b/.recipes/staticweb_filebrowser/storage/volumes/staticweb/index.html @@ -0,0 +1,10 @@ + + + + + Test page + + +

It works!

+ + diff --git a/.recipes/staticweb_filebrowser/tools/backup.d/storage_backup.sh b/.recipes/staticweb_filebrowser/tools/backup.d/storage_backup.sh new file mode 100644 index 0000000..7334e22 --- /dev/null +++ b/.recipes/staticweb_filebrowser/tools/backup.d/storage_backup.sh @@ -0,0 +1,93 @@ +#!/bin/bash +# +# A service script to backup the web storage of a static website. +# Creates a tarball in $BASE_DIR/storage/backups/tarballs folder +# (by default). Optional parameters may change the source and/or +# target folder. +# +# Author: Kovács Zoltán +# License: GNU/GPL 3+ https://www.gnu.org/licenses/gpl-3.0.en.html +# 2025-01-22 Initial version. + +# Accepted environment variables and their defaults. +# +PAR_BASEDIR=${PAR_BASEDIR:-""} # Service's base folder +PAR_BACKUPDIR=${PAR_BACKUPDIR:-""} # Folder to dump within +PAR_SOURCEDIR=${PAR_SOURCEDIR:-""} # Folder to save + +# Messages (maybe overridden by configuration). +# +MSG_MISSINGDEP="Fatal: missing dependency" +MSG_NONREAD="The source directory isn't readable" +MSG_NONWRITE="The target directory isn't writable" + +# Other initialisations. +# +BACKUPDIR="storage/backups/tarballs" # Folder to dump within +SOURCEDIR="storage/volumes/staticweb" # Folder to backup +USER=${USER:-LOGNAME} # Fix for cron enviroment only +YMLFILE="docker-compose.yml" + +# Checks the dependencies. +# +TR=$(which tr 2>/dev/null) +if [ -z "$TR" ]; then echo "$MSG_MISSINGDEP tr."; exit 1 ; fi +for item in basename cat cut date dirname hostname pwd tar +do + if [ -n "$(which $item)" ] + then export $(echo $item | "$TR" '[:lower:]' '[:upper:]' | "$TR" '-' '_')=$(which $item) + else echo "$MSG_MISSINGDEP $item." >&2; exit 1; fi +done +# All dependencies are available via "$THECOMMAND" (upper case) call. + +# Where I'm? +# https://gist.github.com/TheMengzor/968e5ea87e99d9c41782 +SOURCE="$0" +while [ -h "$SOURCE" ]; do + # resolve $SOURCE until the file is no longer a symlink + SCRPATH="$( cd -P "$("$DIRNAME" "$SOURCE" )" && echo "$PWD" )" #" + SOURCE="$("$READLINK" "$SOURCE")" + # if $SOURCE was a relative symlink, we need to resolve it + # relative to the path where the symlink file was located + [[ $SOURCE != /* ]] && SOURCE="$SCRPATH/$SOURCE" +done; SCRPATH="$( cd -P "$("$DIRNAME" "$SOURCE" )" && echo "$PWD" )" #" + +# Searches the base folder, containing a docker-compose.yml file. +# +# Called from the base folder (./)? +BASE_DIR="$PAR_BASEDIR" +TEST_DIR="$SCRPATH" +[[ -z "$BASE_DIR" ]] && [[ -r "$TEST_DIR/$YMLFILE" ]] && BASE_DIR="$TEST_DIR" +# Called from ./tools? +TEST_DIR="$("$DIRNAME" "$TEST_DIR")" +[[ -z "$BASE_DIR" ]] && [[ -r "$TEST_DIR/$YMLFILE" ]] && BASE_DIR="$TEST_DIR" +# Called from ./tools/*.d? +TEST_DIR="$("$DIRNAME" "$TEST_DIR")" +[[ -z "$BASE_DIR" ]] && [[ -r "$TEST_DIR/$YMLFILE" ]] && BASE_DIR="$TEST_DIR" +# On failure gives it up here. +if [ -z "$BASE_DIR" -o ! -r "$BASE_DIR/$YMLFILE" ]; then + echo "$MSG_MISSINGYML" >&2; exit 1 +fi +# Sets the absolute paths. +BACKUPDIR="${PAR_BACKUPDIR:-$BASE_DIR/$BACKUPDIR}" +SOURCEDIR="${PAR_SOURCEDIR:-$BASE_DIR/$SOURCEDIR}" + +# The dump target folder must be writable. +# +[[ ! -w "$BACKUPDIR" ]] \ +&& echo "$MSG_NONWRITE: $BACKUPDIR" >&2 && exit 1 + +# The source folder must be readable. +# +[[ ! -r "$SOURCEDIR" ]] \ +&& echo "$MSG_NONREAD: $SOURCEDIR" >&2 && exit 1 + +# Tries the FS backup. +# +if [ -w "$BACKUPDIR" ]; then + BACKUP_NAME=$("$BASENAME" "$SOURCEDIR").$("$DATE" '+%Y%m%d_%H%M%S').$("$HOSTNAME") + (cd $SOURCEDIR; "$TAR" cz . \ + > "$BACKUPDIR/$BACKUP_NAME.tgz" 2>>"$BACKUPDIR/$BACKUP_NAME.log") +fi + +# That's all, Folks! :)