kurse:youtube:digitalcraft_corestack:digitalcraft_corestack

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
kurse:youtube:digitalcraft_corestack:digitalcraft_corestack [2026/03/15 13:54] – [1) Vorbereitung] strangelovekurse:youtube:digitalcraft_corestack:digitalcraft_corestack [2026/03/16 11:01] (aktuell) – [5) Docker-Stacks (RAM-optimiert & funktionssicher)] strangelove
Zeile 1: Zeile 1:
-===== Raspberry Pi 4 (2GB RAM) – Heimserver Setup (RAM-optimiert) ===== +===== Raspberry Pi 4 (2GB RAM) – Heimserver CoreStack ===== 
-**Ziel:** Stabiler Betrieb mit **DokuWiki**, **File Browser**, **Cockpit** und **Gogs** (Git) auf einem Raspberry Pi 4 mit 2GB RAM. +**Ziel:** Stabiler Betrieb mit\\ 
-**Wichtig:** Alle Befehle sind **copy-paste-fertig** – einfach ins Terminal einfügen!+\\ 
 +**DokuWiki**,\\ 
 +**File Browser**,\\ 
 +**Cockpit**\\ 
 +und **Gogs** (Git) auf einem Raspberry Pi 4 mit **2GB RAM**.\\   
 +\\ 
 +**Wichtig:** Alle Befehle sind **copy-paste-fertig**.
  
 ---- ----
Zeile 20: Zeile 26:
 free -h free -h
 </code> </code>
-**Zeigt freien RAM an** (sollte ~1.5GB frei sein, bevor wir starten).+**Zeigt freien RAM an** (ideal: möglichst viel frei vor dem Start).
  
 <code bash> <code bash>
Zeile 48: Zeile 54:
  
 <code bash> <code bash>
-sudo apt install -y mc git curl wget+sudo apt install -y mc git curl wget ca-certificates gnupg
 </code> </code>
-  * **''mc''** (Midnight Commander) – Textbasierter Dateimanager +  * **''mc''** – Midnight Commander (Dateimanager) 
-  * **''git''** – Wird für Gogs benötigt+  * **''git''** – für Repos/Tools
   * **''curl/wget''** – Download-Tools   * **''curl/wget''** – Download-Tools
 +  * **''gnupg/ca-certificates''** – für Docker-Repo
  
 ---- ----
  
-==== 2) Digitalcraft Ordnerstruktur (einheitlich!) ==== +==== 2) Digitalcraft Ordnerstruktur (einheitlich) ==== 
-**Root:** ''/srv/docker/corestack''+**Root:** ''/srv/docker/corestack''  
 **Pro Dienst ein Ordner:** **Pro Dienst ein Ordner:**
   * ''/srv/docker/corestack/wikicore'' (DokuWiki)   * ''/srv/docker/corestack/wikicore'' (DokuWiki)
Zeile 74: Zeile 81:
 **Erklärung:** **Erklärung:**
   * ''mkdir -p'' erstellt alle Ordner inkl. Zwischenverzeichnisse   * ''mkdir -p'' erstellt alle Ordner inkl. Zwischenverzeichnisse
-  * ''chown'' setzt dich als Besitzer (kein ''sudo'' mehr nötig)+  * ''chown'' setzt dich als Besitzer (im CoreStack weniger ''sudo'' nötig)
  
 ---- ----
Zeile 93: Zeile 100:
 sudo systemctl enable --now cockpit.socket sudo systemctl enable --now cockpit.socket
 </code> </code>
 +
 **Zugriff:** **Zugriff:**
 <code> <code>
 https://<PI-IP>:9090 https://<PI-IP>:9090
 </code> </code>
 +
 **Nutze Cockpit für:** **Nutze Cockpit für:**
   * System-Logs   * System-Logs
Zeile 105: Zeile 114:
 ---- ----
  
-==== 4) Docker + Compose installieren ====+==== 4) Docker + Compose installieren (Debian/Raspberry Pi OS) ====
  
-==== 4.1 Grundtools installieren ==== +==== 4.1 Docker GPG-Key speichern ====
- +
-<code bash> +
-sudo apt-get install -y ca-certificates curl gnupg +
-</code> +
- +
-==== 4.2 Keyring-Ordner anlegen ====+
  
 <code bash> <code bash>
 sudo install -m 0755 -d /etc/apt/keyrings sudo install -m 0755 -d /etc/apt/keyrings
