Перейти к основному содержимому

Настройка

заметка

Если вы планируете работать над какой-либо функцией, дайте нам знать об этом в Discord, чтобы мы могли:

  1. Сообщить вам, будет ли эта функция принята в Immich
  2. Предоставить рекомендации по ее оптимальной реализации
  3. Убедиться, что никто уже не работает над этим вопросом/функцией, чтобы не дублировать усилия

Спасибо за интерес к участию в разработке 😊

Окружение​

Сервисы​

Это окружение включает в себя следующие сервисы. Подробная информация доступна в README каждого сервиса.

  • Сервер - /server
  • Веб-приложение - /web
  • Машинное обучение - /machine-learning
  • Redis
  • Разработческая база данных PostgreSQL с открытым портом 5432, чтобы вы могли использовать любой клиент базы данных для доступа к ней

Все сервисы упакованы для запуска одной командой Docker Compose.

Сервер и веб-приложения​

  1. Клонируйте репозиторий проекта.
  2. Запустите cp docker/example.env docker/.env.
  3. Измените docker/.env, чтобы указать значения для обязательной переменной UPLOAD_LOCATION.
  4. В корневом каталоге выполните:
Запуск сервера разработки
make dev # требуется установленный в системе Makefile.
  1. Откройте экземпляр разработки в браузере по адресу http://localhost:3000 или подключитесь через мобильное приложение.

Все сервисы будут запущены с включенной горячей перезагрузкой для быстрого цикла обратной связи.

Вы можете получить доступ к веб-версии через http://your-machine-ip:3000 или http://localhost:3000, а также получить доступ к серверу через мобильное приложение по адресу http://your-machine-ip:3000/api

Примечания:

  • Контейнер разработки "web" работает с uid 1000. Если у этого uid нет прав на чтение/запись к монтированным объемам, вы можете столкнуться с ошибками
  • В случае настройки rootless Docker необходимо использовать root внутри контейнера, иначе будут возникать ошибки с правами на чтение/запись. См. комментарии в файле docker/docker-compose.dev.yml.

Подключение веб-приложения к удаленному серверу​

Если вы хотите заниматься только разработкой веб-сайта, подключенного к существующему удаленному серверу, выполните следующие шаги:

  1. Соберите SDK Immich - cd open-api/typescript-sdk && npm i && npm run build && cd -
  2. Перейдите в каталог веб-приложения - cd web/
  3. Установите зависимости веб-приложения - npm i
  4. Запустите сервер разработки веб-приложения
IMMICH_SERVER_URL=https://demo.immich.app/ npm run dev

Если вы используете PowerShell в Windows, возможно, понадобится задать переменную окружения отдельно, например:

$env:IMMICH_SERVER_URL = "https://demo.immich.app/"
npm run dev

@immich/ui​

Чтобы увидеть локальные изменения в @immich/ui в Immich, выполните следующее:

  1. Установите @immich/ui рядом с каталогом immich/, например /home/user/immich и /home/user/ui
  2. Соберите проект @immich/ui с помощью команды npm run build
  3. Раскомментируйте соответствующий том в веб-сервисе файла docker/docker-compose.dev.yaml (../../ui:/usr/ui)
  4. Раскомментируйте соответствующий alias в файле web/vite.config.js ('@immich/ui': path.resolve(__dirname, '../../ui'))
  5. Раскомментируйте строку импорта в файле web/src/app.css (@import '/usr/ui/dist/theme/default.css';) и закомментируйте строку @import '@immich/ui/theme/default.css';
  6. Запустите стек с помощью команды make dev
  7. После внесения изменений в @immich/ui перезагрузите его (npm run build)

Мобильное приложение​

Настройка​

  1. Настройте инструментальную цепочку Flutter с использованием FVM.
  2. Запустите flutter pub get для установки зависимостей.
  3. Выполните make translation для создания файла перевода.
  4. Запустите fvm flutter run для запуска приложения.

Перевод​

Чтобы добавить новый текст перевода, укажите пару "ключ-значение" в файле i18n/en.json в корне проекта Immich. Затем, из каталога mobile/, выполните

make translation

Мобильное приложение спрашивает, к какому серверу подключиться. Вы можете использовать демонстрационный сервер (https://demo.immich.app/), если вам не нужно изменять коды сервера или загружать фотографии. Кроме того, вы можете запустить сервер самостоятельно, следуя вышеуказанным инструкциям.

Настройка IDE​

Расширения для линтинга / форматирования​

Настройка этих расширений в IDE улучшает разработку, автоматически форматируя код при сохранении и предоставляя мгновенную обратную связь по вопросам линтинга.

Dart Code Metrics​

Мобильное приложение использует DCM (Dart Code Metrics) для линтинга и вычисления метрик. Пожалуйста, ознакомьтесь с страницей "Начало работы" для получения дополнительной информации о настройке DCM.

Примечание: Активация лицензии не требуется.

VSCode​

Установите расширения Flutter, DCM, Prettier, ESLint и Svelte. Эти расширения перечислены в файле extensions.json под .vscode/ и должны отображаться как рекомендации для рабочего пространства.

Вот настройки, которые мы используем. Они должны быть активны как настройки рабочего пространства (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"
}