Configuración
Si estás planeando trabajar en una función, solo avísanos en Discord para que podamos:
- Informarte si es algo que aceptaríamos en Immich
- Proporcionar orientación sobre cómo se implementaría idealmente algo así
- Asegurarnos de que nadie más esté trabajando en ese problema/función para no duplicar esfuerzos
Gracias por tu interés en contribuir 😊
Entorno
Servicios
Este entorno incluye los servicios mencionados a continuación. Los detalles adicionales están disponibles en el README de cada servicio.
- Servidor -
/server - Aplicación web -
/web - Aprendizaje automático -
/machine-learning - Redis
- Base de datos de desarrollo PostgreSQL con el puerto
5432expuesto para que puedas usar cualquier cliente de base de datos para acceder a ella
Todos los servicios están empaquetados para ejecutarse con un único comando de Docker Compose.
Servidor y aplicaciones web
- Clona el repositorio del proyecto.
- Ejecuta
cp docker/example.env docker/.env. - Edita
docker/.envpara proporcionar valores para la variable requeridaUPLOAD_LOCATION. - Desde el directorio raíz, ejecuta:
make dev # se requiere Makefile instalado en el sistema.
- Accede a la instancia de desarrollo en tu navegador en http://localhost:3000, o conéctate a través de la aplicación móvil.
Todos los servicios se iniciarán con recarga automática habilitada para una retroalimentación rápida.
Puedes acceder a la aplicación web desde http://tu-IP-de-la-máquina:3000 o http://localhost:3000 y acceder al servidor desde la aplicación móvil en http://tu-IP-de-la-máquina:3000/api
Notas:
- El contenedor de desarrollo "web" se ejecuta con uid 1000. Si ese uid no tiene permisos de lectura/escritura en los volúmenes montados, podrías encontrar errores
- En caso de configuración de Docker sin root, necesitas usar root dentro del contenedor; de lo contrario, encontrarás errores relacionados con permisos de lectura/escritura. Consulta los comentarios en
docker/docker-compose.dev.yml.
Conectar la aplicación web a un backend remoto
Si solo deseas desarrollar la aplicación web conectada a un backend remoto existente, sigue estos pasos:
- Construye el SDK de Immich -
cd open-api/typescript-sdk && npm i && npm run build && cd - - Ingresa al directorio web -
cd web/ - Instala las dependencias de la aplicación web -
npm i - Inicia el servidor de desarrollo web
IMMICH_SERVER_URL=https://demo.immich.app/ npm run dev
Si estás usando PowerShell en Windows, es posible que necesites configurar la variable de entorno por separado de esta manera:
$env:IMMICH_SERVER_URL = "https://demo.immich.app/"
npm run dev
@immich/ui
Para ver los cambios locales en @immich/ui dentro de Immich, haz lo siguiente:
- Instala
@immich/uicomo un hermano deimmich/, por ejemplo/home/user/immichy/home/user/ui - Construye el proyecto
@immich/uimediantenpm run build - Descomenta el volumen correspondiente en el servicio web del archivo
docker/docker-compose.dev.yaml(../../ui:/usr/ui) - Descomenta el alias correspondiente en el archivo
web/vite.config.js('@immich/ui': path.resolve(__dirname, '../../ui')) - Descomenta la declaración de importación en el archivo
web/src/app.css@import '/usr/ui/dist/theme/default.css';y comenta@import '@immich/ui/theme/default.css'; - Inicia el stack con
make dev - Después de realizar cambios en
@immich/ui, vuelve a construirlo (npm run build)
Aplicación móvil
Configuración
- Configura la herramienta Flutter usando FVM.
- Ejecuta
flutter pub getpara instalar las dependencias. - Ejecuta
make translationpara generar el archivo de traducción. - Ejecuta
fvm flutter runpara iniciar la aplicación.
Traducción
Para agregar un nuevo texto de traducción, ingresa la clave-valor en el archivo i18n/en.json en la raíz del proyecto Immich. Luego, desde el directorio mobile/, ejecuta
make translation
La aplicación móvil te preguntará qué backend deseas conectar. Puedes utilizar el backend de demostración (https://demo.immich.app/) si no necesitas cambiar el código del servidor ni cargar fotos. Alternativamente, puedes ejecutar el servidor tú mismo siguiendo las instrucciones anteriores.
Configuración del IDE
Extensiones de lint/formato
Configurar estas extensiones en el IDE mejora la experiencia del desarrollador, formateando automáticamente el código al guardar y proporcionando comentarios instantáneos sobre problemas de lint.
Métricas de código Dart
La aplicación móvil utiliza DCM (Métricas de Código Dart) para análisis de código y cálculo de métricas. Consulta la página Inicio rápido para más información sobre cómo configurar DCM.
Nota: No es necesario activar la licencia.
VSCode
Instala las extensiones Flutter, DCM, Prettier, ESLint y Svelte. Estas extensiones están listadas en el archivo extensions.json ubicado en .vscode/ y deberían aparecer como recomendaciones del espacio de trabajo.
Aquí están las configuraciones que usamos, deberían estar activas como configuraciones del espacio de trabajo (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"
}