-</code> 
- 
-==== 4.3 Docker GPG-Key speichern ==== 
- 
-<code bash> 
 curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
-</code> 
- 
-==== 4.4 Leserechte setzen ==== 
- 
-<code bash> 
 sudo chmod a+r /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg
 </code> </code>
  
-==== 4.Docker Repo eintragen ====+==== 4.Docker Repo eintragen ====
  
 <code bash> <code bash>
-echo +echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null 
-  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian +sudo apt update
-  $(. /etc/os-release && echo "$VERSION_CODENAME") stable"+
-  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null +
-sudo apt-get update+
 </code> </code>
  
-==== 4.Docker installieren ====+==== 4.Docker installieren ====
  
 <code bash> <code bash>
-sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin+sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
 </code> </code>
  
-==== 4.Docker ohne sudo nutzen ====+==== 4.Docker ohne sudo nutzen ====
  
 <code bash> <code bash>
 sudo usermod -aG docker $USER sudo usermod -aG docker $USER
 newgrp docker newgrp docker
 +
 docker version docker version
 docker compose version docker compose version
 </code> </code>
-**Teste Docker:**+ 
 +**Test:**
 <code bash> <code bash>
 docker run --rm hello-world docker run --rm hello-world
 </code> </code>
-→ Sollte "Hello from Docker!ausgeben.+→ Sollte Hello from Docker!“ ausgeben.
  
 ---- ----
  
-==== 4.Gemeinsames Docker-Netzwerk erstellen ====+==== 4.Gemeinsames Docker-Netzwerk erstellen ====
  
 <code bash> <code bash>
Zeile 169: Zeile 161:
 docker network ls | grep dc-net docker network ls | grep dc-net
 </code> </code>
 +
 **Zweck:** Alle Container kommunizieren über ''dc-net'' (z. B. ''dc-gogs'' statt IP-Adressen). **Zweck:** Alle Container kommunizieren über ''dc-net'' (z. B. ''dc-gogs'' statt IP-Adressen).
  
 ---- ----
  
-==== 5) Docker-Stacks einrichten ==== +==== 5) Docker-Stacks (RAM-optimiert & funktionssicher) ====
-Jeder Dienst hat seinen eigenen Ordner mit ''docker-compose.yml''. **RAM-Limits sind strikt gesetzt!**+
  
----- 
  
 ==== Stack 01 – DokuWiki (WikiCore) ==== ==== Stack 01 – DokuWiki (WikiCore) ====
Zeile 183: Zeile 174:
 ==== 1) .env ==== ==== 1) .env ====
 Datei: ''/srv/docker/corestack/wikicore/.env'' Datei: ''/srv/docker/corestack/wikicore/.env''
 +
 <code> <code>
 TZ=Europe/Berlin TZ=Europe/Berlin
Zeile 189: Zeile 181:
 WIKICORE_PORT=8080 WIKICORE_PORT=8080
 </code> </code>
-**Hinweis:** ''PUID''/''PGID'' mit ''id -u'' und ''id -g'' prüfen.+ 
 +**Hinweis:** ''PUID/PGID'' prüfen: 
 +<code bash> 
 +id -u 
 +id -g 
 +</code>
  
 ==== 2) docker-compose.yml ==== ==== 2) docker-compose.yml ====
 Datei: ''/srv/docker/corestack/wikicore/docker-compose.yml'' Datei: ''/srv/docker/corestack/wikicore/docker-compose.yml''
 +
 <file yaml> <file yaml>
 services: services:
Zeile 209: Zeile 207:
       - dc-net       - dc-net
     restart: unless-stopped     restart: unless-stopped
-    deploy: 
-      resources: 
-        limits: 
-          memory: 256M  # RAM-Limit 
  
 networks: networks:
Zeile 225: Zeile 219:
 docker compose ps docker compose ps
 </code> </code>
 +
 **Zugriff:** **Zugriff:**
 <code> <code>
Zeile 232: Zeile 227:
 ---- ----
  
-==== Stack 02 – File Browser ====+==== Stack 02 – File Browser (KORRIGIERT: DB-Datei manuell anlegen!) ====
 **Pfad:** ''/srv/docker/corestack/filebrowser/'' **Pfad:** ''/srv/docker/corestack/filebrowser/''
  
