docs: Docker-Installationsanleitung in docs/DOCKER.md
- Schritt-fuer-Schritt vom ersten git clone bis zum ersten Login - Haeufige Aufgaben: Logs, Neustart, Update, Konfiguration aendern - Datensicherung: pg_dump Befehle - Troubleshooting: die haeufigsten Probleme - Port-Uebersicht - README: Docker-Quickstart auf 4 Zeilen reduziert, Verweis auf DOCKER.md - Actions-Workflow entfernt (keine fertigene Images noetig) - docker-compose.build.yml entfernt (vereinfacht)
This commit is contained in:
parent
3afd5c8445
commit
d312a33d9e
@ -1,65 +0,0 @@
|
|||||||
name: Docker Images bauen und pushen
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- release
|
|
||||||
tags:
|
|
||||||
- "v*"
|
|
||||||
|
|
||||||
env:
|
|
||||||
REGISTRY: git.cynfo.net
|
|
||||||
IMAGE_BACKEND: git.cynfo.net/christian/rmm2/backend
|
|
||||||
IMAGE_FRONTEND: git.cynfo.net/christian/rmm2/frontend
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-and-push:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Login in Gitea Container Registry
|
|
||||||
uses: docker/login-action@v3
|
|
||||||
with:
|
|
||||||
registry: ${{ env.REGISTRY }}
|
|
||||||
username: ${{ secrets.REGISTRY_USER }}
|
|
||||||
password: ${{ secrets.REGISTRY_PASSWORD }}
|
|
||||||
|
|
||||||
- name: Docker Buildx einrichten
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
|
|
||||||
- name: Image-Tag bestimmen
|
|
||||||
id: meta
|
|
||||||
run: |
|
|
||||||
if [[ "${{ github.ref }}" == refs/tags/* ]]; then
|
|
||||||
TAG="${{ github.ref_name }}"
|
|
||||||
else
|
|
||||||
TAG="latest"
|
|
||||||
fi
|
|
||||||
echo "tag=${TAG}" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Backend bauen und pushen
|
|
||||||
uses: docker/build-push-action@v5
|
|
||||||
with:
|
|
||||||
context: ./backend
|
|
||||||
push: true
|
|
||||||
tags: |
|
|
||||||
${{ env.IMAGE_BACKEND }}:${{ steps.meta.outputs.tag }}
|
|
||||||
${{ env.IMAGE_BACKEND }}:latest
|
|
||||||
cache-from: type=registry,ref=${{ env.IMAGE_BACKEND }}:buildcache
|
|
||||||
cache-to: type=registry,ref=${{ env.IMAGE_BACKEND }}:buildcache,mode=max
|
|
||||||
|
|
||||||
- name: Frontend bauen und pushen
|
|
||||||
uses: docker/build-push-action@v5
|
|
||||||
with:
|
|
||||||
context: ./frontend
|
|
||||||
push: true
|
|
||||||
tags: |
|
|
||||||
${{ env.IMAGE_FRONTEND }}:${{ steps.meta.outputs.tag }}
|
|
||||||
${{ env.IMAGE_FRONTEND }}:latest
|
|
||||||
# BACKEND_HOST ist zur Laufzeit nicht bekannt — wird im Compose via Env gesetzt
|
|
||||||
# Wer eigene Images braucht: docker compose build
|
|
||||||
cache-from: type=registry,ref=${{ env.IMAGE_FRONTEND }}:buildcache
|
|
||||||
cache-to: type=registry,ref=${{ env.IMAGE_FRONTEND }}:buildcache,mode=max
|
|
||||||
32
README.md
32
README.md
@ -160,38 +160,18 @@ Client ──► Backend:ProxyPort ──► WebSocket (Binary) ──► Agent
|
|||||||
|
|
||||||
### Docker (empfohlen)
|
### Docker (empfohlen)
|
||||||
|
|
||||||
Der einfachste Weg. Voraussetzung: [Docker](https://docs.docker.com/get-docker/) + [Docker Compose](https://docs.docker.com/compose/install/) installiert.
|
Voraussetzung: Docker installiert (`curl -fsSL https://get.docker.com | sh`).
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 1. Repository klonen
|
git clone <repo-url> && cd rmm
|
||||||
git clone https://git.example.com/rmm.git && cd rmm
|
git checkout release
|
||||||
|
cp .env.example .env # .env anpassen (IP-Adresse, Passwörter, API-Key)
|
||||||
# 2. Konfiguration anlegen
|
|
||||||
cp .env.example .env
|
|
||||||
```
|
|
||||||
|
|
||||||
`.env` anpassen:
|
|
||||||
```env
|
|
||||||
BACKEND_HOST=192.168.1.100 # IP/Hostname dieses Servers
|
|
||||||
DB_PASSWORD=sicheres_passwort
|
|
||||||
JWT_SECRET=$(openssl rand -hex 32)
|
|
||||||
API_KEY=$(openssl rand -hex 16)
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 3. Starten (baut alle Images automatisch)
|
|
||||||
docker compose up -d
|
docker compose up -d
|
||||||
|
|
||||||
# 4. Status prüfen
|
|
||||||
docker compose ps
|
|
||||||
docker compose logs backend
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Fertig. Frontend unter `http://<BACKEND_HOST>`, Backend-API unter `https://<BACKEND_HOST>:8443`.
|
Fertig. Frontend unter `http://<BACKEND_HOST>`.
|
||||||
|
|
||||||
> **Hinweis:** Die Frontend-Konfiguration (Backend-Host, API-Key) wird zur **Laufzeit** via ENV
|
Vollständige Anleitung mit allen Details, Troubleshooting und Backup: **[docs/DOCKER.md](docs/DOCKER.md)**
|
||||||
> in den Container injiziert — kein Rebuild bei IP-Änderungen nötig.
|
|
||||||
> Selbst bauen statt fertige Images: `docker compose -f docker-compose.yml -f docker-compose.build.yml up -d`
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@ -1,11 +0,0 @@
|
|||||||
# Lokaler Build statt fertige Images verwenden:
|
|
||||||
# docker compose -f docker-compose.yml -f docker-compose.build.yml up -d
|
|
||||||
|
|
||||||
services:
|
|
||||||
backend:
|
|
||||||
build: ./backend
|
|
||||||
image: ~
|
|
||||||
|
|
||||||
frontend:
|
|
||||||
build: ./frontend
|
|
||||||
image: ~
|
|
||||||
@ -16,7 +16,7 @@ services:
|
|||||||
retries: 10
|
retries: 10
|
||||||
|
|
||||||
backend:
|
backend:
|
||||||
image: git.cynfo.net/christian/rmm2/backend:latest
|
build: ./backend
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
- "8443:8443"
|
- "8443:8443"
|
||||||
@ -32,7 +32,7 @@ services:
|
|||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
|
|
||||||
frontend:
|
frontend:
|
||||||
image: git.cynfo.net/christian/rmm2/frontend:latest
|
build: ./frontend
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
- "80:80"
|
- "80:80"
|
||||||
|
|||||||
221
docs/DOCKER.md
Normal file
221
docs/DOCKER.md
Normal file
@ -0,0 +1,221 @@
|
|||||||
|
# Docker Installation
|
||||||
|
|
||||||
|
Diese Anleitung erklärt, wie du das RMM-System mit Docker auf einem Linux-Server installierst.
|
||||||
|
|
||||||
|
## Voraussetzungen
|
||||||
|
|
||||||
|
- Linux-Server (Debian 12 / Ubuntu 22.04 oder neuer empfohlen)
|
||||||
|
- Mindestens 2 GB RAM, 10 GB freier Speicherplatz
|
||||||
|
- Docker und Docker Compose installiert
|
||||||
|
|
||||||
|
**Docker installieren** (falls noch nicht vorhanden):
|
||||||
|
```bash
|
||||||
|
curl -fsSL https://get.docker.com | sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Das war es. Docker Compose ist seit Docker 2.x automatisch dabei (`docker compose`).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
### Schritt 1 — Repository klonen
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://git.cynfo.net/christian/rmm2.git
|
||||||
|
cd rmm2
|
||||||
|
git checkout release
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Schritt 2 — Konfigurationsdatei anlegen
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp .env.example .env
|
||||||
|
```
|
||||||
|
|
||||||
|
Öffne `.env` mit einem Texteditor und trage deine Werte ein:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nano .env
|
||||||
|
```
|
||||||
|
|
||||||
|
Die Datei sieht so aus:
|
||||||
|
|
||||||
|
```env
|
||||||
|
# IP-Adresse oder Hostname dieses Servers
|
||||||
|
# (die Adresse über die du später im Browser das Frontend erreichst)
|
||||||
|
BACKEND_HOST=192.168.1.100
|
||||||
|
|
||||||
|
# Port des Backends — 8443 ist der Standard, nur ändern wenn nötig
|
||||||
|
BACKEND_PORT=8443
|
||||||
|
|
||||||
|
# Datenbank-Passwort — frei wählbar, wird nur intern verwendet
|
||||||
|
DB_PASSWORD=einSicheresPasswort123
|
||||||
|
|
||||||
|
# JWT-Secret — langer zufälliger String, mindestens 32 Zeichen
|
||||||
|
# Tipp: openssl rand -hex 32
|
||||||
|
JWT_SECRET=hierEinenLangenZufaelligenStringEintragen
|
||||||
|
|
||||||
|
# API-Key — frei wählbar, wird vom Frontend und den Agents verwendet
|
||||||
|
# Tipp: openssl rand -hex 16
|
||||||
|
API_KEY=hierEinenApiKeyEintragen
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Wichtig:** `BACKEND_HOST` ist die IP-Adresse oder der Hostname des Servers auf dem
|
||||||
|
> Docker läuft — nicht `localhost`. Der Browser muss diese Adresse erreichen können,
|
||||||
|
> um mit dem Backend zu kommunizieren.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Schritt 3 — Starten
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
Beim ersten Start lädt Docker die benötigten Basis-Images (postgres, nginx etc.) und
|
||||||
|
baut dann das Backend und das Frontend. Das dauert beim ersten Mal 3-5 Minuten.
|
||||||
|
|
||||||
|
Danach läuft das System und startet automatisch nach einem Server-Reboot neu.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Schritt 4 — Prüfen ob alles läuft
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose ps
|
||||||
|
```
|
||||||
|
|
||||||
|
Die Ausgabe sollte so aussehen:
|
||||||
|
|
||||||
|
```
|
||||||
|
NAME STATUS PORTS
|
||||||
|
rmm-db-1 Up (healthy) 5432/tcp
|
||||||
|
rmm-backend-1 Up 0.0.0.0:8443->8443/tcp
|
||||||
|
rmm-frontend-1 Up 0.0.0.0:80->80/tcp
|
||||||
|
```
|
||||||
|
|
||||||
|
Alle drei Services müssen `Up` zeigen. Wenn `db` noch `starting` zeigt, warte
|
||||||
|
20-30 Sekunden — die Datenbank braucht beim allerersten Start etwas länger.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Schritt 5 — Erster Login
|
||||||
|
|
||||||
|
Rufe das Frontend im Browser auf:
|
||||||
|
|
||||||
|
```
|
||||||
|
http://<BACKEND_HOST>
|
||||||
|
```
|
||||||
|
|
||||||
|
Beim ersten Start legt das Backend automatisch einen Admin-Account an.
|
||||||
|
Die Zugangsdaten stehen im Backend-Log:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose logs backend | grep -i "admin\|password\|passwort"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Häufige Aufgaben
|
||||||
|
|
||||||
|
### Logs anschauen
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Alle Services
|
||||||
|
docker compose logs -f
|
||||||
|
|
||||||
|
# Nur Backend
|
||||||
|
docker compose logs -f backend
|
||||||
|
|
||||||
|
# Nur die letzten 50 Zeilen
|
||||||
|
docker compose logs --tail=50 backend
|
||||||
|
```
|
||||||
|
|
||||||
|
### System stoppen und neu starten
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Stoppen (Daten bleiben erhalten)
|
||||||
|
docker compose down
|
||||||
|
|
||||||
|
# Starten
|
||||||
|
docker compose up -d
|
||||||
|
|
||||||
|
# Neu starten (z.B. nach Konfigurationsänderung)
|
||||||
|
docker compose restart backend
|
||||||
|
```
|
||||||
|
|
||||||
|
### System aktualisieren
|
||||||
|
|
||||||
|
Nach einem `git pull` musst du die Images neu bauen:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git pull
|
||||||
|
docker compose build
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### Konfiguration ändern (`.env` wurde bearbeitet)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Nach Änderung von BACKEND_HOST, API_KEY etc.:
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
Docker Compose erkennt automatisch, dass sich die ENV-Werte geändert haben
|
||||||
|
und startet die betroffenen Container neu.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Datensicherung
|
||||||
|
|
||||||
|
Die Datenbank liegt in einem Docker Volume (`pgdata`). Um ein Backup zu erstellen:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Backup erstellen
|
||||||
|
docker compose exec db pg_dump -U rmm rmm > rmm-backup-$(date +%Y%m%d).sql
|
||||||
|
|
||||||
|
# Backup wiederherstellen
|
||||||
|
docker compose exec -T db psql -U rmm rmm < rmm-backup-20260101.sql
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Backend startet nicht
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose logs backend
|
||||||
|
```
|
||||||
|
|
||||||
|
Häufige Ursachen:
|
||||||
|
- **Datenbank noch nicht bereit**: Warte 30 Sekunden, dann `docker compose restart backend`
|
||||||
|
- **Port 8443 belegt**: Prüfe mit `ss -tlnp | grep 8443` was den Port belegt
|
||||||
|
|
||||||
|
### Frontend zeigt „Verbindung fehlgeschlagen"
|
||||||
|
|
||||||
|
- Prüfe ob `BACKEND_HOST` in `.env` die richtige IP-Adresse ist
|
||||||
|
- Prüfe ob Port 8443 in der Firewall freigegeben ist
|
||||||
|
- Teste direkt: `curl -sk https://<BACKEND_HOST>:8443/api/v1/health`
|
||||||
|
|
||||||
|
### Datenbank-Volume zurücksetzen (Achtung: löscht alle Daten)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose down -v # -v löscht auch Volumes
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Ports
|
||||||
|
|
||||||
|
| Port | Service | Beschreibung |
|
||||||
|
|------|---------|-------------|
|
||||||
|
| 80 | Frontend | Web-Oberfläche (Browser) |
|
||||||
|
| 8443 | Backend | REST-API + WebSocket (Agents + Frontend) |
|
||||||
|
|
||||||
|
Port 80 und 8443 müssen von deinem Netzwerk erreichbar sein.
|
||||||
|
Port 5432 (Datenbank) ist nur intern verfügbar.
|
||||||
Loading…
x
Reference in New Issue
Block a user