Docs: prerequisites, docker installer and first-run errors

- README: prerequisites before the quick start – base packages (curl,
  git, mc optional), Docker via public-docker-installer-26.04-v1 with
  compose plugin check, LXC features, packages for fail2ban hosts
- Local image build as long as the image is not in the registry yet
- Troubleshooting: missing curl/git, missing compose plugin, image pull

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
schiwagoaandClaude Opus 5.5 committed 2026-10-25 17:05:58 +01:00
1 parent 019c74a418
commit 97b0c14dac
3 files changed
+87 -7

No files matched your search

+69 -6
View File
@@ -28,15 +28,84 @@ private Netze, die eigenen Adressen des Hosts oder Einträge seiner Schutzliste
protokolliert jede Aktion im Syslog. Zugriff auf den fail2ban-Socket wäre gleichbedeutend protokolliert jede Aktion im Syslog. Zugriff auf den fail2ban-Socket wäre gleichbedeutend
mit root – die Sicherheitsgrenze ist der Agent, nicht die Weboberfläche. mit root – die Sicherheitsgrenze ist der Agent, nicht die Weboberfläche.
## Voraussetzungen
Getestet auf Ubuntu 24.04/26.04 und Debian 12/13 – Bare Metal, VM oder LXC.
Alle Befehle als root.
### Grundpakete (alle Hosts)
```bash
apt update
apt install -y curl git
apt install -y mc # optional: Midnight Commander als Dateimanager
```
### Docker-Host (Weboberfläche)
Gebraucht wird eine vollständige Docker-Umgebung – Docker Engine **und** das Compose-Plugin
(Befehl `docker compose` mit Leerzeichen), `amd64` oder `arm64`.
Auf Ubuntu 24.04/26.04 z. B. mit dem
[Docker-Installer](https://git.retronerd.at/schiwagoa/public-docker-installer-26.04-v1):
```bash
git clone https://git.retronerd.at/schiwagoa/public-docker-installer-26.04-v1.git
cd public-docker-installer-26.04-v1
chmod +x *.sh
./docker-installer-2604-v1.sh
```
Diese Anleitung verwendet `docker compose` (Plugin). Der Installer richtet zusätzlich das
eigenständige `docker-compose` ein; das Plugin kommt normalerweise mit `docker-ce` mit.
Prüfen – beide Befehle müssen eine Version ausgeben:
```bash
docker version --format '{{.Server.Version}}'
docker compose version
```
Meldet `docker compose version` den Fehler `'compose' is not a docker command`, das Plugin
nachinstallieren: `apt install -y docker-compose-plugin`.
In einem **LXC-Container** braucht Docker auf dem Proxmox-Host die Features
`nesting=1,keyctl=1` (unprivilegierter Container: `pct set <id> --features nesting=1,keyctl=1`,
danach den Container neu starten).
### fail2ban-Hosts (Agent)
```bash
apt install -y fail2ban python3 sudo openssh-server
systemctl enable --now fail2ban
fail2ban-client ping # Server replied: pong
```
- fail2ban ≥ 0.11 (Start-/Endzeiten der Sperren brauchen `--with-time`)
- `sudo` nur für den Standardbenutzer `f2bweb`; mit einem root-Schlüssel nicht nötig
- `bash`, `ssh-keygen` (Teil von OpenSSH) für den Installer
## Schnellstart ## Schnellstart
Voraussetzungen siehe oben (Grundpakete, Docker, Agent auf den fail2ban-Hosts).
```bash ```bash
mkdir -p /opt/fail2ban-webui/{config,data} && cd /opt/fail2ban-webui mkdir -p /opt/fail2ban-webui/{config,data} && cd /opt/fail2ban-webui
curl -fsSLo docker-compose.yaml https://git.retronerd.at/schiwagoa/fail2ban-webui/raw/branch/main/examples/docker-compose.yaml curl -fsSLo docker-compose.yaml https://git.retronerd.at/schiwagoa/fail2ban-webui/raw/branch/main/examples/docker-compose.yaml
curl -fsSLo .env https://git.retronerd.at/schiwagoa/fail2ban-webui/raw/branch/main/examples/.env.example curl -fsSLo .env https://git.retronerd.at/schiwagoa/fail2ban-webui/raw/branch/main/examples/.env.example
curl -fsSLo config/hosts.yaml https://git.retronerd.at/schiwagoa/fail2ban-webui/raw/branch/main/examples/hosts.yaml.example curl -fsSLo config/hosts.yaml https://git.retronerd.at/schiwagoa/fail2ban-webui/raw/branch/main/examples/hosts.yaml.example
chown -R 10050:10050 data chown -R 10050:10050 data
```
> **Noch kein fertiges Image:** Solange `git.retronerd.at/schiwagoa/fail2ban-webui` in der
> Registry noch nicht veröffentlicht ist, das Image einmalig lokal unter demselben Namen
> bauen – Docker Compose verwendet dann das lokale Image und versucht keinen Download:
>
> ```bash
> git clone https://git.retronerd.at/schiwagoa/fail2ban-webui.git /opt/fail2ban-webui-src
> docker build -f /opt/fail2ban-webui-src/docker/Dockerfile --build-arg VERSION=dev > -t git.retronerd.at/schiwagoa/fail2ban-webui:latest /opt/fail2ban-webui-src
> ```
```bash
docker compose run --rm -it fail2ban-webui hash-password # Zeile in die .env übernehmen docker compose run --rm -it fail2ban-webui hash-password # Zeile in die .env übernehmen
docker compose run --rm fail2ban-webui keygen # öffentlicher Schlüssel für die Agenten docker compose run --rm fail2ban-webui keygen # öffentlicher Schlüssel für die Agenten
# auf jedem fail2ban-Host den Agenten installieren (docs/agent.md), danach: # auf jedem fail2ban-Host den Agenten installieren (docs/agent.md), danach:
@@ -60,12 +129,6 @@ Die Oberfläche lauscht auf `127.0.0.1:8080` – davor gehört ein Reverse Proxy
| [Entwicklung](docs/development.md) | lokales Testbed, Tests, neue Sprache hinzufügen | | [Entwicklung](docs/development.md) | lokales Testbed, Tests, neue Sprache hinzufügen |
| [Sicherheit](SECURITY.md) | Sicherheitsmodell und Melden von Schwachstellen | | [Sicherheit](SECURITY.md) | Sicherheitsmodell und Melden von Schwachstellen |
## Voraussetzungen
- Weboberfläche: Docker mit Compose v2, `amd64` oder `arm64`
- Jeder fail2ban-Host: fail2ban ≥ 0.11 (Start-/Endzeiten brauchen `--with-time`), `python3`,
`sshd`, `sudo` (oder ein root-Schlüssel), `bash`
## Lizenz ## Lizenz
[MIT](LICENSE). IP-Geolokalisierung durch [DB-IP Lite](https://db-ip.com) (CC BY 4.0), wird [MIT](LICENSE). IP-Geolokalisierung durch [DB-IP Lite](https://db-ip.com) (CC BY 4.0), wird
+15 -1
View File
@@ -9,7 +9,11 @@ Die Agenten auf den fail2ban-Hosts sind in [agent.md](agent.md) beschrieben; du
## 1. Voraussetzungen ## 1. Voraussetzungen
- Docker Engine mit Compose v2 (`docker compose version`) - Grundpakete `curl` und `git` (`apt install -y curl git`; `mc` optional) – in frischen
LXC-Templates fehlt `curl`
- Docker Engine mit Compose-Plugin (`docker compose version`), z. B. über den
[Docker-Installer](https://git.retronerd.at/schiwagoa/public-docker-installer-26.04-v1) –
Details in den [Voraussetzungen im README](../README.md#voraussetzungen)
- Ausgehendes SSH (TCP 22 oder dein Port) vom Docker-Host zu jedem fail2ban-Host - Ausgehendes SSH (TCP 22 oder dein Port) vom Docker-Host zu jedem fail2ban-Host
- Ein DNS-Name und ein Reverse Proxy mit TLS für die Oberfläche (siehe [reverse-proxy.md](reverse-proxy.md)) - Ein DNS-Name und ein Reverse Proxy mit TLS für die Oberfläche (siehe [reverse-proxy.md](reverse-proxy.md))
@@ -105,6 +109,16 @@ networks:
Läuft der Reverse Proxy auf einer anderen Maschine, den Port stattdessen an die LAN-Adresse Läuft der Reverse Proxy auf einer anderen Maschine, den Port stattdessen an die LAN-Adresse
binden, z. B. `"192.168.1.10:8080:8080"` – niemals ohne Firewall davor an `0.0.0.0`. binden, z. B. `"192.168.1.10:8080:8080"` – niemals ohne Firewall davor an `0.0.0.0`.
Solange das Image in der Registry noch nicht veröffentlicht ist, schlägt der Download fehl
(`manifest unknown` bzw. `pull access denied`). Dann das Image einmalig lokal unter demselben
Namen bauen:
```bash
git clone https://git.retronerd.at/schiwagoa/fail2ban-webui.git /opt/fail2ban-webui-src
docker build -f /opt/fail2ban-webui-src/docker/Dockerfile --build-arg VERSION=dev \
-t git.retronerd.at/schiwagoa/fail2ban-webui:latest /opt/fail2ban-webui-src
```
## 4. .env ## 4. .env
Mit dieser minimalen Datei beginnen; alle Optionen stehen in Mit dieser minimalen Datei beginnen; alle Optionen stehen in
+3
View File
@@ -133,6 +133,9 @@ ein präparierter Benutzername kann also keine zweite Logzeile einschleusen.
| Symptom | Ursache / Lösung | | Symptom | Ursache / Lösung |
|---|---| |---|---|
| `curl: command not found` / `git: command not found` | frisches Minimal-System (z. B. LXC-Template) → `apt install -y curl git` |
| `docker: 'compose' is not a docker command` | nur das eigenständige `docker-compose` vorhanden → `apt install -y docker-compose-plugin` |
| `manifest unknown` / `pull access denied` beim Start | Image noch nicht in der Registry → lokal bauen, siehe [Installation, Schritt 3](installation.md#3-docker-composeyaml) |
| Container beendet sich: `… is not writable for UID 10050` | `chown -R 10050:10050 data` | | Container beendet sich: `… is not writable for UID 10050` | `chown -R 10050:10050 data` |
| Container beendet sich: `AUTH_MODE=local needs AUTH_PASSWORD_HASH` | `hash-password` ausführen, Zeile mit einfachen Anführungszeichen einfügen | | Container beendet sich: `AUTH_MODE=local needs AUTH_PASSWORD_HASH` | `hash-password` ausführen, Zeile mit einfachen Anführungszeichen einfügen |
| Container beendet sich: `No hosts configured` | `config/hosts.yaml` fehlt oder ist leer; unter Windows/Docker Desktop: das Laufwerk lässt sich nicht einbinden | | Container beendet sich: `No hosts configured` | `config/hosts.yaml` fehlt oder ist leer; unter Windows/Docker Desktop: das Laufwerk lässt sich nicht einbinden |