Initial commit: Filebot Media Browser
Vue 3 + FastAPI Webapp zur Anzeige von Filebot/n8n-Medienmetadaten aus PostgreSQL. Enthält Frontend, API, Nginx-Config, SQL-Migrationen und Docker-Compose-Setup. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,176 @@
|
||||
# Deployment auf neuem Server (`/opt/nginx_filebot`)
|
||||
|
||||
Anleitung für einen **neuen** Linux-Server oder Umzug vom alten Pfad `/opt/docker/nginx_filebot`.
|
||||
|
||||
Einziger User: **`vogto`** (SSH, SMB, Docker).
|
||||
|
||||
---
|
||||
|
||||
## 1. Rechte für `/opt` (einmalig)
|
||||
|
||||
Gruppe **`opt-docker`** nur für Samba (`force group`) und einheitliche Gruppenrechte; Owner überall **`vogto`**.
|
||||
|
||||
```bash
|
||||
sudo groupadd -f opt-docker
|
||||
sudo usermod -aG opt-docker,docker vogto
|
||||
```
|
||||
|
||||
`vogto` danach **neu anmelden** (SMB trennen/neu verbinden), damit Gruppen greifen.
|
||||
|
||||
```bash
|
||||
# Gesamtes /opt: vogto + Gruppe opt-docker, setgid (neue Dateien erben die Gruppe)
|
||||
sudo chown vogto:opt-docker /opt
|
||||
sudo chmod 2775 /opt
|
||||
|
||||
# Projektordner (erbt Owner/Gruppe von /opt)
|
||||
sudo mkdir -p /opt/nginx_filebot
|
||||
```
|
||||
|
||||
| Pfad | Owner | Modus |
|
||||
|------|--------|--------|
|
||||
| **`/opt`** | `vogto:opt-docker` | `2775` |
|
||||
| **`/opt/nginx_filebot`** | (erbt von `/opt`) | (erbt) |
|
||||
|
||||
Weitere Docker-Projekte später nur anlegen – **kein** extra `chown` nötig:
|
||||
|
||||
```bash
|
||||
sudo mkdir -p /opt/anderes_projekt
|
||||
# bleibt vogto:opt-docker durch setgid auf /opt
|
||||
```
|
||||
|
||||
`config/config.yaml`:
|
||||
|
||||
```bash
|
||||
chmod 640 /opt/nginx_filebot/config/config.yaml
|
||||
```
|
||||
|
||||
### Samba (Beispiel)
|
||||
|
||||
```ini
|
||||
[opt]
|
||||
path = /opt
|
||||
browseable = yes
|
||||
read only = no
|
||||
valid users = vogto
|
||||
force user = vogto
|
||||
force group = opt-docker
|
||||
create mask = 0664
|
||||
directory mask = 2775
|
||||
```
|
||||
|
||||
```bash
|
||||
sudo testparm
|
||||
sudo systemctl reload smbd
|
||||
```
|
||||
|
||||
Nach größeren Kopien/Rechten von root:
|
||||
|
||||
```bash
|
||||
sudo chown -R vogto:opt-docker /opt
|
||||
sudo find /opt -type d -exec chmod 2775 {} \;
|
||||
sudo find /opt -type f -exec chmod 664 {} \;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. Projekt auf den neuen Server bringen
|
||||
|
||||
### Variante A: Git
|
||||
|
||||
```bash
|
||||
git clone <repository-url> /opt/nginx_filebot
|
||||
```
|
||||
|
||||
### Variante B: rsync vom Mac / altem Server
|
||||
|
||||
```bash
|
||||
rsync -avz --exclude node_modules --exclude '.git' \
|
||||
--exclude config/config.yaml \
|
||||
./ vogto@NEUER_SERVER:/opt/nginx_filebot/
|
||||
|
||||
scp config/config.example.yaml vogto@NEUER_SERVER:/opt/nginx_filebot/config/config.yaml
|
||||
```
|
||||
|
||||
### Variante C: Umzug vom alten Server
|
||||
|
||||
```bash
|
||||
# Alt
|
||||
cd /opt/docker/nginx_filebot && docker compose down
|
||||
|
||||
# Kopieren
|
||||
rsync -avz user@ALTER_SERVER:/opt/docker/nginx_filebot/ /opt/nginx_filebot/
|
||||
|
||||
# Rechte (ganzes /opt oder nur Projekt)
|
||||
sudo chown -R vogto:opt-docker /opt
|
||||
```
|
||||
|
||||
**Wichtig:** `config/config.yaml` vom alten Server mitnehmen.
|
||||
|
||||
---
|
||||
|
||||
## 3. Konfiguration & Datenbank
|
||||
|
||||
```bash
|
||||
cd /opt/nginx_filebot
|
||||
cp config/config.example.yaml config/config.yaml # falls nötig
|
||||
nano config/config.yaml
|
||||
```
|
||||
|
||||
PostgreSQL vom neuen Server erreichbar? Migrationen:
|
||||
|
||||
```bash
|
||||
psql -h <DB_HOST> -U <USER> -d n8n_filebot -f /opt/nginx_filebot/sql/001_add_seen_at.sql
|
||||
psql -h <DB_HOST> -U <USER> -d n8n_filebot -f /opt/nginx_filebot/sql/002_add_cover_url.sql
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. Docker starten
|
||||
|
||||
```bash
|
||||
cd /opt/nginx_filebot
|
||||
docker compose up -d --build
|
||||
curl -s http://localhost:8080/api/health
|
||||
```
|
||||
|
||||
Browser: `http://<NEUER_SERVER_IP>:8080`
|
||||
|
||||
---
|
||||
|
||||
## 5. Checkliste
|
||||
|
||||
| Schritt | Erledigt |
|
||||
|---------|----------|
|
||||
| `vogto` in `opt-docker` und `docker` | ☐ |
|
||||
| `/opt` → `vogto:opt-docker`, `2775` | ☐ |
|
||||
| Samba `force user` / `force group` | ☐ |
|
||||
| Repo unter `/opt/nginx_filebot` | ☐ |
|
||||
| `config/config.yaml` | ☐ |
|
||||
| `docker compose up -d --build` | ☐ |
|
||||
|
||||
---
|
||||
|
||||
## 6. Häufige Probleme
|
||||
|
||||
| Symptom | Lösung |
|
||||
|---------|--------|
|
||||
| `open Dockerfile: no such file` (web) | `nginx/Dockerfile` fehlt auf dem Server – siehe unten |
|
||||
| `load metadata for python:3.12-slim` | Internet/Docker Hub: `docker pull python:3.12-slim` |
|
||||
| SMB: nicht schreiben | `id vogto`, `chown -R vogto:opt-docker /opt`, neu anmelden |
|
||||
| `permission denied` | `sudo chown -R vogto:opt-docker /opt` |
|
||||
| Docker ohne sudo | `usermod -aG docker vogto`, neu anmelden |
|
||||
| API 503 | DB-Host/Firewall, `curl …/api/status` |
|
||||
|
||||
### Build-Fehler: Dockerfile fehlt
|
||||
|
||||
```bash
|
||||
ls -la /opt/nginx_filebot/nginx/Dockerfile
|
||||
sh /opt/nginx_filebot/scripts/verify-deploy-files.sh
|
||||
```
|
||||
|
||||
Wenn `FEHLT`: kompletten Ordner `nginx/` (und ggf. `frontend/`, `api/`) erneut hochladen. Danach:
|
||||
|
||||
```bash
|
||||
cd /opt/nginx_filebot
|
||||
docker compose up -d --build
|
||||
```
|
||||
@@ -0,0 +1,21 @@
|
||||
# Logo für Media-Server-Dashboard (`/opt/nginx/html`)
|
||||
|
||||
## Datei kopieren
|
||||
|
||||
```bash
|
||||
cp /opt/nginx_filebot/docs/dashboard-assets/filebot-media-browser.svg \
|
||||
/opt/nginx/html/filebot-media-browser.svg
|
||||
```
|
||||
|
||||
## In `index.html` (apps-Array)
|
||||
|
||||
```javascript
|
||||
{
|
||||
name: "FileBot Media Browser",
|
||||
port: 8090,
|
||||
icon: "/filebot-media-browser.svg",
|
||||
color: "#6366f1",
|
||||
},
|
||||
```
|
||||
|
||||
Port und Pfad an deine Umgebung anpassen. Die Karte verlinkt automatisch auf `http://<server-ip>:8090/`.
|
||||
@@ -0,0 +1,18 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="Filebot Media Browser">
|
||||
<defs>
|
||||
<linearGradient id="fb-grad" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||
<stop offset="0%" stop-color="#6366f1"/>
|
||||
<stop offset="100%" stop-color="#8b5cf6"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<rect width="64" height="64" rx="14" fill="url(#fb-grad)"/>
|
||||
<text
|
||||
x="32"
|
||||
y="40"
|
||||
text-anchor="middle"
|
||||
fill="#ffffff"
|
||||
font-family="Outfit, system-ui, -apple-system, sans-serif"
|
||||
font-weight="700"
|
||||
font-size="22"
|
||||
>FB</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 574 B |
Reference in New Issue
Block a user