From 0da0bfe8a391e3229deab1012349b9a9bdbe356a Mon Sep 17 00:00:00 2001 From: duffyduck Date: Fri, 13 Feb 2026 08:31:56 +0100 Subject: [PATCH] readme and genereate key --- .env | 15 ++++++ README.md | 128 +++++++++++++++++++++++++++++++++++++++++++++ generate-secret.sh | 14 +++++ 3 files changed, 157 insertions(+) create mode 100644 .env create mode 100755 generate-secret.sh diff --git a/.env b/.env new file mode 100644 index 0000000..d85cbfb --- /dev/null +++ b/.env @@ -0,0 +1,15 @@ +# =========================================== +# Docker Registry - Konfiguration +# =========================================== + +# Domain unter der die Registry erreichbar ist +# Muss auf die IP des Servers zeigen (DNS A-Record) +# Caddy holt automatisch ein Let's Encrypt Zertifikat +DOMAIN=registry.example.com + +# Admin-Zugangsdaten fuer die Benutzerverwaltungs-Weboberflaeche +ADMIN_USER=admin +ADMIN_PASSWORD=changeme + +# Geheimer Schluessel fuer Flask-Sessions (bitte aendern!) +SECRET_KEY=bitte-aendern-zu-einem-zufaelligen-schluessel diff --git a/README.md b/README.md index e69de29..da0e14f 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,128 @@ +# Docker Registry mit Benutzerverwaltung + +Private Docker Registry mit Web-Oberflaeche zur Benutzerverwaltung, HTTPS via Caddy und SQLite als Datenbank. + +## Voraussetzungen + +- Docker und Docker Compose +- Eine Domain die auf den Server zeigt (A-Record) +- Port 80 und 443 frei + +## Einrichtung + +### 1. `.env` Datei anpassen + +```bash +nano .env +``` + +Folgende Werte setzen: + +| Variable | Beschreibung | +|----------|-------------| +| `DOMAIN` | Deine Domain, z.B. `registry.meinserver.de` | +| `ADMIN_USER` | Benutzername fuer die Web-Oberflaeche | +| `ADMIN_PASSWORD` | Passwort fuer die Web-Oberflaeche | +| `SECRET_KEY` | Zufaelliger Schluessel (siehe unten) | + +### 2. Secret Key generieren + +```bash +./generate-secret.sh +``` + +Traegt automatisch einen zufaelligen Schluessel in die `.env` Datei ein. + +### 3. Starten + +```bash +docker compose up -d --build +``` + +Caddy holt sich automatisch ein Let's Encrypt HTTPS-Zertifikat fuer die konfigurierte Domain. + +## Benutzerverwaltung + +Web-Oberflaeche oeffnen unter: + +``` +https://DEINE-DOMAIN/ +``` + +Dort mit den Admin-Zugangsdaten aus der `.env` anmelden. Ueber die Oberflaeche kannst du: + +- Neue Registry-Benutzer anlegen +- Passwoerter aendern +- Benutzer loeschen + +## Images pushen und pullen + +### Anmelden + +```bash +docker login registry.meinserver.de +``` + +Benutzername und Passwort eingeben (die in der Web-Oberflaeche angelegten Zugangsdaten). + +### Image taggen und pushen + +```bash +# Lokales Image taggen +docker tag mein-image:latest registry.meinserver.de/mein-image:latest + +# Image hochladen +docker push registry.meinserver.de/mein-image:latest +``` + +### Image pullen + +```bash +docker pull registry.meinserver.de/mein-image:latest +``` + +### Image mit Build direkt pushen + +```bash +docker build -t registry.meinserver.de/mein-app:1.0 . +docker push registry.meinserver.de/mein-app:1.0 +``` + +## Nuetzliche Befehle + +```bash +# Alle Images in der Registry auflisten +curl -u benutzer:passwort https://registry.meinserver.de/v2/_catalog + +# Tags eines Images auflisten +curl -u benutzer:passwort https://registry.meinserver.de/v2/mein-image/tags/list + +# Logs anzeigen +docker compose logs -f + +# Stoppen +docker compose down + +# Stoppen und alle Daten loeschen +docker compose down +rm -rf data/ +``` + +## Datenverzeichnisse + +Alle Daten liegen lokal im `./data/` Ordner: + +| Pfad | Inhalt | +|------|--------| +| `data/caddy/` | TLS-Zertifikate (Let's Encrypt) | +| `data/registry/` | Gespeicherte Docker Images | +| `data/auth/users.db` | SQLite Datenbank mit Benutzern | +| `data/htpasswd/` | Generierte htpasswd fuer die Registry | + +## Backup + +Fuer ein vollstaendiges Backup reicht es den `data/` Ordner und die `.env` Datei zu sichern: + +```bash +tar czf backup-$(date +%Y%m%d).tar.gz data/ .env +``` diff --git a/generate-secret.sh b/generate-secret.sh new file mode 100755 index 0000000..38e9bd8 --- /dev/null +++ b/generate-secret.sh @@ -0,0 +1,14 @@ +#!/bin/sh +# Generiert einen zufaelligen SECRET_KEY und traegt ihn in die .env Datei ein + +SECRET=$(openssl rand -hex 32) + +if [ ! -f .env ]; then + echo "Fehler: .env Datei nicht gefunden. Bitte zuerst erstellen." + exit 1 +fi + +sed -i "s|^SECRET_KEY=.*|SECRET_KEY=${SECRET}|" .env + +echo "SECRET_KEY wurde generiert und in .env eingetragen:" +echo "SECRET_KEY=${SECRET}"