Développement avec les conteneurs Dev
Les conteneurs Dev offrent un environnement de développement cohérent et reproductible en utilisant des conteneurs Docker. D'un simple clic, vous pouvez démarrer un environnement de développement Immich sur Mac, Linux, Windows ou dans le cloud en utilisant les Codespaces GitHub.
Commencez rapidement !
En savoir plus sur les conteneurs Dev
Prérequis
Avant de commencer, assurez-vous d'avoir :
- Docker Desktop (dernière version)
- Visual Studio Code avec l'extension Dev Containers
- Git pour cloner le dépôt
- Au moins 8 Go de RAM (16 Go recommandés)
- 20 Go d'espace disque libre
Bien que ce guide se concentre sur VS Code, vous avez plusieurs options pour le développement en conteneurs Dev :
Éditeurs locaux :
- IntelliJ IDEA - Support complet pour IDE JetBrains
- neovim - Éditeur léger basé sur le terminal
- Emacs - Éditeur de texte extensible
- DevContainer CLI - Interface en ligne de commande
Solutions basées sur le cloud :
- GitHub Codespaces - Intégration complète avec GitHub, prend en charge devcontainer.json de manière excellente
- GitPod - Plateforme SaaS avec support récent des conteneurs Dev (utilisation historique de gitpod.yml)
Options auto-hébergées :
Services de conteneur Dev
L'environnement de conteneur Dev se compose des services suivants :
Service | Nom du conteneur | Description | Ports |
---|---|---|---|
Serveur & Web | immich-server | Exécute à la fois le serveur API et l'interface Web en mode développement | 2283 (API) 3000 (Web) 9230 (Debug des travailleurs) 9231 (Debug API) |
Base de données | database | Base de données PostgreSQL | 5432 |
Cache | redis | Serveur de cache Valkey | 6379 |
Machine Learning | immich-machine-learning | Serveur d'inférence du modèle ML d'Immich | 3003 |
Commencer
Étape 1 : Cloner le dépôt
git clone https://github.com/immich-app/immich.git
cd immich
Étape 2 : Configurer les variables d'environnement
Les conteneurs dev Immich lisent les variables d'environnement à partir de votre environnement shell, et non à partir de fichiers .env
. Cela leur permet de fonctionner dans des environnements cloud sans préconfiguration.
En exécutant localement, si vous souhaitez créer (ou utiliser un existant) dossier de stockage DB et/ou photo, vous devez définir la variable UPLOAD_LOCATION
dans votre environnement shell avant de lancer le conteneur Dev. Cela détermine où les fichiers téléchargés sont stockés et également où la base de données stocke ses données.
# Définir temporairement pour la session en cours
export UPLOAD_LOCATION=/opt/dev_upload_folder
# Ou ajouter à votre profil shell pour la persistance
# (~/.bashrc, ~/.zshrc, ~/.bash_profile, etc.)
echo 'export UPLOAD_LOCATION=/opt/dev_upload_folder' >> ~/.bashrc
source ~/.bashrc
Étape 3 : Lancer le conteneur Dev
Le développement Immich utilise largement des images de base spécialisées pour son développement basé sur docker-compose. Pour cette raison, vous ne pourrez pas utiliser la commande Clone Repository in a Container Volume de VSCode.
Utilisation de l'interface utilisateur de VS Code :
- Ouvrez le dépôt cloné dans VS Code
- Appuyez sur
F1
ouCtrl/Cmd+Maj+P
pour ouvrir la palette de commandes - Tapez et sélectionnez "Dev Containers : Rebuild and Reopen in Container"
- Sélectionnez "Immich - Backend, Frontend and ML" dans la liste
- Attendez que le conteneur se construise et démarre (cela peut prendre plusieurs minutes au premier lancement)
Utilisation des actions rapides de VS Code :
- Ouvrez le dépôt dans VS Code
- Vous devriez voir une popup demandant si vous souhaitez rouvrir dans un conteneur
- Cliquez sur "Reopen in Container"
Utilisation de la ligne de commande :
# Utilisation du CLI DevContainer
devcontainer up --workspace-folder .
Détails des variables d'environnement
Comment les conteneurs Dev gèrent les variables d'environnement
Contrairement à la configuration de développeur Immich basée sur Docker Compose qui utilise des fichiers .env
, les conteneurs dev Immich lisent les variables d'environnement depuis votre environnement shell. Cela est configuré dans .devcontainer/devcontainer.json
:
"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}"
}
La syntaxe ${localEnv:VARIABLE:default}
lit à partir de votre environnement shell avec des valeurs par défaut facultatives.
Résolution du chemin d'emplacement des téléchargements
La variable d'environnement UPLOAD_LOCATION
contrôle où les fichiers sont stockés :
Par défaut : ./Library
(relatif au répertoire docker
)
Résolu comme : <immich-root>/docker/Library
Montages créés :
# De .devcontainer/server/container-compose-overrides.yml
- ${UPLOAD_LOCATION-./Library}/photos:/workspaces/immich/server/upload
- ${UPLOAD_LOCATION-./Library}/postgres:/var/lib/postgresql/data
Configuration de la base de données
Ces variables ont des valeurs par défaut raisonnables (pour le développement) mais peuvent être personnalisées :
Variable | Par défaut | Description |
---|---|---|
DB_PASSWORD | postgres | Mot de passe PostgreSQL |
DB_USERNAME | postgres | Nom d'utilisateur PostgreSQL |
DB_DATABASE_NAME | immich | Nom de la base de données |
Définir les variables d'environnement
Ajoutez-les à votre profil shell (~/.bashrc
, ~/.zshrc
, ~/.bash_profile
, etc.) :
# Obligatoire
export UPLOAD_LOCATION=./Library # ou chemin absolu
# Optionnel (seulement si vous utilisez des valeurs non par défaut)
export DB_PASSWORD=your_password
export DB_USERNAME=your_username
export DB_DATABASE_NAME=your_database
N'oubliez pas de recharger votre configuration shell :
source ~/.bashrc # ou ~/.zshrc, etc.
Configuration Git
Clés SSH et authentification
Pour utiliser vos clés SSH pour l'accès GitHub à l'intérieur du conteneur Dev :
-
Démarrer l'agent SSH sur votre machine hôte :
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa # ou chemin de votre clé -
VS Code transfère automatiquement votre agent SSH au conteneur
Pour des instructions détaillées, consultez le guide de VS Code sur le partage des identifiants Git.
Signature des commits
Pour utiliser votre clé SSH pour signer les commits, consultez le guide GitHub sur la signature des commits SSH.
Flux de travail de développement
Configuration automatique
Lorsque le conteneur Dev démarre, il effectue automatiquement :
-
Exécute un script post-création (
container-server-post-create.sh
) :- Ajuste les permissions de fichiers pour l'utilisateur
node
- Installe les dépendances :
npm install
dans tous les packages - Compile le SDK TypeScript :
npm run build
dansopen-api/typescript-sdk
- Ajuste les permissions de fichiers pour l'utilisateur
-
Démarre les serveurs de développement via les tâches VS Code :
Immich API Server (Nest)
- serveur API avec rechargement à chaud sur le port 2283Immich Web Server (Vite)
- interface Web avec rechargement à chaud sur le port 3000- Les deux serveurs surveillent les changements de fichiers et recompilent automatiquement
-
Configure le transfert de ports :
- Interface Web : http://localhost:3000 (s'ouvre automatiquement)
- API : http://localhost:2283
- Ports de débogage : 9230 (travailleurs), 9231 (API)
La configuration du conteneur Dev remplace la commande make dev
de la configuration traditionnelle. Tous les services démarrent automatiquement lorsque vous ouvrez le conteneur.
Accéder aux services
Une fois en cours d'exécution, vous pouvez accéder à :
Service | URL | Description |
---|---|---|
Interface Web | http://localhost:3000 | Interface Web principale |
API | http://localhost:2283 | Points de terminaison REST API (pas utilisés directement, l'interface Web exposera ceci sur http://localhost:3000/api |
Base de données | localhost:5432 | PostgreSQL (nom d'utilisateur : postgres ) (pas utilisé directement) |
Connecter des applications mobiles
Pour connecter l'application mobile à votre conteneur Dev :
- Trouvez l'adresse IP de votre machine
- Dans l'application mobile, utilisez :
http://VOTRE_IP:3000/api
- Assurez-vous que votre pare-feu autorise les connexions sur le port 2283
Apporter des modifications au code
- Code du serveur (
/server
) : Les changements déclenchent un redémarrage automatique - Code Web (
/web
) : Les changements déclenchent un remplacement de module à chaud - Migrations de base de données : Exécutez
npm run sync:sql
dans le répertoire du serveur - Modifications de l'API : Régénérez le SDK TypeScript avec
make open-api
Tests
Exécution des tests
Le container de développement prend en charge plusieurs façons d'exécuter les tests :
Utilisation des commandes Make (Recommandé)
# Exécutez les tests pour des composants spécifiques
make test-server # Tests unitaires du serveur
make test-web # Tests unitaires web
make test-e2e # Tests de bout en bout
make test-cli # Tests CLI
# Exécutez tous les tests
make test-all # Exécute les tests pour tous les composants
# Tests moyens (tests d'intégration)
make test-medium-dev # Tests de bout en bout
Utilisation directe de NPM
# Tests du serveur
cd /workspaces/immich/server
npm test # Exécute tous les tests
npm run test:watch # Mode surveillance
npm run test:cov # Rapport de couverture
# Tests du web
cd /workspaces/immich/web
npm test # Exécute tous les tests
npm run test:watch # Mode surveillance
# Tests E2E
cd /workspaces/immich/e2e
npm run test # Exécute les tests API
npm run test:web # Exécute les tests de l'interface utilisateur web
Commandes de qualité du code
# Linting
make lint-server # Analyse statique du code serveur
make lint-web # Analyse statique du code web
make lint-all # Analyse statique de tous les composants
# Formatage
make format-server # Formate le code serveur
make format-web # Formate le code web
make format-all # Formate tout le code
# Vérification des types
make check-server # Vérification des types pour le serveur
make check-web # Vérification des types pour le web
make check-all # Vérifie tous les composants
# Vérification complète
make hygiene-all # Exécute lint, format, vérification, synchronisation SQL et audit
Commandes Make supplémentaires
# Commandes de build
make build-server # Build du serveur
make build-web # Build de l'application web
make build-all # Build complet
# Génération de l'API
make open-api # Génère les spécifications OpenAPI
make open-api-typescript # Génère le SDK TypeScript
make open-api-dart # Génère le SDK Dart
# Base de données
make sql # Synchronise le schéma de la base de données
# Dépendances
make install-server # Installe les dépendances du serveur
make install-web # Installe les dépendances web
make install-all # Installe toutes les dépendances
Debugging
Le container de développement est préconfiguré pour le débogage :
-
Débogage du serveur API :
- Placez des points d'arrêt dans VS Code
- Appuyez sur
F5
ou utilisez le panneau "Run and Debug" - Sélectionnez la configuration "Attach to Server"
- Port de débogage : 9231
-
Débogage des Workers :
- Utilisez la configuration "Attach to Workers"
- Port de débogage : 9230
-
Débogage du Web :
- Utilisez les outils de développement du navigateur
- Le débogueur de VS Code pour les extensions Chrome/Edge est pris en charge
Dépannage
Problèmes courants
Erreurs de permission
Problème : Erreurs EACCES
ou permission refusée
Solution :
- Le container de développement s'exécute en tant qu'utilisateur
node
(UID 1000) - Si l'UID de votre hôte diffère, vous pouvez rencontrer des problèmes de permissions
- Essayez de reconstruire le container : "Dev Containers: Rebuild Container"
Le container ne démarre pas
Problème : Le container de développement ne parvient pas à démarrer ou à se construire
Solution :
- Vérifiez si Docker est en cours d'exécution :
docker ps
- Nettoyez les ressources Docker :
docker system prune -a
- Vérifiez l'espace disque disponible
- Consultez les limites des ressources Docker Desktop
Port déjà utilisé
Problème : "Port 3000/2283 is already in use"
Solution :
- Recherchez les services en conflit :
lsof -i :3000
(macOS/Linux) - Arrêtez les services en conflit ou modifiez le mappage des ports
- Redémarrez Docker Desktop
Emplacement de téléchargement non défini
Problème : Erreurs concernant l'absence de UPLOAD_LOCATION
Solution :
- Définissez la variable d'environnement :
export UPLOAD_LOCATION=./Library
- Ajoutez-la à votre profil shell pour persistance
- Redémarrez votre terminal et VS Code
Échec de connexion à la base de données
Problème : Impossible de se connecter à PostgreSQL
Solution :
- Assurez-vous que tous les conteneurs sont en cours d'exécution :
docker ps
- Vérifiez les logs : "Dev Containers: Show Container Log"
- Vérifiez que les identifiants de la base de données correspondent aux variables d'environnement
Obtenir de l'aide
Si vous rencontrez des problèmes :
- Consultez les logs du container : View → Output → Sélectionnez "Dev Containers"
- Reconstruisez sans cache : "Dev Containers: Rebuild Container Without Cache"
- Consultez les problèmes Docker courants
- Posez vos questions sur Discord dans le canal
#help-desk-support
Développement mobile
Bien que le container de développement soit orienté vers le développement serveur et web, vous pouvez connecter des applications mobiles pour les tester :
Connexion des apps iOS/Android
-
Assurez-vous que l'API est accessible :
# Trouvez l'IP de votre machine
# macOS
ipconfig getifaddr en0
# Linux
hostname -I
# Windows (dans WSL2)
ip addr show eth0 -
Configurez l'app mobile :
- URL du serveur :
http://VOTRE_IP:2283/api
- Assurez-vous que le pare-feu autorise le port 2283
- URL du serveur :
-
Pour un développement mobile complet, consultez le guide de développement mobile, qui couvre :
- Configuration de Flutter
- Exécution sur émulateurs/appareils
- Débogage spécifique au mobile
Configuration avancée
Extensions VS Code personnalisées
Ajoutez des extensions à .devcontainer/devcontainer.json
:
"customizations": {
"vscode": {
"extensions": [
"votre.extension-id"
]
}
}
Services supplémentaires
Pour ajouter des services (par exemple, Redis Commander), modifiez :
/docker/docker-compose.dev.yml
- Ajoutez une définition de service/.devcontainer/server/container-compose-overrides.yml
- Ajoutez des substitutions si nécessaire
Limites des ressources
Ajustez les ressources Docker Desktop :
- macOS/Windows : Docker Desktop → Paramètres → Ressources
- Linux : Modifiez la configuration du démon Docker
Recommandations minimales :
- CPU : 4 cœurs
- Mémoire : 8 Go
- Disque : 20 Go
Étapes suivantes
- Lisez l'aperçu de l'architecture
- Renseignez-vous sur les migrations de base de données
- Explorez la documentation de l'API
- Rejoignez le canal
#immich
sur Discord