diff --git a/03-apps/deploy.sh b/03-apps/deploy.sh new file mode 100755 index 0000000..5d87dc6 --- /dev/null +++ b/03-apps/deploy.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +GREEN='\033[0;32m' +RED='\033[0;31m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' + +STACK_DIR="/opt/docker-stacks/03-apps" +DB_PATH="${STACK_DIR}/data/filebrowser/filebrowser.db" + +echo -e "${BLUE}==================================================${NC}" +echo -e "${BLUE} 🚀 OpenClaw App-Stack Deployment (03-apps) ${NC}" +echo -e "${BLUE}==================================================${NC}" + +cd "$STACK_DIR" || { echo -e "${RED}Fehler: Verzeichnis $STACK_DIR nicht gefunden!${NC}"; exit 1; } + +echo -e "${YELLOW}⏳ Stoppe laufende Container...${NC}" +docker compose down + +if [ -d "$DB_PATH" ]; then + echo -e "${YELLOW}⚠️ Bereinige fehlerhaftes Verzeichnis...${NC}" + sudo rm -rf "$DB_PATH" +fi + +echo -e "${YELLOW}📂 Bereite Verzeichnisstruktur vor...${NC}" +sudo mkdir -p "$(dirname "$DB_PATH")" + +# Datenbank sauber mit dem offiziellen Tool initialisieren, falls sie neu ist +if [ ! -s "$DB_PATH" ]; then + echo -e "${YELLOW}📦 Initialisiere frische File-Browser Datenbank...${NC}" + # Temporären Container starten, der NUR die DB sauber aufsetzt + docker run --rm \ + -v "$(dirname "$DB_PATH")":/database \ + filebrowser/filebrowser:latest \ + filebrowser -d /database/filebrowser.db config init + + # Standard-Admin explizit hinzufügen, damit admin/admin garantiert klappt + docker run --rm \ + -v "$(dirname "$DB_PATH")":/database \ + filebrowser/filebrowser:latest \ + filebrowser -d /database/filebrowser.db users add admin admin --perm.admin=true + + sudo chmod 666 "$DB_PATH" + echo -e "${GREEN}✓ Datenbankstruktur erfolgreich mit Standard-User (admin/admin) aufgesetzt.${NC}" +fi + +echo -e "${YELLOW}⚡ Starte Docker-Compose-Stack neu...${NC}" +docker compose up -d --force-recreate --remove-orphans + +echo -e "${YELLOW}⏳ Warte auf Initialisierung...${NC}" +sleep 5 + +echo -e "\n${BLUE}==================================================${NC}" +echo -e "${BLUE} 📊 Aktueller Status der Services: ${NC}" +echo -e "${BLUE}==================================================${NC}" +docker compose ps + +echo -e "\n${GREEN}🎉 Deployment abgeschlossen! Melde dich an auf https://files.brabros.de${NC}" diff --git a/03-apps/docker-compose.yml b/03-apps/docker-compose.yml new file mode 100644 index 0000000..8ab6703 --- /dev/null +++ b/03-apps/docker-compose.yml @@ -0,0 +1,45 @@ +version: '3.8' + +networks: + traefik_proxy: + external: true + +volumes: + filebrowser_db: + +services: + filebrowser: + image: filebrowser/filebrowser:latest + container_name: filebrowser + user: "0:0" + restart: unless-stopped + volumes: + - /opt/docker-stacks:/srv + - filebrowser_db:/database/ + networks: + - traefik_proxy + labels: + - "traefik.enable=true" + - "traefik.http.routers.filebrowser.rule=Host(`files.brabros.de`)" + - "traefik.http.routers.filebrowser.entrypoints=websecure" + - "traefik.http.routers.filebrowser.tls.certresolver=myresolver" + - "traefik.http.routers.filebrowser.middlewares=authelia@docker" + - "traefik.http.services.filebrowser.loadbalancer.server.port=80" + - "traefik.docker.network=traefik_proxy" + + memos: + image: ghcr.io/usememos/memos:latest + container_name: memos + restart: unless-stopped + volumes: + - ./data/memos:/var/opt/memos + networks: + - traefik_proxy + labels: + - "traefik.enable=true" + - "traefik.http.routers.memos.rule=Host(`memos.brabros.de`)" + - "traefik.http.routers.memos.entrypoints=websecure" + - "traefik.http.routers.memos.tls.certresolver=myresolver" + - "traefik.http.routers.memos.middlewares=authelia@docker" + - "traefik.http.services.memos.loadbalancer.server.port=5230" + - "traefik.docker.network=traefik_proxy"