Passer au contenu principal

Installation

note

Si vous prévoyez de travailler sur une fonctionnalité, veuillez nous en informer sur Discord afin que nous puissions :

  1. Vous indiquer si c'est une fonctionnalité que nous accepterions pour Immich
  2. Vous fournir des conseils sur la manière idéale de l'implémenter
  3. 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

  1. Clonez le dépôt du projet.
  2. Exécutez cp docker/example.env docker/.env.
  3. Modifiez docker/.env pour fournir des valeurs pour la variable requise UPLOAD_LOCATION.
  4. Depuis le répertoire racine, exécutez :
Démarrer le serveur de développement
make dev # Requiert le Makefile installé sur le système.
  1. 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 :

  1. Construisez le SDK Immich - cd open-api/typescript-sdk && npm i && npm run build && cd -
  2. Accédez au répertoire web - cd web/
  3. Installez les dépendances web - npm i
  4. 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 :

  1. Installez @immich/ui en tant qu'élément voisin de immich/, par exemple /home/user/immich et /home/user/ui
  2. Construisez le projet @immich/ui via npm run build
  3. Décommentez le volume correspondant dans le service web du fichier docker/docker-compose.dev.yaml (../../ui:/usr/ui)
  4. Décommentez l'alias correspondant dans le fichier web/vite.config.js ('@immich/ui': path.resolve(__dirname, '../../ui'))
  5. 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';
  6. Lancez la pile via make dev
  7. Après avoir apporté des modifications à @immich/ui, reconstruisez-le (npm run build)

Application mobile

Configuration

  1. Configurez la chaîne d'outils Flutter avec FVM.
  2. Exécutez flutter pub get pour installer les dépendances.
  3. Exécutez make translation pour générer le fichier de traduction.
  4. 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) :

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"
}