Remove Firefly and Semaphore from homelab
This commit is contained in:
@@ -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" },
|
||||
|
||||
@@ -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
@@ -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
|
||||
@@ -1,4 +0,0 @@
|
||||
MYSQL_RANDOM_ROOT_PASSWORD=yes
|
||||
MYSQL_DATABASE=firefly
|
||||
MYSQL_USER=firefly
|
||||
MYSQL_PASSWORD=firefly
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -1,2 +0,0 @@
|
||||
#!/bin/bash
|
||||
docker ps
|
||||
@@ -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
|
||||
@@ -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 }}"
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user