Remove Firefly and Semaphore from homelab

This commit is contained in:
2026-04-15 10:24:42 +02:00
parent 8b8e96e32f
commit 4eea231d24
15 changed files with 1 additions and 232 deletions
@@ -3,7 +3,6 @@ const QUICK_LINKS = [
{ label: "Komodo", icon: "🦎", url: "https://komodo.kaleschke.info" },
{ label: "Uptime Kuma", icon: "📡", url: "https://uptime.kaleschke.info" },
{ label: "Beszel", icon: "📊", url: "https://beszel.kaleschke.info" },
{ label: "Firefly III", icon: "🦋", url: "https://firefly.kaleschke.info" },
{ label: "Paperless", icon: "📄", url: "https://paperless.kaleschke.info" },
{ label: "Mealie", icon: "🍽️", url: "https://mealie.kaleschke.info" },
{ label: "Immich", icon: "🖼️", url: "https://immich.kaleschke.info" },
-1
View File
@@ -634,7 +634,6 @@
.quick-tile-icon-komodo { background: linear-gradient(135deg, #00e2b3, #68c7ff); }
.quick-tile-icon-kuma { background: linear-gradient(135deg, #00d98a, #7fffc7); }
.quick-tile-icon-beszel { background: linear-gradient(135deg, #53f1b4, #a9ffd8); }
.quick-tile-icon-firefly { background: linear-gradient(135deg, #ffb54d, #ffd66f); }
.quick-tile-icon-paperless { background: linear-gradient(135deg, #89ffdc, #46cfa0); }
.quick-tile-icon-mealie { background: linear-gradient(135deg, #7ec2ff, #f6ff8c); }
.quick-tile-icon-immich { background: linear-gradient(135deg, #ffd15c, #ff9d4d); }
File diff suppressed because one or more lines are too long
-24
View File
@@ -1,24 +0,0 @@
version: "3.9"
services:
firefly-fints:
image: benkl/firefly-iii-fints-importer:latest
container_name: firefly-fints
restart: unless-stopped
env_file:
- .env
volumes:
- /mnt/user/appdata/firefly-fints:/data
networks:
- frontend_net
security_opt:
- no-new-privileges:true
ports:
- "8091:8080"
dns:
- 1.1.1.1
- 8.8.8.8
networks:
frontend_net:
external: true
-4
View File
@@ -1,4 +0,0 @@
MYSQL_RANDOM_ROOT_PASSWORD=yes
MYSQL_DATABASE=firefly
MYSQL_USER=firefly
MYSQL_PASSWORD=firefly
-16
View File
@@ -1,16 +0,0 @@
APP_KEY=base64:ZHr3GRFkH9jEJ6TtoD6pEEsLHEfRViqqxSV6G7Zsba8=
APP_URL=https://firefly.kaleschke.info
DB_HOST=firefly-db
DB_PORT=3306
DB_CONNECTION=mysql
DB_DATABASE=firefly
DB_USERNAME=firefly
DB_PASSWORD=firefly
TRUSTED_PROXIES=**
APP_ENV=production
APP_DEBUG=false
LOG_CHANNEL=stack
TZ=Europe/Berlin
-8
View File
@@ -1,8 +0,0 @@
TZ=Europe/Berlin
APP_ENV=production
APP_DEBUG=false
LOG_CHANNEL=stack
TRUSTED_PROXIES=**
FIREFLY_III_URL=http://firefly-app:8080
VANITY_URL=https://firefly.kaleschke.info
-67
View File
@@ -1,67 +0,0 @@
version: "3.9"
services:
firefly-db:
image: mariadb:10.11
container_name: firefly-db
restart: unless-stopped
env_file:
- .db.env
volumes:
- /mnt/user/appdata/firefly/db:/var/lib/mysql
networks:
- backend_net
security_opt:
- no-new-privileges:true
firefly-app:
image: fireflyiii/core:latest
container_name: firefly-app
restart: unless-stopped
depends_on:
- firefly-db
env_file:
- .env
volumes:
- /mnt/user/appdata/firefly/upload:/var/www/html/storage/upload
networks:
- frontend_net
- backend_net
security_opt:
- no-new-privileges:true
labels:
- "traefik.enable=true"
- "traefik.docker.network=frontend_net"
- "traefik.http.routers.firefly.rule=Host(`firefly.kaleschke.info`)"
- "traefik.http.routers.firefly.entrypoints=websecure"
- "traefik.http.routers.firefly.tls=true"
- "traefik.http.routers.firefly.tls.certresolver=le"
- "traefik.http.services.firefly.loadbalancer.server.port=8080"
firefly-importer:
image: fireflyiii/data-importer:latest
container_name: firefly-importer
restart: unless-stopped
depends_on:
- firefly-app
env_file:
- .env
- .importer.env
networks:
- frontend_net
security_opt:
- no-new-privileges:true
labels:
- "traefik.enable=true"
- "traefik.docker.network=frontend_net"
- "traefik.http.routers.firefly-importer.rule=Host(`import.firefly.kaleschke.info`)"
- "traefik.http.routers.firefly-importer.entrypoints=websecure"
- "traefik.http.routers.firefly-importer.tls=true"
- "traefik.http.routers.firefly-importer.tls.certresolver=le"
- "traefik.http.services.firefly-importer.loadbalancer.server.port=8080"
networks:
frontend_net:
external: true
backend_net:
external: true
-2
View File
@@ -1,2 +0,0 @@
#!/bin/bash
docker ps
-57
View File
@@ -1,57 +0,0 @@
services:
semaphore:
image: semaphoreui/semaphore:v2.17.33
container_name: semaphore
restart: unless-stopped
security_opt:
- no-new-privileges:true
environment:
SEMAPHORE_DB_DIALECT: postgres
SEMAPHORE_DB_HOST: postgresql17
SEMAPHORE_DB_PORT: 5432
SEMAPHORE_DB_NAME: semaphore
SEMAPHORE_DB_USER: semaphore
SEMAPHORE_DB_PASS: ${SEMAPHORE_DB_PASS}
SEMAPHORE_ADMIN: admin
SEMAPHORE_ADMIN_PASSWORD: ${SEMAPHORE_ADMIN_PASSWORD}
SEMAPHORE_ADMIN_NAME: micha
SEMAPHORE_ADMIN_EMAIL: michideheld@gmx.de
SEMAPHORE_ACCESS_KEY_ENCRYPTION: ${SEMAPHORE_ACCESS_KEY_ENCRYPTION}
SEMAPHORE_WEB_ROOT: https://semaphore.kaleschke.info
SEMAPHORE_GIT_CLIENT: cmd_git
volumes:
- semaphore_data:/var/lib/semaphore
- semaphore_config:/etc/semaphore
- semaphore_tmp:/tmp/semaphore
networks:
- frontend_net
- backend_net
dns:
- 1.1.1.1
- 8.8.8.8
labels:
- traefik.enable=true
- traefik.docker.network=frontend_net
- traefik.http.routers.semaphore.rule=Host(`semaphore.kaleschke.info`)
- traefik.http.routers.semaphore.entrypoints=websecure
- traefik.http.routers.semaphore.tls=true
- traefik.http.routers.semaphore.tls.certresolver=le
- traefik.http.routers.semaphore.middlewares=authelia@file,secure-headers@file
- traefik.http.services.semaphore.loadbalancer.server.port=3000
volumes:
semaphore_data:
semaphore_config:
semaphore_tmp:
networks:
frontend_net:
external: true
backend_net:
external: true
-11
View File
@@ -1,11 +0,0 @@
- name: Docker PS on NAS
hosts: all
gather_facts: false
tasks:
- name: Run docker ps without python
raw: docker ps
register: docker_ps
- name: Show stdout
debug:
msg: "{{ docker_ps.stdout_lines }}"
+1 -23
View File
@@ -50,7 +50,6 @@ Der technische Scope für `critical_infra` ist in `all-important-sources.txt` fe
- `/local/immich/external`
- `/local/gitea/data`
- `/local/appdata/mealie/data`
- `/local/appdata/firefly/upload`
- `/local/appdata/mailarchiver/data-protection-keys`
### Secrets / Konfiguration / Infrastruktur
@@ -85,8 +84,6 @@ Der technische Scope für `critical_infra` ist in `all-important-sources.txt` fe
| Tailscale | State-Verzeichnis | keine separate DB | Ja | gut |
| AdGuard | `conf` | `work` bewusst nicht im Critical-Scope | Teilweise | okay |
| Komodo | `core` + `periphery` | MongoDB Dump aktuell nicht verifiziert | Teilweise | offen |
| Firefly | Uploads | MariaDB Dump scheitert aktuell an korruptem Table | Teilweise | offen, aber niedrige Priorität wenn Ablösung geplant |
| Semaphore | Docker named volumes | Shared PostgreSQL vorgesehen, App-Volumes nicht in Borg | Nein / Teilweise | Lücke |
| Redis | transiente Daten / Cache | absichtlich nicht im Scope | Nein | bewusst ausgeschlossen |
| Scrutiny | Config + InfluxDB | InfluxDB nicht im Scope | Nein | bewusst ausgeschlossen |
| Plex | Medien-Metadaten / Cache | kein Critical-Scope | Nein | bewusst ausgeschlossen |
@@ -98,14 +95,12 @@ Der technische Scope für `critical_infra` ist in `all-important-sources.txt` fe
- `postgresql17-globals.sql`
- `postgresql17-mailarchiver.dump`
- `postgresql17-paperless.dump`
- `postgresql17-semaphore.dump`
- `postgresql17-authelia.dump`
- `mealie.dump`
- `immich.dump`
### Nicht erfolgreich / nicht bestätigt
- `firefly.sql` - Dump scheitert aktuell an korruptem MariaDB-Table `rt_meta`
- `komodo-mongo.archive.gz` - im bisherigen Lauf nicht sichtbar, daher noch nicht als bestätigt werten
## Ergebnis des ersten `critical_infra`-Laufs
@@ -160,17 +155,7 @@ Das ist kein Strukturfehler, sondern eine normale Trennung zwischen Nutzdaten un
- Dump-Pfad im Skript vorhanden
- Erfolg noch nicht bestätigt
2. **Semaphore**
- PostgreSQL-Teil ist grundsätzlich dumpbar
- die App selbst nutzt aber Docker named volumes
- diese Volumes sind aktuell nicht sauber im Borg-Scope enthalten
3. **Firefly**
- Datei-Uploads sind enthalten
- DB-Dump aktuell fehlerhaft
- wenn Firefly sowieso bald entfernt wird, ist das momentan nicht blockierend
4. **Automatisierung**
2. **Automatisierung**
- Dumps wurden manuell erzeugt
- die festgelegte Zielrichtung ist jetzt host-seitig über Unraid User Scripts / Host-Cron
- eine saubere Pre-Backup-Automatisierung ist noch nicht final eingebunden
@@ -191,7 +176,6 @@ Das eigentliche Restproblem ist aktuell **nicht** die Share-Struktur, sondern:
- einzelne noch offene Dump-Kandidaten
- fehlende Automatisierung
- einzelne Spezialfälle wie Semaphore named volumes
## Nächste sinnvolle Schritte
@@ -203,7 +187,6 @@ Das eigentliche Restproblem ist aktuell **nicht** die Share-Struktur, sondern:
- optionale spätere Scope-Verschlankung nur bewusst und nicht ad hoc vornehmen
3. Erst danach entscheiden:
- ob Pfade umgezogen werden müssen
- ob Firefly schlicht ausläuft statt weiter bereinigt zu werden
- wie die Pre-Backup-Dumps automatisiert werden
## Festgehaltene Entscheidung
@@ -232,11 +215,6 @@ Stand jetzt werden **keine grundlegenden Share-Umstrukturierungen** vorgenommen.
- `services/gitea` bleibt an Ort und Stelle.
- `appdata` wird aktuell nicht großflächig bereinigt oder umgebaut.
### Einfluss von Firefly und Semaphore
- `Semaphore` ist als zukünftige Löschung eingeplant und wird deshalb **nicht** mehr durch Strukturmaßnahmen optimiert.
- `Firefly` ist ebenfalls als zukünftige Löschung eingeplant und wird deshalb **nicht** mehr durch Strukturmaßnahmen optimiert.
### Aktuelle Prioritäten statt Share-Umbau
1. Den erfolgreichen ersten `critical_infra`-Lauf dokumentarisch abschließen und die verbleibenden Restpunkte sauber abgrenzen.
-8
View File
@@ -27,7 +27,6 @@ Do not back up raw live database storage directories as the primary recovery art
| Immich | DB dump + file data | `/local/borg-dumps`, `/local/immich/upload`, `/local/immich/external` |
| Gitea | file data (SQLite inside `/data`) | `/local/gitea/data` |
| Mealie | DB dump + file data | `/local/borg-dumps`, `/local/appdata/mealie/data` |
| Firefly | MariaDB dump + uploads | `/local/borg-dumps`, `/local/appdata/firefly/upload` |
| Mail-archiver | shared Postgres dump + data protection keys | `/local/borg-dumps`, `/local/appdata/mailarchiver/data-protection-keys` |
| Authelia | shared Postgres dump + config + secrets | `/local/borg-dumps`, `/local/appdata/authelia/config`, `/local/secrets` |
| Traefik | file data | `/local/appdata/traefik` |
@@ -45,7 +44,6 @@ Do not back up raw live database storage directories as the primary recovery art
- `mailarchiver`
- `paperless`
- `semaphore`
- `authelia`
### Dedicated PostgreSQL
@@ -55,7 +53,6 @@ Do not back up raw live database storage directories as the primary recovery art
### Other Databases
- Firefly MariaDB
- Komodo MongoDB
## Explicitly Not Backed Up as Raw Live DB Files
@@ -63,7 +60,6 @@ Do not back up raw live database storage directories as the primary recovery art
- `/mnt/user/appdata/postgresql17`
- `/mnt/user/appdata/mealie/postgres`
- `/mnt/user/appdata/immich_postgres`
- `/mnt/user/appdata/firefly/db`
- `/mnt/user/appdata/komodo/mongo`
- `/mnt/user/appdata/redis`
- `/mnt/user/appdata/scrutiny/influxdb`
@@ -81,10 +77,6 @@ These are not part of the first-class Borg scope:
- filebrowser app state
- portainer
## Special Case
`ops/Semaphore` currently stores app state in named Docker volumes, not host bind mounts. That state is not covered by the current Borg mounts and should be migrated to bind mounts before claiming full Borg coverage for Semaphore.
## Suggested Retention
- daily: 7
-1
View File
@@ -8,7 +8,6 @@
/local/immich/external
/local/gitea/data
/local/appdata/mealie/data
/local/appdata/firefly/upload
/local/appdata/mailarchiver/data-protection-keys
/local/secrets
/local/appdata/authelia/config
-4
View File
@@ -142,7 +142,6 @@ main() {
dump_pg_globals "postgresql17" "$shared_pg_password" "$SHARED_PG_ADMIN_USER" "$LATEST_DIR/postgresql17-globals.sql"
dump_pg_db "postgresql17" "$shared_pg_password" "$SHARED_PG_ADMIN_USER" "mailarchiver" "$LATEST_DIR/postgresql17-mailarchiver.dump"
dump_pg_db "postgresql17" "$shared_pg_password" "$SHARED_PG_ADMIN_USER" "paperless" "$LATEST_DIR/postgresql17-paperless.dump"
dump_optional_pg_db "postgresql17" "$shared_pg_password" "$SHARED_PG_ADMIN_USER" "semaphore" "$LATEST_DIR/postgresql17-semaphore.dump"
dump_optional_pg_db "postgresql17" "$shared_pg_password" "$SHARED_PG_ADMIN_USER" "authelia" "$LATEST_DIR/postgresql17-authelia.dump"
else
warn "Skipping shared PostgreSQL dumps because container 'postgresql17' is missing"
@@ -163,9 +162,6 @@ main() {
warn "Skipping missing container: immich_postgres"
fi
# MariaDB / MySQL
dump_mysql_container "firefly-db" "$LATEST_DIR/firefly.sql"
# MongoDB
dump_mongo_container "komodo-mongo" "$LATEST_DIR/komodo-mongo.archive.gz"