-====  1) Vorbereitung ====+**Warum dieser Fix wichtig ist:**   
 +File Browser nutzt eine SQLite-DB. Wenn die DB-Datei/der DB-Ordner nicht existiert oder nicht beschreibbar ist, startet der Container zwar ggf. – aber Settings/Login/Initialisierung gehen schief.   
 +**Lösung:** DB-Datei einmalig anlegen + Rechte sauber setzen.
  
-Viele Docker‑Images laufen nicht als root, sondern als normaler Benutzer im Container.\\ +==== 1) Vorbereitung (Ordner + DB-Datei + Rechte) ====
-Damit der Container Daten speichern kann, müssen die gemounteten Ordner die passenden Rechte haben.\\ +
- +
-Wir verwenden dafür die Benutzer‑ID 1000, die auf den meisten Linux‑Systemen dem ersten Benutzer entspricht. +
- +
-Ordner erstellen+
 <code bash> <code bash>
-sudo mkdir -p /srv/docker/corestack/filebrowser/config 
 cd /srv/docker/corestack/filebrowser cd /srv/docker/corestack/filebrowser
-</code> 
  
-Rechte setzen+# Ordnerstruktur anlegen (config + database sind Pflicht) 
 +mkdir -p config database
  
-<code bash> +# DB-Datei manuell anlegen (WICHTIG!) 
-sudo chown -R 1000:1000 config +touch database/filebrowser.db
-</code> +
- +
-Damit darf der Container später in diesen Ordner schreiben.\\+
  
-Warum ist das wichtig?\\ +Rechte setzen (Standard-User 1000:1000) 
-Wenn die Rechte nicht stimmen, erscheint später ein Fehler wie:\\ +sudo chown -R 1000:1000 config database
-<code bash>Permission denied +
-cpcan't create '/config/settings.json'+
 </code> </code>
- 
-Nach dem Setzen der Rechte kann der Container problemlos starten. 
  
 ==== 2) .env ==== ==== 2) .env ====
 Datei: ''/srv/docker/corestack/filebrowser/.env'' Datei: ''/srv/docker/corestack/filebrowser/.env''
 +
 <code> <code>
 TZ=Europe/Berlin TZ=Europe/Berlin
Zeile 273: Zeile 258:
 </code> </code>
  
-==== 3) docker-compose.yml ====+==== 3) docker-compose.yml (robust + eindeutig) ====
 Datei: ''/srv/docker/corestack/filebrowser/docker-compose.yml'' Datei: ''/srv/docker/corestack/filebrowser/docker-compose.yml''
 +
 <file yaml> <file yaml>
 services: services:
Zeile 280: Zeile 266:
     image: filebrowser/filebrowser:latest     image: filebrowser/filebrowser:latest
     container_name: dc-filebrowser     container_name: dc-filebrowser
-    environment: +    user"${PUID}:${PGID}
-      - TZ=${TZ} +    ports: 
-      - PUID=${PUID+      - "${FILEBROWSER_PORT}:80"
-      - PGID=${PGID}+
     volumes:     volumes:
-      - /srv/docker/corestack/shared:/srv  # Gemeinsamer Ordner+      - /srv/docker/corestack/shared:/srv
       - ./config:/config       - ./config:/config
-    ports+      - ./database:/database 
-      - "${FILEBROWSER_PORT}:80"+    command: > 
 +      --database /database/filebrowser.db 
 +      --root /srv 
 +      --port 80
     networks:     networks:
       - dc-net       - dc-net
     restart: unless-stopped     restart: unless-stopped
-    deploy: 
-      resources: 
-        limits: 
-          memory: 128M  # RAM-Limit 
  
 networks: networks:
Zeile 308: Zeile 292:
 docker compose ps docker compose ps
 </code> </code>
- 
  
 **Zugriff:** **Zugriff:**
Zeile 314: Zeile 297:
 http://<PI-IP>:8081 http://<PI-IP>:8081
 </code> </code>
 +
 +**Standard-Login (bei neuer DB):**
 +<code>
 +Username: admin
 +</code>
 +\\
 +Für das Passwort führen wir einmal
 +<code bash>
 +docker logs --tail 200 dc-filebrowser
 +</code>
 +\\
 +aus und kopieren uns das Passwort einmal herraus.
 +
 +**Tipp:** Direkt nach dem ersten Login Passwort ändern.
  
 ---- ----
Zeile 322: Zeile 319:
 ==== 1) .env ==== ==== 1) .env ====
 Datei: ''/srv/docker/corestack/gogs/.env'' Datei: ''/srv/docker/corestack/gogs/.env''
 +
 <code> <code>
 TZ=Europe/Berlin TZ=Europe/Berlin
