Entwicklung mit Dev Containers
Dev Containers bieten eine konsistente, reproduzierbare Entwicklungsumgebung mithilfe von Docker-Containern. Mit einem einzigen Klick können Sie eine Immich-Entwicklungsumgebung auf Mac, Linux, Windows oder in der Cloud mit GitHub Codespaces starten.
Schnell anfangen!
Erfahren Sie mehr über Dev Containers
Voraussetzungen
Bevor Sie starten, stellen Sie sicher, dass Sie Folgendes haben:
- Docker Desktop (neueste Version)
- Visual Studio Code mit der Dev Containers Erweiterung
- Git zum Klonen des Repositorys
- Mindestens 8GB RAM (16GB empfohlen)
- 20GB freier Speicherplatz
Während dieser Leitfaden sich auf VS Code konzentriert, gibt es viele Optionen für Dev Container-Entwicklung:
Lokale Editoren:
- IntelliJ IDEA - Vollständige JetBrains IDE-Unterstützung
- neovim - Leichter terminalbasierter Editor
- Emacs - Erweiterbarer Texteditor
- DevContainer CLI - Kommandozeilenschnittstelle
Cloud-basierte Lösungen:
- GitHub Codespaces - Vollständig integriert mit GitHub, hervorragende Unterstützung für devcontainer.json
- GitPod - SaaS-Plattform mit aktueller Dev Container-Unterstützung (historisch wurde gitpod.yml verwendet)
Selbsthostbare Optionen:
Dev Container Dienste
Die Dev Container Umgebung besteht aus den folgenden Diensten:
Dienst | Container-Name | Beschreibung | Ports |
---|---|---|---|
Server & Web | immich-server | Führt sowohl den API-Server als auch das Web-Frontend im Entwicklungsmodus aus | 2283 (API) 3000 (Web) 9230 (Workers Debug) 9231 (API Debug) |
Datenbank | database | PostgreSQL-Datenbank | 5432 |
Cache | redis | Valkey-Cache-Server | 6379 |
Maschinelles Lernen | immich-machine-learning | Immich ML-Modell-Inferenz-Server | 3003 |
Erste Schritte
Schritt 1: Klonen des Repositorys
git clone https://github.com/immich-app/immich.git
cd immich
Schritt 2: Umgebungsvariablen konfigurieren
Die immich Dev Containers lesen Umgebungsvariablen aus Ihrer Shell-Umgebung und nicht aus .env
-Dateien. Dadurch können sie in Cloud-Umgebungen ohne vorherige Konfiguration funktionieren.
Wenn Sie lokal arbeiten und eine (oder eine vorhandene) DB- und/oder Foto-Speicherordner erstellen möchten, müssen Sie die Variable UPLOAD_LOCATION
in Ihrer Shell-Umgebung setzen, bevor Sie den Dev Container starten. Diese bestimmt, wo hochgeladene Dateien gespeichert werden und auch wo die DB ihre Daten speichert.
# Temporär für die aktuelle Sitzung setzen
export UPLOAD_LOCATION=/opt/dev_upload_folder
# Oder dauerhaft zu Ihrem Shell-Profil hinzufügen
# (~/.bashrc, ~/.zshrc, ~/.bash_profile, etc.)
echo 'export UPLOAD_LOCATION=/opt/dev_upload_folder' >> ~/.bashrc
source ~/.bashrc
Schritt 3: Dev Container starten
Immich Entwicklung nutzt intensiv spezialisierte Basisbilder für die docker-compose-basierte Entwicklung. Aus diesem Grund können Sie den Befehl Repository in Container Volume klonen von VSCode nicht verwenden.
Verwendung der VS Code-Benutzeroberfläche:
- Öffnen Sie das geklonte Repository in VS Code
- Drücken Sie
F1
oderStrg/Cmd+Shift+P
, um die Befehlspalette zu öffnen - Geben Sie "Dev Containers: Rebuild and Reopen in Container" ein und wählen Sie es aus
- Wählen Sie "Immich - Backend, Frontend and ML" aus der Liste
- Warten Sie, bis der Container gebaut und gestartet wird (dies kann beim ersten Start einige Minuten dauern)
Verwendung von VS Code Quick Actions:
- Öffnen Sie das Repository in VS Code
- Sie sollten ein Popup sehen, das fragt, ob Sie in einem Container wieder öffnen möchten
- Klicken Sie auf "Reopen in Container"
Verwendung der Kommandozeile:
# Verwendung der DevContainer CLI
devcontainer up --workspace-folder .
Details zu Umgebungsvariablen
Wie Dev Containers Umgebungsvariablen handhaben
Anders als das Immich-Entwickler-Setup, das auf Docker Compose basiert und .env
-Dateien verwendet, lesen Immich Dev Containers die Umgebungsvariablen aus Ihrer Shell-Umgebung. Dies ist in .devcontainer/devcontainer.json
konfiguriert:
"remoteEnv": {
"UPLOAD_LOCATION": "${localEnv:UPLOAD_LOCATION:./Library}",
"DB_PASSWORD": "${localEnv:DB_PASSWORD:postgres}",
"DB_USERNAME": "${localEnv:DB_USERNAME:postgres}",
"DB_DATABASE_NAME": "${localEnv:DB_DATABASE_NAME:immich}"
}
Die Syntax ${localEnv:VARIABLE:default}
liest aus Ihrer Shell-Umgebung mit optionalen Standardwerten.
Upload-Speicherort Pfadauflösung
Die Umgebungsvariable UPLOAD_LOCATION
steuert, wo Dateien gespeichert werden:
Standard: ./Library
(relativ zum docker
-Verzeichnis)
Aufgelöst zu: <immich-root>/docker/Library
Erstellte Bind-Mounts:
# Aus .devcontainer/server/container-compose-overrides.yml
- ${UPLOAD_LOCATION-./Library}/photos:/workspaces/immich/server/upload
- ${UPLOAD_LOCATION-./Library}/postgres:/var/lib/postgresql/data
Datenbankkonfiguration
Diese Variablen haben sinnvolle Standardwerte (für Entwicklung), können aber angepasst werden:
Variable | Standard | Beschreibung |
---|---|---|
DB_PASSWORD | postgres | PostgreSQL-Passwort |
DB_USERNAME | postgres | PostgreSQL-Benutzername |
DB_DATABASE_NAME | immich | Datenbankname |
Umgebungsvariablen setzen
Fügen Sie diese Ihrem Shell-Profil hinzu (~/.bashrc
, ~/.zshrc
, ~/.bash_profile
, etc.):
# Erforderlich
export UPLOAD_LOCATION=./Library # oder absoluter Pfad
# Optional (nur bei Verwendung von nicht-Standardwerten)
export DB_PASSWORD=your_password
export DB_USERNAME=your_username
export DB_DATABASE_NAME=your_database
Vergessen Sie nicht, Ihre Shell-Konfiguration neu zu laden:
source ~/.bashrc # oder ~/.zshrc, etc.
Git-Konfiguration
SSH-Schlüssel und Authentifizierung
Um Ihre SSH-Schlüssel für den GitHub-Zugriff innerhalb des Dev Containers zu verwenden:
-
Starten Sie den SSH-Agent auf Ihrem Host-Computer:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa # oder Ihr Schlüsselpfad -
VS Code leitet Ihren SSH-Agent automatisch an den Container weiter
Für detaillierte Anweisungen, siehe den VS Code-Leitfaden zum Teilen von Git-Credentials.
Commit-Signierung
Um Ihren SSH-Schlüssel für die Commit-Signierung zu verwenden, siehe den GitHub-Leitfaden zur SSH-Commit-Signierung.
Entwicklungsworkflow
Automatische Einrichtung
Beim Start des Dev Containers wird automatisch:
-
Post-Create-Skript ausgeführt (
container-server-post-create.sh
):- Anpassung der Dateiberechtigungen für den
node
-Benutzer - Installation von Abhängigkeiten:
npm install
in allen Paketen - TypeScript-SDK builden:
npm run build
inopen-api/typescript-sdk
- Anpassung der Dateiberechtigungen für den
-
Entwicklungsserver starten über VS Code Aufgaben:
Immich API-Server (Nest)
- API-Server mit Hot-Reloading auf Port 2283Immich Web-Server (Vite)
- Web-Frontend mit Hot-Reloading auf Port 3000- Beide Server überwachen Dateiveränderungen und kompilieren automatisch neu
-
Portweiterleitung einrichten:
- Web-UI: http://localhost:3000 (öffnet automatisch)
- API: http://localhost:2283
- Debug-Ports: 9230 (Worker), 9231 (API)
Die Dev Container Einrichtung ersetzt den Befehl make dev
aus der traditionellen Einrichtung. Alle Dienste starten automatisch, wenn Sie den Container öffnen.
Dienste zugreifen
Sobald alles läuft, können Sie auf Folgendes zugreifen:
Dienst | URL | Beschreibung |
---|---|---|
Web-UI | http://localhost:3000 | Haupt-Web-Oberfläche |
API | http://localhost:2283 | REST-API-Endpunkte (Nicht direkt verwendet, Web-UI stellt dies unter http://localhost:3000/api bereit) |
Datenbank | localhost:5432 | PostgreSQL (Benutzername: postgres ) (Nicht direkt verwendet) |
Mobile Apps verbinden
Um die mobile App mit Ihrem Dev Container zu verbinden:
- Finden Sie die IP-Adresse Ihres Computers
- Verwenden Sie in der mobilen App:
http://IHRE_IP:3000/api
- Stellen Sie sicher, dass Ihre Firewall Verbindungen auf Port 2283 zulässt
Änderungen am Code vornehmen
- Server-Code (
/server
): Änderungen lösen automatischen Neustart aus - Web-Code (
/web
): Änderungen lösen Hot-Modul-Austausch aus - Datenbankmigrationen: Führen Sie
npm run sync:sql
im Serververzeichnis aus - API-Änderungen: Regenerieren Sie das TypeScript-SDK mit
make open-api
Tests
Tests ausführen
Der Dev Container unterstützt verschiedene Methoden, um Tests auszuführen:
Verwendung von Make-Befehlen (empfohlen)
# Tests für spezifische Komponenten ausführen
make test-server # Server-Unit-Tests
make test-web # Web-Unit-Tests
make test-e2e # End-to-End-Tests
make test-cli # CLI-Tests
# Alle Tests ausführen
make test-all # Führt Tests für alle Komponenten aus
# Integrationstests
make test-medium-dev # End-to-End-Tests
Direkte Verwendung von NPM
# Server-Tests
cd /workspaces/immich/server
npm test # Alle Tests ausführen
npm run test:watch # Watch-Modus
npm run test:cov # Berichterstellung zur Abdeckung
# Web-Tests
cd /workspaces/immich/web
npm test # Alle Tests ausführen
npm run test:watch # Watch-Modus
# E2E-Tests
cd /workspaces/immich/e2e
npm run test # API-Tests ausführen
npm run test:web # Web-UI-Tests ausführen
Befehle zur Codequalität
# Linting
make lint-server # Server-Code Linting
make lint-web # Web-Code Linting
make lint-all # Linting aller Komponenten
# Formatierung
make format-server # Server-Code formatieren
make format-web # Web-Code formatieren
make format-all # Code aller Komponenten formatieren
# Typprüfung
make check-server # Typpprüfung für den Server
make check-web # Typpprüfung für das Web
make check-all # Typpprüfung aller Komponenten
# Vollständige Hygieneüberprüfung
make hygiene-all # Führt Linting, Formatierung, Typpprüfung, SQL-Synchronisierung und Audit durch
Zusätzliche Make-Befehle
# Build-Befehle
make build-server # Server bauen
make build-web # Webanwendung bauen
make build-all # Alles bauen
# API-Generierung
make open-api # OpenAPI-Spezifikationen generieren
make open-api-typescript # TypeScript-SDK generieren
make open-api-dart # Dart-SDK generieren
# Datenbank
make sql # Datenbankschema synchronisieren
# Abhängigkeiten
make install-server # Server-Abhängigkeiten installieren
make install-web # Web-Abhängigkeiten installieren
make install-all # Alle Abhängigkeiten installieren
Debugging
Der Dev Container ist vorkonfiguriert für Debugging:
-
API-Server-Debugging:
- Breakpoints in VS Code setzen
- Drücken Sie
F5
oder verwenden Sie das Panel "Run and Debug" - Wählen Sie die Konfiguration "Attach to Server"
- Debug-Port: 9231
-
Worker-Debugging:
- Verwenden Sie die Konfiguration "Attach to Workers"
- Debug-Port: 9230
-
Web-Debugging:
- Verwenden Sie die DevTools des Browsers
- VS Code-Debugger für Chrome/Edge-Erweiterungen werden unterstützt
Fehlerbehebung
Häufige Probleme
Berechtigungsfehler
Problem: EACCES
oder Berechtigungsverweigerung
Lösung:
- Der Dev Container läuft als
node
-Benutzer (UID 1000) - Wenn Ihre Host-UID abweicht, können Berechtigungsprobleme auftreten
- Versuchen Sie, den Container neu zu erstellen: "Dev Containers: Rebuild Container"
Container startet nicht
Problem: Dev Container kann nicht gestartet oder erstellt werden Lösung:
- Überprüfen, ob Docker läuft:
docker ps
- Docker-Ressourcen bereinigen:
docker system prune -a
- Freien Speicherplatz überprüfen
- Ressourcenlimits in Docker Desktop überprüfen
Port wird bereits verwendet
Problem: "Port 3000/2283 wird bereits verwendet" Lösung:
- Konfliktbehaftete Dienste prüfen:
lsof -i :3000
(macOS/Linux) - Konfliktbehaftete Dienste beenden oder Port-Mappings ändern
- Docker Desktop neu starten
Upload-Standort nicht festgelegt
Problem: Fehler über fehlenden UPLOAD_LOCATION Lösung:
- Umgebungsvariable setzen:
export UPLOAD_LOCATION=./Library
- Zu Ihrem Shell-Profil hinzufügen für Persistenz
- Terminal und VS Code neu starten
Datenbankverbindung fehlt
Problem: Verbindung zur PostgreSQL-Datenbank kann nicht hergestellt werden Lösung:
- Sicherstellen, dass alle Container laufen:
docker ps
- Protokolle überprüfen: "Dev Containers: Show Container Log"
- Überprüfen, ob Datenbankanmeldeinformationen den Umgebungsvariablen entsprechen
Unterstützung erhalten
Falls Sie Probleme haben:
- Container-Protokolle prüfen: Ansicht → Ausgabe → "Dev Containers" auswählen
- Neuaufbau ohne Cache: "Dev Containers: Rebuild Container Without Cache"
- Häufige Docker-Probleme überprüfen
- Im Discord
#help-desk-support
-Kanal fragen
Mobile Entwicklung
Während sich der Dev Container auf Server- und Webentwicklung konzentriert, können Sie mobile Anwendungen zum Testen verbinden:
Verbinden von iOS/Android-Apps
-
API-Verfügbarkeit sicherstellen:
# IP-Adresse Ihres Rechners herausfinden
# macOS
ipconfig getifaddr en0
# Linux
hostname -I
# Windows (in WSL2)
ip addr show eth0 -
Mobile App konfigurieren:
- Server-URL:
http://YOUR_IP:2283/api
- Sicherstellen, dass die Firewall Port 2283 zulässt
- Server-URL:
-
Für die vollständige mobile Entwicklung, siehe den Mobile Development Guide, der Folgendes abdeckt:
- Flutter-Einrichtung
- Ausführen auf Emulatoren/Geräten
- Spezielle Debugging-Tools für mobile Anwendungen
Erweiterte Konfiguration
Anpassung der VS Code-Erweiterungen
Hinzufügen von Erweiterungen zu .devcontainer/devcontainer.json
:
"customizations": {
"vscode": {
"extensions": [
"your.extension-id"
]
}
}
Zusätzliche Dienste
Um Dienste hinzuzufügen (z. B. Redis Commander), bearbeiten Sie:
/docker/docker-compose.dev.yml
- Dienstdefinition hinzufügen/.devcontainer/server/container-compose-overrides.yml
- Falls nötig, Überschreibungen hinzufügen
Ressourcenbeschränkungen
Docker-Desktop-Ressourcen anpassen:
- macOS/Windows: Docker Desktop → Einstellungen → Ressourcen
- Linux: Docker-Daemon-Konfiguration ändern
Empfohlene Mindestanforderungen:
- CPU: 4 Kerne
- Speicher: 8GB
- Festplatte: 20GB
Nächste Schritte
- Den Architekturüberblick lesen
- Erfahren Sie mehr über Datenbankmigrationen
- API-Dokumentation erkunden
- Treten Sie
#immich
auf Discord bei