Installation
Si vous prévoyez de travailler sur une fonctionnalité, veuillez nous en informer sur Discord afin que nous puissions :
- Vous indiquer si c'est une fonctionnalité que nous accepterions pour Immich
- Vous fournir des conseils sur la manière idéale de l'implémenter
- Vérifier que personne ne travaille déjà sur ce problème/fonctionnalité pour éviter un double effort
Merci pour votre intérêt à contribuer 😊
Environnement
Services
Cet environnement inclut les services suivants. Des détails supplémentaires sont disponibles dans le fichier README de chaque service.
- Serveur -
/server
- Application web -
/web
- Machine learning -
/machine-learning
- Redis
- Base de données de développement PostgreSQL avec un port exposé
5432
, pour que vous puissiez utiliser n'importe quel client pour y accéder
Tous les services sont empaquetés pour fonctionner avec une seule commande Docker Compose.
Serveur et applications web
- Clonez le dépôt du projet.
- Exécutez
cp docker/example.env docker/.env
. - Modifiez
docker/.env
pour fournir des valeurs pour la variable requiseUPLOAD_LOCATION
. - Depuis le répertoire racine, exécutez :
make dev # Requiert le Makefile installé sur le système.
- Accédez à l'instance de développement dans votre navigateur à l'adresse http://localhost:3000, ou connectez-vous via l'application mobile.
Tous les services démarrent avec le rechargement à chaud activé pour un retour rapide.
Vous pouvez accéder au web depuis http://your-machine-ip:3000
ou http://localhost:3000
, et accéder au serveur depuis l'application mobile à http://your-machine-ip:3000/api
Notes :
- Le conteneur de développement "web" s'exécute avec l'uid 1000. Si cet uid n'a pas les permissions de lecture/écriture sur les volumes montés, vous pourriez rencontrer des erreurs
- En cas de configuration Docker sans privilèges root, vous devez utiliser root à l'intérieur du conteneur, sinon vous rencontrerez des erreurs de permissions de lecture/écriture. Voir les commentaires dans
docker/docker-compose.dev.yml
.
Connecter l'application web à un backend distant
Si vous souhaitez uniquement développer l'application web connectée à un backend distant existant, procédez comme suit :
- Construisez le SDK Immich -
cd open-api/typescript-sdk && npm i && npm run build && cd -
- Accédez au répertoire web -
cd web/
- Installez les dépendances web -
npm i
- Démarrez le serveur de développement web
IMMICH_SERVER_URL=https://demo.immich.app/ npm run dev
Si vous utilisez PowerShell sur Windows, vous devrez peut-être définir la variable d'environnement séparément comme suit :
$env:IMMICH_SERVER_URL = "https://demo.immich.app/"
npm run dev
@immich/ui
Pour voir les modifications locales apportées à @immich/ui
dans Immich, procédez comme suit :
- Installez
@immich/ui
en tant qu'élément voisin deimmich/
, par exemple/home/user/immich
et/home/user/ui
- Construisez le projet
@immich/ui
vianpm run build
- Décommentez le volume correspondant dans le service web du fichier
docker/docker-compose.dev.yaml
(../../ui:/usr/ui
) - Décommentez l'alias correspondant dans le fichier
web/vite.config.js
('@immich/ui': path.resolve(__dirname, '../../ui')
) - Décommentez l'instruction d'importation dans le fichier
web/src/app.css
@import '/usr/ui/dist/theme/default.css';
et commentez@import '@immich/ui/theme/default.css';
- Lancez la pile via
make dev
- Après avoir apporté des modifications à
@immich/ui
, reconstruisez-le (npm run build
)
Application mobile
Configuration
- Configurez la chaîne d'outils Flutter avec FVM.
- Exécutez
flutter pub get
pour installer les dépendances. - Exécutez
make translation
pour générer le fichier de traduction. - Exécutez
fvm flutter run
pour démarrer l'application.
Traduction
Pour ajouter un nouveau texte de traduction, ajoutez la paire clé-valeur dans le fichier i18n/en.json
à la racine du projet Immich. Ensuite, depuis le répertoire mobile/
, exécutez
make translation
L'application mobile vous demande à quel backend vous connecter. Vous pouvez utiliser le backend de démonstration (https://demo.immich.app/) si vous n'avez pas besoin de modifier le code serveur ou de télécharger des photos. Sinon, vous pouvez exécuter le serveur vous-même selon les instructions ci-dessus.
Configuration de l'IDE
Extensions de lint / formatage
Configurer ces extensions dans l'IDE améliore l'expérience de développement, avec un code auto-formaté à chaque sauvegarde et une rétroaction instantanée sur les problèmes de lint.
Dart Code Metrics
L'application mobile utilise DCM (Dart Code Metrics) pour le lint et le calcul des métriques. Veuillez vous référer à la page Getting Started pour plus d'informations sur la configuration de DCM.
Remarque : Activer la licence n'est pas obligatoire.
VSCode
Installez les extensions Flutter
, DCM
, Prettier
, ESLint
et Svelte
. Ces extensions sont listées dans le fichier extensions.json
sous .vscode/
et devraient apparaître comme des recommandations de l'espace de travail.
Voici les paramètres que nous utilisons, ils devraient être actifs comme paramètres de l'espace de travail (settings.json
) :
{
"[css]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.tabSize": 2
},
"[dart]": {
"editor.defaultFormatter": "Dart-Code.dart-code",
"editor.formatOnSave": true,
"editor.selectionHighlight": false,
"editor.suggest.snippetsPreventQuickSuggestions": false,
"editor.suggestSelection": "first",
"editor.tabCompletion": "onlySnippets",
"editor.wordBasedSuggestions": "off"
},
"[javascript]": {
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit",
"source.removeUnusedImports": "explicit"
},
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.tabSize": 2
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.tabSize": 2
},
"[jsonc]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.tabSize": 2
},
"[svelte]": {
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit",
"source.removeUnusedImports": "explicit"
},
"editor.defaultFormatter": "svelte.svelte-vscode",
"editor.formatOnSave": true,
"editor.tabSize": 2
},
"[typescript]": {
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit",
"source.removeUnusedImports": "explicit"
},
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.tabSize": 2
},
"cSpell.words": ["immich"],
"editor.formatOnSave": true,
"eslint.validate": ["javascript", "svelte"],
"explorer.fileNesting.enabled": true,
"explorer.fileNesting.patterns": {
"*.dart": "${capture}.g.dart,${capture}.gr.dart,${capture}.drift.dart",
"*.ts": "${capture}.spec.ts,${capture}.mock.ts"
},
"svelte.enable-ts-plugin": true,
"typescript.preferences.importModuleSpecifier": "non-relative"
}