Zeile 330: Zeile 328:
 ==== 2) docker-compose.yml ==== ==== 2) docker-compose.yml ====
 Datei: ''/srv/docker/corestack/gogs/docker-compose.yml'' Datei: ''/srv/docker/corestack/gogs/docker-compose.yml''
 +
 <file yaml> <file yaml>
 services: services:
Zeile 340: Zeile 339:
       - ./data:/data       - ./data:/data
     ports:     ports:
-      - "${GOGS_HTTP_PORT}:3000"  # Web-UI +      - "${GOGS_HTTP_PORT}:3000" 
-      - "${GOGS_SSH_PORT}:22"     # Git über SSH+      - "${GOGS_SSH_PORT}:22"
     networks:     networks:
       - dc-net       - dc-net
     restart: unless-stopped     restart: unless-stopped
-    deploy: +    
-      resources: +
-        limits: +
-          memory: 256M  # RAM-Limit +
 networks: networks:
   dc-net:   dc-net:
Zeile 363: Zeile 358:
  
 ==== 4) Gogs konfigurieren ==== ==== 4) Gogs konfigurieren ====
-  1. Öffne ''http://<PI-IP>:3000'' im Browser +  1. Öffne ''http://<PI-IP>:3000''   
-  2. **Datenbank:** Wähle **SQLite3** (kein PostgreSQL nötig!+  2. **Datenbank:** Wähle **SQLite3** (kein PostgreSQL nötig)   
-  3. **Domain:** ''<PI-IP>'' (oder Hostname, falls DNS eingerichtet+  3. **Domain:** ''<PI-IP>'' (oder Hostname, falls DNS)   
-  4. **SSH-Port:** ''2222'' (falls Git über SSH genutzt wird+  4. **SSH-Port:** ''2222'' (falls Git über SSH)   
-  5. **Admin-Benutzer erstellen** und speichern+  5. Admin-Benutzer erstellen und speichern
  
-**Zugriff:** 
-<code> 
-http://<PI-IP>:3000 
-</code> 
 **Git SSH:** **Git SSH:**
 <code> <code>
Zeile 382: Zeile 373:
 ==== 6) Start-Reihenfolge (empfohlen) ==== ==== 6) Start-Reihenfolge (empfohlen) ====
 <code bash> <code bash>
-# 1) DokuWiki (leichtgewichtig)+# 1) DokuWiki
 cd /srv/docker/corestack/wikicore && docker compose up -d cd /srv/docker/corestack/wikicore && docker compose up -d
  
-# 2) File Browser+# 2) File Browser (inkl. DB-Fix vorher!)
 cd /srv/docker/corestack/filebrowser && docker compose up -d cd /srv/docker/corestack/filebrowser && docker compose up -d
  
-# 3) Gogs (Git)+# 3) Gogs
 cd /srv/docker/corestack/gogs && docker compose up -d cd /srv/docker/corestack/gogs && docker compose up -d
 </code> </code>
Zeile 401: Zeile 392:
 docker image prune -f docker image prune -f
 </code> </code>
-**Erklärung:** 
-  * ''pull'' lädt neue Images 
-  * ''up -d'' aktualisiert den Container 
-  * ''image prune -f'' löscht alte Images 
  
 ---- ----
Zeile 411: Zeile 398:
 **Wichtige Pfade sichern:** **Wichtige Pfade sichern:**
   * ''/srv/docker/corestack/wikicore/config/'' (DokuWiki)   * ''/srv/docker/corestack/wikicore/config/'' (DokuWiki)
-  * ''/srv/docker/corestack/gogs/data/'' (Git-Repos + Config) +  * ''/srv/docker/corestack/gogs/data/'' (Gogs Repos + Config) 
-  * ''/srv/docker/corestack/filebrowser/config/'' (File Browser Einstellungen)+  * ''/srv/docker/corestack/filebrowser/config/'' (File Browser Settings) 
 +  * ''/srv/docker/corestack/filebrowser/database/'' (File Browser DB!)
   * ''/srv/docker/corestack/shared/'' (Gemeinsame Daten)   * ''/srv/docker/corestack/shared/'' (Gemeinsame Daten)
  
Zeile 418: Zeile 406:
 <code bash> <code bash>
 cd /srv/docker/corestack cd /srv/docker/corestack
-tar -czvf backup_$(date +%Y-%m-%d).tar.gz wikicore/config gogs/data filebrowser/config shared/+tar -czvf backup_$(date +%Y-%m-%d).tar.gz wikicore/config gogs/data filebrowser/config filebrowser/database shared/
 </code> </code>
  
Zeile 426: Zeile 414:
 Ersetze ''<PI-IP>'' durch die IP deines Raspberry Pi: Ersetze ''<PI-IP>'' durch die IP deines Raspberry Pi:
  
-^ Dienst        ^ URL                   ^ Port  +^ Dienst        ^ URL                                 ^ Port ^ 
-| Gogs          | <code>http://<PI-IP>:3000</code>   | 3000  +| Gogs          | <code>http://<PI-IP>:3000</code>     | 3000 | 
-| DokuWiki      | <code>http://<PI-IP>:8080</code>   | 8080  +| DokuWiki      | <code>http://<PI-IP>:8080</code>     | 8080 | 
-| File Browser  | <code>http://<PI-IP>:8081</code>   | 8081  +| File Browser  | <code>http://<PI-IP>:8081</code>     | 8081 | 
-| Cockpit       | <code>https://<PI-IP>:9090</code>  | 9090  |+| Cockpit       | <code>https://<PI-IP>:9090</code>    | 9090 |
  
 ---- ----
  
-==== 10) RAM-Überwachung ====+==== 10) RAM-Überwachung (praxisnah) ====
 <code bash> <code bash>
