commit 1ee71d887993f65c4853ba3b4661c95086a8ce0b Author: Dejan R. Date: Thu Nov 27 17:34:37 2025 +0000 first commit diff --git a/backup-trillium.sh b/backup-trillium.sh new file mode 100755 index 0000000..cca6596 --- /dev/null +++ b/backup-trillium.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash +set -euo pipefail + +# === CONFIG === +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +DATA_DIR="${SCRIPT_DIR}/trilium-data" +BACKUP_DIR="/backup/Trilium" +KEEP=5 + +cd "$SCRIPT_DIR" + +# === Ensure backup path exists === +mkdir -p "$BACKUP_DIR" + +# === Stop container === +echo "Stopping Trilium container..." +docker compose down + +# === Backup === +TIMESTAMP="$(date +"%Y-%m-%d_%H-%M-%S")" +BACKUP_FILE="${BACKUP_DIR}/trilium_backup_${TIMESTAMP}.tar.gz" + +echo "Backing up data to: $BACKUP_FILE" + +tar -czf "$BACKUP_FILE" \ + trilium-data \ + docker-compose.yml + +echo "Backup completed." + +# === Start container again === +echo "Starting Trilium back up..." +docker compose up -d +echo "Trilium started." + +# === Rotate backups === +echo "Cleaning old backups (keeping last ${KEEP})..." +shopt -s nullglob +backups=( $(ls -1t "$BACKUP_DIR"/trilium_backup_*.tar.gz) ) + +if [ "${#backups[@]}" -gt "$KEEP" ]; then + for old in "${backups[@]:$KEEP}"; do + echo "Removing old backup: $old" + rm -f "$old" + done +else + echo "No old backups to remove." +fi + +echo "Backup routine complete ✔" diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..9a3c2db --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,27 @@ +services: + trilium: + image: zadam/trilium:latest + container_name: trilium + restart: unless-stopped + environment: + - TZ=Europe/Ljubljana + - TRILIUM_DATA_DIR=/home/node/trilium-data + - USER_UID=1000 + - USER_GID=1000 + volumes: + - ./trilium-data:/home/node/trilium-data + labels: + - "traefik.enable=true" + - "traefik.http.routers.trilium.rule=Host(`trilium.rozic-dev.com`)" + - "traefik.http.routers.trilium.entrypoints=websecure" + - "traefik.http.routers.trilium.tls=true" + - "traefik.http.routers.trilium.tls.certresolver=letsencrypt" + - "traefik.http.services.trilium.loadbalancer.server.port=8080" + - "traefik.http.middlewares.trilium-compress.compress=true" + - "traefik.http.routers.trilium.middlewares=trilium-compress" + networks: + - traefik_default + +networks: + traefik_default: + external: true