-sudo apt install htop+sudo apt install -y htop
 htop htop
 </code> </code>
-**Ziel:** **< 1.8GB RAM-Verbrauch** (sonst Swapping → Performance-Einbruch). 
-**Optimierungstipps:** 
-  * **Gogs:** In ''app.ini'' ''MAX_LOAD = 5'' setzen (begrenzt gleichzeitige Anfragen) 
-  * **DokuWiki:** PHP-Cache aktivieren (in ''php.ini'') 
  
-----+**Docker live prüfen:** 
 +<code bash> 
 +docker stats 
 +</code>
  
-==== 11) OptionalRAM-Upgrade ==== +**Ziel:** Unter Last möglichst **unter ~1.8GB RAM** bleiben (sonst Swapping → Performance-Einbruch).
-Falls du später **mehr Dienste** (zB. n8n, code-server) nutzen willst: +
-  * **Raspberry Pi 4 mit 4GB oder 8GB RAM** nachrüsten (~50–100€) +
-  * **Dann** die **ursprüngliche CoreStack-Doku** verwenden+
  
 ---- ----
  
-**Fertig!** 🎉 Dein **Raspberry Pi 4 (2GB RAM)** läuft jetzt stabil mit: +==== 11Fehlerdiagnose (wenn etwas nicht startet==== 
-  * ✅ **DokuWiki** (Dokumentation+<code bash> 
-  * ✅ **File Browser** (Dateimanagement) +# Status 
-  * ✅ **Gogs** (Git-Repository) +docker ps -a
-  * ✅ **Cockpit** (Systemverwaltung)+
  
-**Viel Erfolg mit deinem neuen Home-Server!** 🚀+# Logs (Beispiel) 
 +docker logs --tail 120 dc-filebrowser 
 +docker logs --tail 120 dc-wikicore 
 +docker logs --tail 120 dc-gogs 
 + 
 +# Ports belegt? 
 +sudo ss -tulpn | grep -E ':8080|:8081|:3000|:2222|:9090' 
 + 
 +# Rechte prüfen (File Browser) 
 +ls -la /srv/docker/corestack/filebrowser 
 +ls -la /srv/docker/corestack/filebrowser/database 
 +</code> 
 + 
 +**File Browser DB-Fix (wenn es hakt):** 
 +  * Existiert ''database/filebrowser.db''? 
 +  * Ist ''database/'' beschreibbar für UID/GID (1000:1000)? 
 +  * Läuft der Container mit ''user: "1000:1000"''?
  
 ---- ----
 +
 +**Fertig!** 🎉 Dein **Raspberry Pi 4 (2GB RAM)** läuft jetzt stabil mit:  
 +  * ✅ **DokuWiki** (Dokumentation)  
 +  * ✅ **File Browser** (Dateimanagement)  
 +  * ✅ **Gogs** (Git-Repository)  
 +  * ✅ **Cockpit** (Systemverwaltung)
  • kurse/youtube/digitalcraft_corestack/digitalcraft_corestack.1773579262.txt.gz
  • Zuletzt geändert: 2026/03/15 13:54
  • von strangelove