From 45903b9cc5b2e323ca9f8918e7a46eab7e10bd7a Mon Sep 17 00:00:00 2001 From: QYG2297248353 Date: Thu, 22 May 2025 05:47:51 +0000 Subject: [PATCH] Processed apps directory via GitHub Actions --- appstore/bili-fetcher/README.md | 43 +++++ appstore/bili-fetcher/data.yml | 14 ++ appstore/bili-fetcher/latest/.env | 6 + appstore/bili-fetcher/latest/data.yml | 17 ++ .../bili-fetcher/latest/docker-compose.yml | 40 +++++ .../latest}/envs/default.env | 0 .../latest}/envs/global.env | 0 .../latest}/scripts/init.sh | 0 .../latest}/scripts/uninstall.sh | 0 .../latest}/scripts/upgrade.sh | 0 appstore/bili-fetcher/logo.png | Bin 0 -> 79622 bytes appstore/dpanel-lite/{1.6.4 => 1.7.0}/.env | 0 .../dpanel-lite/{1.6.4 => 1.7.0}/data.yml | 0 .../{1.6.4 => 1.7.0}/docker-compose.yml | 2 +- .../1.7.0}/envs/default.env | 0 .../1.7.0}/envs/global.env | 0 .../1.7.0}/scripts/init.sh | 0 .../1.7.0}/scripts/uninstall.sh | 0 .../1.7.0}/scripts/upgrade.sh | 0 appstore/dpanel/{1.6.4 => 1.7.0}/.env | 0 appstore/dpanel/{1.6.4 => 1.7.0}/data.yml | 0 .../{1.6.4 => 1.7.0}/docker-compose.yml | 2 +- .../1.131.2 => dpanel/1.7.0}/envs/default.env | 0 .../1.131.2 => dpanel/1.7.0}/envs/global.env | 0 .../1.131.2 => dpanel/1.7.0}/scripts/init.sh | 0 .../1.7.0}/scripts/uninstall.sh | 0 .../1.7.0}/scripts/upgrade.sh | 0 .../{1.131.2 => 1.132.3}/.env | 0 .../{1.131.2 => 1.132.3}/data.yml | 0 .../{1.131.2 => 1.132.3}/docker-compose.yml | 2 +- .../1.132.3}/envs/default.env | 0 .../1.132.3}/envs/global.env | 0 .../1.132.3}/scripts/init.sh | 0 .../1.132.3}/scripts/uninstall.sh | 0 .../1.132.3}/scripts/upgrade.sh | 0 appstore/immich-machine-learning/1.133.0/.env | 21 +++ .../immich-machine-learning/1.133.0/data.yml | 61 +++++++ .../1.133.0/docker-compose.yml | 22 +++ .../1.133.0/envs/default.env | 2 + .../1.133.0/envs/global.env | 2 + .../1.133.0/scripts/init.sh | 17 ++ .../1.133.0/scripts/uninstall.sh | 10 ++ .../1.133.0/scripts/upgrade.sh | 17 ++ appstore/immich-no-machine/1.133.0/.env | 42 +++++ appstore/immich-no-machine/1.133.0/data.yml | 117 +++++++++++++ .../1.133.0/docker-compose.yml | 42 +++++ .../1.133.0/envs/default.env | 2 + .../immich-no-machine/1.133.0/envs/global.env | 2 + .../immich-no-machine/1.133.0/scripts/init.sh | 17 ++ .../1.133.0/scripts/uninstall.sh | 10 ++ .../1.133.0/scripts/upgrade.sh | 17 ++ appstore/immich-server/1.133.0/.env | 48 ++++++ appstore/immich-server/1.133.0/data.yml | 138 ++++++++++++++++ .../immich-server/1.133.0/docker-compose.yml | 23 +++ .../immich-server/1.133.0/envs/default.env | 2 + .../immich-server/1.133.0/envs/global.env | 2 + .../immich-server/1.133.0/scripts/init.sh | 17 ++ .../1.133.0/scripts/uninstall.sh | 10 ++ .../immich-server/1.133.0/scripts/upgrade.sh | 17 ++ appstore/immich/{1.131.2 => 1.132.3}/.env | 0 appstore/immich/{1.131.2 => 1.132.3}/data.yml | 0 .../{1.131.2 => 1.132.3}/docker-compose.yml | 2 +- appstore/immich/1.132.3/envs/default.env | 2 + appstore/immich/1.132.3/envs/global.env | 2 + appstore/immich/1.132.3/scripts/init.sh | 17 ++ appstore/immich/1.132.3/scripts/uninstall.sh | 10 ++ appstore/immich/1.132.3/scripts/upgrade.sh | 17 ++ appstore/immich/1.133.0/.env | 54 ++++++ appstore/immich/1.133.0/data.yml | 156 ++++++++++++++++++ appstore/immich/1.133.0/docker-compose.yml | 58 +++++++ appstore/immich/1.133.0/envs/default.env | 2 + appstore/immich/1.133.0/envs/global.env | 2 + appstore/immich/1.133.0/scripts/init.sh | 17 ++ appstore/immich/1.133.0/scripts/uninstall.sh | 10 ++ appstore/immich/1.133.0/scripts/upgrade.sh | 17 ++ dockge/bili-fetcher/.env | 6 + dockge/bili-fetcher/docker-compose.yml | 40 +++++ dockge/bili-fetcher/envs/default.env | 2 + dockge/bili-fetcher/envs/global.env | 2 + dockge/dpanel-lite/docker-compose.yml | 2 +- dockge/dpanel/docker-compose.yml | 2 +- .../docker-compose.yml | 2 +- dockge/immich-machine-learning_1_132_3/.env | 21 +++ .../docker-compose.yml | 22 +++ .../envs/default.env | 2 + .../envs/global.env | 2 + dockge/immich-no-machine/docker-compose.yml | 27 +-- dockge/immich-no-machine_1_132_3/.env | 42 +++++ .../docker-compose.yml | 65 ++++++++ .../envs/default.env | 2 + .../immich-no-machine_1_132_3/envs/global.env | 2 + dockge/immich-server/docker-compose.yml | 2 +- dockge/immich-server_1_132_3/.env | 48 ++++++ .../immich-server_1_132_3/docker-compose.yml | 23 +++ dockge/immich-server_1_132_3/envs/default.env | 2 + dockge/immich-server_1_132_3/envs/global.env | 2 + dockge/immich/docker-compose.yml | 29 +--- dockge/immich_1_132_3/.env | 54 ++++++ dockge/immich_1_132_3/docker-compose.yml | 81 +++++++++ dockge/immich_1_132_3/envs/default.env | 2 + dockge/immich_1_132_3/envs/global.env | 2 + 101 files changed, 1577 insertions(+), 59 deletions(-) create mode 100644 appstore/bili-fetcher/README.md create mode 100644 appstore/bili-fetcher/data.yml create mode 100644 appstore/bili-fetcher/latest/.env create mode 100644 appstore/bili-fetcher/latest/data.yml create mode 100644 appstore/bili-fetcher/latest/docker-compose.yml rename appstore/{dpanel-lite/1.6.4 => bili-fetcher/latest}/envs/default.env (100%) rename appstore/{dpanel-lite/1.6.4 => bili-fetcher/latest}/envs/global.env (100%) rename appstore/{dpanel-lite/1.6.4 => bili-fetcher/latest}/scripts/init.sh (100%) rename appstore/{dpanel-lite/1.6.4 => bili-fetcher/latest}/scripts/uninstall.sh (100%) rename appstore/{dpanel-lite/1.6.4 => bili-fetcher/latest}/scripts/upgrade.sh (100%) create mode 100644 appstore/bili-fetcher/logo.png rename appstore/dpanel-lite/{1.6.4 => 1.7.0}/.env (100%) rename appstore/dpanel-lite/{1.6.4 => 1.7.0}/data.yml (100%) rename appstore/dpanel-lite/{1.6.4 => 1.7.0}/docker-compose.yml (93%) rename appstore/{dpanel/1.6.4 => dpanel-lite/1.7.0}/envs/default.env (100%) rename appstore/{dpanel/1.6.4 => dpanel-lite/1.7.0}/envs/global.env (100%) rename appstore/{dpanel/1.6.4 => dpanel-lite/1.7.0}/scripts/init.sh (100%) rename appstore/{dpanel/1.6.4 => dpanel-lite/1.7.0}/scripts/uninstall.sh (100%) rename appstore/{dpanel/1.6.4 => dpanel-lite/1.7.0}/scripts/upgrade.sh (100%) rename appstore/dpanel/{1.6.4 => 1.7.0}/.env (100%) rename appstore/dpanel/{1.6.4 => 1.7.0}/data.yml (100%) rename appstore/dpanel/{1.6.4 => 1.7.0}/docker-compose.yml (94%) rename appstore/{immich-machine-learning/1.131.2 => dpanel/1.7.0}/envs/default.env (100%) rename appstore/{immich-machine-learning/1.131.2 => dpanel/1.7.0}/envs/global.env (100%) rename appstore/{immich-machine-learning/1.131.2 => dpanel/1.7.0}/scripts/init.sh (100%) rename appstore/{immich-machine-learning/1.131.2 => dpanel/1.7.0}/scripts/uninstall.sh (100%) rename appstore/{immich-machine-learning/1.131.2 => dpanel/1.7.0}/scripts/upgrade.sh (100%) rename appstore/immich-machine-learning/{1.131.2 => 1.132.3}/.env (100%) rename appstore/immich-machine-learning/{1.131.2 => 1.132.3}/data.yml (100%) rename appstore/immich-machine-learning/{1.131.2 => 1.132.3}/docker-compose.yml (87%) rename appstore/{immich/1.131.2 => immich-machine-learning/1.132.3}/envs/default.env (100%) rename appstore/{immich/1.131.2 => immich-machine-learning/1.132.3}/envs/global.env (100%) rename appstore/{immich/1.131.2 => immich-machine-learning/1.132.3}/scripts/init.sh (100%) rename appstore/{immich/1.131.2 => immich-machine-learning/1.132.3}/scripts/uninstall.sh (100%) rename appstore/{immich/1.131.2 => immich-machine-learning/1.132.3}/scripts/upgrade.sh (100%) create mode 100644 appstore/immich-machine-learning/1.133.0/.env create mode 100644 appstore/immich-machine-learning/1.133.0/data.yml create mode 100644 appstore/immich-machine-learning/1.133.0/docker-compose.yml create mode 100644 appstore/immich-machine-learning/1.133.0/envs/default.env create mode 100644 appstore/immich-machine-learning/1.133.0/envs/global.env create mode 100644 appstore/immich-machine-learning/1.133.0/scripts/init.sh create mode 100644 appstore/immich-machine-learning/1.133.0/scripts/uninstall.sh create mode 100644 appstore/immich-machine-learning/1.133.0/scripts/upgrade.sh create mode 100644 appstore/immich-no-machine/1.133.0/.env create mode 100644 appstore/immich-no-machine/1.133.0/data.yml create mode 100644 appstore/immich-no-machine/1.133.0/docker-compose.yml create mode 100644 appstore/immich-no-machine/1.133.0/envs/default.env create mode 100644 appstore/immich-no-machine/1.133.0/envs/global.env create mode 100644 appstore/immich-no-machine/1.133.0/scripts/init.sh create mode 100644 appstore/immich-no-machine/1.133.0/scripts/uninstall.sh create mode 100644 appstore/immich-no-machine/1.133.0/scripts/upgrade.sh create mode 100644 appstore/immich-server/1.133.0/.env create mode 100644 appstore/immich-server/1.133.0/data.yml create mode 100644 appstore/immich-server/1.133.0/docker-compose.yml create mode 100644 appstore/immich-server/1.133.0/envs/default.env create mode 100644 appstore/immich-server/1.133.0/envs/global.env create mode 100644 appstore/immich-server/1.133.0/scripts/init.sh create mode 100644 appstore/immich-server/1.133.0/scripts/uninstall.sh create mode 100644 appstore/immich-server/1.133.0/scripts/upgrade.sh rename appstore/immich/{1.131.2 => 1.132.3}/.env (100%) rename appstore/immich/{1.131.2 => 1.132.3}/data.yml (100%) rename appstore/immich/{1.131.2 => 1.132.3}/docker-compose.yml (97%) create mode 100644 appstore/immich/1.132.3/envs/default.env create mode 100644 appstore/immich/1.132.3/envs/global.env create mode 100644 appstore/immich/1.132.3/scripts/init.sh create mode 100644 appstore/immich/1.132.3/scripts/uninstall.sh create mode 100644 appstore/immich/1.132.3/scripts/upgrade.sh create mode 100644 appstore/immich/1.133.0/.env create mode 100644 appstore/immich/1.133.0/data.yml create mode 100644 appstore/immich/1.133.0/docker-compose.yml create mode 100644 appstore/immich/1.133.0/envs/default.env create mode 100644 appstore/immich/1.133.0/envs/global.env create mode 100644 appstore/immich/1.133.0/scripts/init.sh create mode 100644 appstore/immich/1.133.0/scripts/uninstall.sh create mode 100644 appstore/immich/1.133.0/scripts/upgrade.sh create mode 100644 dockge/bili-fetcher/.env create mode 100644 dockge/bili-fetcher/docker-compose.yml create mode 100644 dockge/bili-fetcher/envs/default.env create mode 100644 dockge/bili-fetcher/envs/global.env create mode 100644 dockge/immich-machine-learning_1_132_3/.env create mode 100644 dockge/immich-machine-learning_1_132_3/docker-compose.yml create mode 100644 dockge/immich-machine-learning_1_132_3/envs/default.env create mode 100644 dockge/immich-machine-learning_1_132_3/envs/global.env create mode 100644 dockge/immich-no-machine_1_132_3/.env create mode 100644 dockge/immich-no-machine_1_132_3/docker-compose.yml create mode 100644 dockge/immich-no-machine_1_132_3/envs/default.env create mode 100644 dockge/immich-no-machine_1_132_3/envs/global.env create mode 100644 dockge/immich-server_1_132_3/.env create mode 100644 dockge/immich-server_1_132_3/docker-compose.yml create mode 100644 dockge/immich-server_1_132_3/envs/default.env create mode 100644 dockge/immich-server_1_132_3/envs/global.env create mode 100644 dockge/immich_1_132_3/.env create mode 100644 dockge/immich_1_132_3/docker-compose.yml create mode 100644 dockge/immich_1_132_3/envs/default.env create mode 100644 dockge/immich_1_132_3/envs/global.env diff --git a/appstore/bili-fetcher/README.md b/appstore/bili-fetcher/README.md new file mode 100644 index 000000000..5f10ca785 --- /dev/null +++ b/appstore/bili-fetcher/README.md @@ -0,0 +1,43 @@ +# BiliFetcher + +B站历史记录 + +![BiliFetcher](https://file.lifebus.top/imgs/bili_fetcher_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +获取B站历史记录 + +批量下载视频 + +一键下载用户投稿视频 + +收藏夹所有视频 + +生成详细的年度总结 + +自动化任务 + +## 特性 + +![BiliFetcher](https://file.lifebus.top/imgs/bili_fetcher_img1.png) + +![BiliFetcher](https://file.lifebus.top/imgs/bili_fetcher_img2.png) + +![BiliFetcher](https://file.lifebus.top/imgs/bili_fetcher_img3.png) + +![BiliFetcher](https://file.lifebus.top/imgs/bili_fetcher_img4.png) + +![BiliFetcher](https://file.lifebus.top/imgs/bili_fetcher_img5.png) + +![BiliFetcher](https://file.lifebus.top/imgs/bili_fetcher_img6.png) + +![BiliFetcher](https://file.lifebus.top/imgs/bili_fetcher_img7.png) + +![BiliFetcher](https://file.lifebus.top/imgs/bili_fetcher_img8.png) + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/bili-fetcher/data.yml b/appstore/bili-fetcher/data.yml new file mode 100644 index 000000000..6750233d1 --- /dev/null +++ b/appstore/bili-fetcher/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: bili-fetcher + name: BiliFetcher + tags: + - WebSite + - Local + shortDescZh: B站历史记录 + shortDescEn: Bilibili History Fetcher + type: website + crossVersionUpdate: true + limit: 0 + website: https://github.com/2977094657/BilibiliHistoryFetcher/ + github: https://github.com/2977094657/BilibiliHistoryFetcher/ + document: https://github.com/2977094657/BilibiliHistoryFetcher/ diff --git a/appstore/bili-fetcher/latest/.env b/appstore/bili-fetcher/latest/.env new file mode 100644 index 000000000..5343acab9 --- /dev/null +++ b/appstore/bili-fetcher/latest/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +BILI_FETCHER_ROOT_PATH=/home/bili-fetcher + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + diff --git a/appstore/bili-fetcher/latest/data.yml b/appstore/bili-fetcher/latest/data.yml new file mode 100644 index 000000000..3233ebf07 --- /dev/null +++ b/appstore/bili-fetcher/latest/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + formFields: + - default: "/home/bili-fetcher" + edit: true + envKey: BILI_FETCHER_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number diff --git a/appstore/bili-fetcher/latest/docker-compose.yml b/appstore/bili-fetcher/latest/docker-compose.yml new file mode 100644 index 000000000..50547078c --- /dev/null +++ b/appstore/bili-fetcher/latest/docker-compose.yml @@ -0,0 +1,40 @@ +networks: + 1panel-network: + external: true +services: + bili-fetcher-api: + build: + context: https://github.com/2977094657/BilibiliHistoryFetcher.git + dockerfile: docker/Dockerfile.cpu + container_name: api-bili-fetcher + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + - DOCKER_ENV=true + image: bilibili-api:latest + networks: + - 1panel-network + restart: always + volumes: + - ${BILI_FETCHER_ROOT_PATH}/config:/app/config + - ${BILI_FETCHER_ROOT_PATH}/output:/app/output + bili-fetcher-web: + build: + context: https://github.com/2977094657/BiliHistoryFrontend.git + dockerfile: Dockerfile + container_name: bili-fetcher + depends_on: + - bili-fetcher-api + environment: + - BACKEND_URL=http://bili-fetcher-api:8899 + - TZ=Asia/Shanghai + image: bilibili-frontend:latest + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always diff --git a/appstore/dpanel-lite/1.6.4/envs/default.env b/appstore/bili-fetcher/latest/envs/default.env similarity index 100% rename from appstore/dpanel-lite/1.6.4/envs/default.env rename to appstore/bili-fetcher/latest/envs/default.env diff --git a/appstore/dpanel-lite/1.6.4/envs/global.env b/appstore/bili-fetcher/latest/envs/global.env similarity index 100% rename from appstore/dpanel-lite/1.6.4/envs/global.env rename to appstore/bili-fetcher/latest/envs/global.env diff --git a/appstore/dpanel-lite/1.6.4/scripts/init.sh b/appstore/bili-fetcher/latest/scripts/init.sh similarity index 100% rename from appstore/dpanel-lite/1.6.4/scripts/init.sh rename to appstore/bili-fetcher/latest/scripts/init.sh diff --git a/appstore/dpanel-lite/1.6.4/scripts/uninstall.sh b/appstore/bili-fetcher/latest/scripts/uninstall.sh similarity index 100% rename from appstore/dpanel-lite/1.6.4/scripts/uninstall.sh rename to appstore/bili-fetcher/latest/scripts/uninstall.sh diff --git a/appstore/dpanel-lite/1.6.4/scripts/upgrade.sh b/appstore/bili-fetcher/latest/scripts/upgrade.sh similarity index 100% rename from appstore/dpanel-lite/1.6.4/scripts/upgrade.sh rename to appstore/bili-fetcher/latest/scripts/upgrade.sh diff --git a/appstore/bili-fetcher/logo.png b/appstore/bili-fetcher/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..631dc978ab0a6d41c8fe88c17fe58c99dadc3683 GIT binary patch literal 79622 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 literal 0 HcmV?d00001 diff --git a/appstore/dpanel-lite/1.6.4/.env b/appstore/dpanel-lite/1.7.0/.env similarity index 100% rename from appstore/dpanel-lite/1.6.4/.env rename to appstore/dpanel-lite/1.7.0/.env diff --git a/appstore/dpanel-lite/1.6.4/data.yml b/appstore/dpanel-lite/1.7.0/data.yml similarity index 100% rename from appstore/dpanel-lite/1.6.4/data.yml rename to appstore/dpanel-lite/1.7.0/data.yml diff --git a/appstore/dpanel-lite/1.6.4/docker-compose.yml b/appstore/dpanel-lite/1.7.0/docker-compose.yml similarity index 93% rename from appstore/dpanel-lite/1.6.4/docker-compose.yml rename to appstore/dpanel-lite/1.7.0/docker-compose.yml index 203e95c6e..59260c11f 100644 --- a/appstore/dpanel-lite/1.6.4/docker-compose.yml +++ b/appstore/dpanel-lite/1.7.0/docker-compose.yml @@ -10,7 +10,7 @@ services: environment: - APP_NAME=${CONTAINER_NAME} - HTTPS_PROXY=${HTTP_PROXY} - image: dpanel/dpanel:1.6.4-lite + image: dpanel/dpanel:1.7.0-lite labels: createdBy: Apps networks: diff --git a/appstore/dpanel/1.6.4/envs/default.env b/appstore/dpanel-lite/1.7.0/envs/default.env similarity index 100% rename from appstore/dpanel/1.6.4/envs/default.env rename to appstore/dpanel-lite/1.7.0/envs/default.env diff --git a/appstore/dpanel/1.6.4/envs/global.env b/appstore/dpanel-lite/1.7.0/envs/global.env similarity index 100% rename from appstore/dpanel/1.6.4/envs/global.env rename to appstore/dpanel-lite/1.7.0/envs/global.env diff --git a/appstore/dpanel/1.6.4/scripts/init.sh b/appstore/dpanel-lite/1.7.0/scripts/init.sh similarity index 100% rename from appstore/dpanel/1.6.4/scripts/init.sh rename to appstore/dpanel-lite/1.7.0/scripts/init.sh diff --git a/appstore/dpanel/1.6.4/scripts/uninstall.sh b/appstore/dpanel-lite/1.7.0/scripts/uninstall.sh similarity index 100% rename from appstore/dpanel/1.6.4/scripts/uninstall.sh rename to appstore/dpanel-lite/1.7.0/scripts/uninstall.sh diff --git a/appstore/dpanel/1.6.4/scripts/upgrade.sh b/appstore/dpanel-lite/1.7.0/scripts/upgrade.sh similarity index 100% rename from appstore/dpanel/1.6.4/scripts/upgrade.sh rename to appstore/dpanel-lite/1.7.0/scripts/upgrade.sh diff --git a/appstore/dpanel/1.6.4/.env b/appstore/dpanel/1.7.0/.env similarity index 100% rename from appstore/dpanel/1.6.4/.env rename to appstore/dpanel/1.7.0/.env diff --git a/appstore/dpanel/1.6.4/data.yml b/appstore/dpanel/1.7.0/data.yml similarity index 100% rename from appstore/dpanel/1.6.4/data.yml rename to appstore/dpanel/1.7.0/data.yml diff --git a/appstore/dpanel/1.6.4/docker-compose.yml b/appstore/dpanel/1.7.0/docker-compose.yml similarity index 94% rename from appstore/dpanel/1.6.4/docker-compose.yml rename to appstore/dpanel/1.7.0/docker-compose.yml index f73ab6d09..599980786 100644 --- a/appstore/dpanel/1.6.4/docker-compose.yml +++ b/appstore/dpanel/1.7.0/docker-compose.yml @@ -10,7 +10,7 @@ services: environment: - APP_NAME=${CONTAINER_NAME} - HTTPS_PROXY=${HTTP_PROXY} - image: dpanel/dpanel:1.6.4 + image: dpanel/dpanel:1.7.0 labels: createdBy: Apps networks: diff --git a/appstore/immich-machine-learning/1.131.2/envs/default.env b/appstore/dpanel/1.7.0/envs/default.env similarity index 100% rename from appstore/immich-machine-learning/1.131.2/envs/default.env rename to appstore/dpanel/1.7.0/envs/default.env diff --git a/appstore/immich-machine-learning/1.131.2/envs/global.env b/appstore/dpanel/1.7.0/envs/global.env similarity index 100% rename from appstore/immich-machine-learning/1.131.2/envs/global.env rename to appstore/dpanel/1.7.0/envs/global.env diff --git a/appstore/immich-machine-learning/1.131.2/scripts/init.sh b/appstore/dpanel/1.7.0/scripts/init.sh similarity index 100% rename from appstore/immich-machine-learning/1.131.2/scripts/init.sh rename to appstore/dpanel/1.7.0/scripts/init.sh diff --git a/appstore/immich-machine-learning/1.131.2/scripts/uninstall.sh b/appstore/dpanel/1.7.0/scripts/uninstall.sh similarity index 100% rename from appstore/immich-machine-learning/1.131.2/scripts/uninstall.sh rename to appstore/dpanel/1.7.0/scripts/uninstall.sh diff --git a/appstore/immich-machine-learning/1.131.2/scripts/upgrade.sh b/appstore/dpanel/1.7.0/scripts/upgrade.sh similarity index 100% rename from appstore/immich-machine-learning/1.131.2/scripts/upgrade.sh rename to appstore/dpanel/1.7.0/scripts/upgrade.sh diff --git a/appstore/immich-machine-learning/1.131.2/.env b/appstore/immich-machine-learning/1.132.3/.env similarity index 100% rename from appstore/immich-machine-learning/1.131.2/.env rename to appstore/immich-machine-learning/1.132.3/.env diff --git a/appstore/immich-machine-learning/1.131.2/data.yml b/appstore/immich-machine-learning/1.132.3/data.yml similarity index 100% rename from appstore/immich-machine-learning/1.131.2/data.yml rename to appstore/immich-machine-learning/1.132.3/data.yml diff --git a/appstore/immich-machine-learning/1.131.2/docker-compose.yml b/appstore/immich-machine-learning/1.132.3/docker-compose.yml similarity index 87% rename from appstore/immich-machine-learning/1.131.2/docker-compose.yml rename to appstore/immich-machine-learning/1.132.3/docker-compose.yml index cbb6736ef..0c0530ffe 100644 --- a/appstore/immich-machine-learning/1.131.2/docker-compose.yml +++ b/appstore/immich-machine-learning/1.132.3/docker-compose.yml @@ -10,7 +10,7 @@ services: env_file: - ./envs/global.env - .env - image: ghcr.io/immich-app/immich-machine-learning:v1.131.2 + image: ghcr.io/immich-app/immich-machine-learning:v1.132.3 labels: createdBy: Apps networks: diff --git a/appstore/immich/1.131.2/envs/default.env b/appstore/immich-machine-learning/1.132.3/envs/default.env similarity index 100% rename from appstore/immich/1.131.2/envs/default.env rename to appstore/immich-machine-learning/1.132.3/envs/default.env diff --git a/appstore/immich/1.131.2/envs/global.env b/appstore/immich-machine-learning/1.132.3/envs/global.env similarity index 100% rename from appstore/immich/1.131.2/envs/global.env rename to appstore/immich-machine-learning/1.132.3/envs/global.env diff --git a/appstore/immich/1.131.2/scripts/init.sh b/appstore/immich-machine-learning/1.132.3/scripts/init.sh similarity index 100% rename from appstore/immich/1.131.2/scripts/init.sh rename to appstore/immich-machine-learning/1.132.3/scripts/init.sh diff --git a/appstore/immich/1.131.2/scripts/uninstall.sh b/appstore/immich-machine-learning/1.132.3/scripts/uninstall.sh similarity index 100% rename from appstore/immich/1.131.2/scripts/uninstall.sh rename to appstore/immich-machine-learning/1.132.3/scripts/uninstall.sh diff --git a/appstore/immich/1.131.2/scripts/upgrade.sh b/appstore/immich-machine-learning/1.132.3/scripts/upgrade.sh similarity index 100% rename from appstore/immich/1.131.2/scripts/upgrade.sh rename to appstore/immich-machine-learning/1.132.3/scripts/upgrade.sh diff --git a/appstore/immich-machine-learning/1.133.0/.env b/appstore/immich-machine-learning/1.133.0/.env new file mode 100644 index 000000000..91116ad60 --- /dev/null +++ b/appstore/immich-machine-learning/1.133.0/.env @@ -0,0 +1,21 @@ +# 数据持久化路径 [必填] +IMMICH_ROOT_PATH=/home/immich-machine-learning + +# API 端口 [必填] +PANEL_APP_PORT_HTTP=2283 + +# 硬件驱动路径 [必填] +IMMICH_DRIVE_PATH=/dev/dri + +# 时区 [必填] +TZ=Asia/Shanghai + +# 机器学习 预加载模型 +MACHINE_LEARNING_PRELOAD__CLIP=XLM-Roberta-Large-Vit-B-16Plus + +# 人脸识别 预加载模型 +MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION=buffalo_l + +# Hugging Face 服务地址 +HF_ENDPOINT=https://hf-mirror.com + diff --git a/appstore/immich-machine-learning/1.133.0/data.yml b/appstore/immich-machine-learning/1.133.0/data.yml new file mode 100644 index 000000000..7321cde6d --- /dev/null +++ b/appstore/immich-machine-learning/1.133.0/data.yml @@ -0,0 +1,61 @@ +additionalProperties: + formFields: + - default: "/home/immich-machine-learning" + edit: true + envKey: IMMICH_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 2283 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: API 端口 + labelEn: API port + required: true + rule: paramPort + type: number + - default: "/dev/dri" + edit: true + envKey: IMMICH_DRIVE_PATH + labelZh: 硬件驱动路径 + labelEn: Drive path + required: true + type: text + - default: "Asia/Shanghai" + edit: true + envKey: TZ + labelZh: 时区 + labelEn: Timezone + required: true + type: text + - default: "XLM-Roberta-Large-Vit-B-16Plus" + edit: true + envKey: MACHINE_LEARNING_PRELOAD__CLIP + labelEn: Machine Learning Preload Model + labelZh: 机器学习 预加载模型 + required: false + type: text + - default: "buffalo_l" + edit: true + envKey: MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION + labelEn: Machine Learning Preload Model + labelZh: 人脸识别 预加载模型 + required: false + type: select + values: + - label: antelopev2 + value: "antelopev2" + - label: buffalo_l + value: "buffalo_l" + - label: buffalo_m + value: "buffalo_m" + - label: buffalo_s + value: "buffalo_s" + - default: "https://hf-mirror.com" + edit: true + envKey: HF_ENDPOINT + labelZh: Hugging Face 服务地址 + labelEn: Hugging Face Endpoint + required: false + type: text diff --git a/appstore/immich-machine-learning/1.133.0/docker-compose.yml b/appstore/immich-machine-learning/1.133.0/docker-compose.yml new file mode 100644 index 000000000..556391618 --- /dev/null +++ b/appstore/immich-machine-learning/1.133.0/docker-compose.yml @@ -0,0 +1,22 @@ +name: immich-machine-learning +networks: + 1panel-network: + external: true +services: + immich-machine-learning: + container_name: immich-machine-learning-immich-machine-learning + devices: + - /dev/dri:/dev/dri + env_file: + - ./envs/global.env + - .env + image: ghcr.io/immich-app/immich-machine-learning:v1.133.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3003 + restart: always + volumes: + - ${IMMICH_ROOT_PATH}/data/cache:/cache diff --git a/appstore/immich-machine-learning/1.133.0/envs/default.env b/appstore/immich-machine-learning/1.133.0/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/immich-machine-learning/1.133.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/immich-machine-learning/1.133.0/envs/global.env b/appstore/immich-machine-learning/1.133.0/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/immich-machine-learning/1.133.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/immich-machine-learning/1.133.0/scripts/init.sh b/appstore/immich-machine-learning/1.133.0/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/immich-machine-learning/1.133.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/immich-machine-learning/1.133.0/scripts/uninstall.sh b/appstore/immich-machine-learning/1.133.0/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/immich-machine-learning/1.133.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/immich-machine-learning/1.133.0/scripts/upgrade.sh b/appstore/immich-machine-learning/1.133.0/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/immich-machine-learning/1.133.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/immich-no-machine/1.133.0/.env b/appstore/immich-no-machine/1.133.0/.env new file mode 100644 index 000000000..da1ba0f59 --- /dev/null +++ b/appstore/immich-no-machine/1.133.0/.env @@ -0,0 +1,42 @@ +# Redis 服务 (前置检查) [必填] +PANEL_REDIS_TYPE=redis + +# 数据持久化路径 [必填] +IMMICH_ROOT_PATH=/home/immich-app + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=2283 + +# 数据库连接密码 [必填] +DB_PASSWORD= + +# 数据库 端口 [必填] +PANEL_APP_PORT_DB=5432 + +# 数据库 主机地址 [必填] +DB_HOSTNAME=immich-pg14-vectors + +# 数据库 用户名 [必填] +DB_USERNAME=postgres + +# 数据库 名称 [必填] +DB_DATABASE_NAME=immich + +# Redis 主机 [必填] +REDIS_HOSTNAME=127.0.0.1 + +# Redis 端口 [必填] +REDIS_PORT=6379 + +# Redis 索引 [必填] +REDIS_DBINDEX=0 + +# Redis 用户名 +REDIS_USERNAME= + +# Redis 密码 +REDIS_PASSWORD= + +# 是否跳过目录检查 +IMMICH_IGNORE_MOUNT_CHECK_ERRORS=false + diff --git a/appstore/immich-no-machine/1.133.0/data.yml b/appstore/immich-no-machine/1.133.0/data.yml new file mode 100644 index 000000000..093e32b15 --- /dev/null +++ b/appstore/immich-no-machine/1.133.0/data.yml @@ -0,0 +1,117 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_REDIS_SERVICE + required: true + type: service + default: redis + envKey: PANEL_REDIS_TYPE + labelZh: Redis 服务 (前置检查) + labelEn: Redis Service (Pre-check) + required: true + type: apps + values: + - label: Redis + value: redis + - default: "/home/immich-app" + edit: true + envKey: IMMICH_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 2283 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: DB_PASSWORD + labelEn: Database Password + labelZh: 数据库连接密码 + random: true + required: true + rule: paramComplexity + type: password + - default: 5432 + edit: true + envKey: PANEL_APP_PORT_DB + labelZh: 数据库 端口 + labelEn: Database Port + required: true + rule: paramPort + type: number + - default: "immich-pg14-vectors" + disabled: true + envKey: DB_HOSTNAME + labelZh: 数据库 主机地址 + labelEn: Database Host + required: true + type: text + - default: "postgres" + disabled: true + envKey: DB_USERNAME + labelZh: 数据库 用户名 + labelEn: Database User + required: true + type: text + - default: "immich" + disabled: true + envKey: DB_DATABASE_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + type: text + - default: "127.0.0.1" + edit: true + envKey: REDIS_HOSTNAME + labelZh: Redis 主机 + labelEn: Redis Host + required: true + type: text + - default: 6379 + edit: true + envKey: REDIS_PORT + labelZh: Redis 端口 + labelEn: Redis Port + required: true + rule: paramPort + type: number + - default: 0 + edit: true + envKey: REDIS_DBINDEX + labelZh: Redis 索引 + labelEn: Redis Index + required: true + type: number + - default: "" + edit: true + envKey: REDIS_USERNAME + labelZh: Redis 用户名 + labelEn: Redis Username + required: false + type: text + - default: "" + edit: true + envKey: REDIS_PASSWORD + labelZh: Redis 密码 + labelEn: Redis Password + required: false + type: password + - default: "false" + edit: true + envKey: IMMICH_IGNORE_MOUNT_CHECK_ERRORS + labelZh: 是否跳过目录检查 + labelEn: Skip Mount Check + required: false + type: select + values: + - label: 跳过检查 + value: "true" + - label: 不跳过检查 + value: "false" diff --git a/appstore/immich-no-machine/1.133.0/docker-compose.yml b/appstore/immich-no-machine/1.133.0/docker-compose.yml new file mode 100644 index 000000000..27a353edf --- /dev/null +++ b/appstore/immich-no-machine/1.133.0/docker-compose.yml @@ -0,0 +1,42 @@ +name: immich +networks: + 1panel-network: + external: true +services: + immich-pg14-vectors: + container_name: pg14-vectors-immich-no-machine + environment: + POSTGRES_DB: ${DB_DATABASE_NAME:-immich} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${DB_PASSWORD} + POSTGRES_USER: ${DB_USERNAME:-postgres} + image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0-pgvectors0.2.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_DB:-5432}:5432 + restart: always + volumes: + - ${IMMICH_ROOT_PATH}/pg14/data:/var/lib/postgresql/data + immich-server: + container_name: immich-server-immich-no-machine + depends_on: + - immich-pg14-vectors + devices: + - /dev/dri:/dev/dri + env_file: + - ./envs/global.env + - .env + image: ghcr.io/immich-app/immich-server:v1.133.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:2283 + restart: always + volumes: + - ${IMMICH_ROOT_PATH}/data/library:/usr/src/app/upload + - /etc/localtime:/etc/localtime diff --git a/appstore/immich-no-machine/1.133.0/envs/default.env b/appstore/immich-no-machine/1.133.0/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/immich-no-machine/1.133.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/immich-no-machine/1.133.0/envs/global.env b/appstore/immich-no-machine/1.133.0/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/immich-no-machine/1.133.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/immich-no-machine/1.133.0/scripts/init.sh b/appstore/immich-no-machine/1.133.0/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/immich-no-machine/1.133.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/immich-no-machine/1.133.0/scripts/uninstall.sh b/appstore/immich-no-machine/1.133.0/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/immich-no-machine/1.133.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/immich-no-machine/1.133.0/scripts/upgrade.sh b/appstore/immich-no-machine/1.133.0/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/immich-no-machine/1.133.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/immich-server/1.133.0/.env b/appstore/immich-server/1.133.0/.env new file mode 100644 index 000000000..27aea5506 --- /dev/null +++ b/appstore/immich-server/1.133.0/.env @@ -0,0 +1,48 @@ +# Redis 服务 (前置检查) [必填] +PANEL_REDIS_TYPE=redis + +# Postgres 服务 (前置检查) [必填] +PANEL_POSTGRES_TYPE=postgresql + +# 数据持久化路径 [必填] +IMMICH_ROOT_PATH=/home/immich-app + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=2283 + +# 时区 [必填] +TZ=Asia/Shanghai + +# 数据库 主机地址 [必填] +DB_HOSTNAME=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 用户名 [必填] +DB_USERNAME=postgres + +# 数据库 密码 [必填] +DB_PASSWORD= + +# 数据库 名称 [必填] +DB_DATABASE_NAME=immich + +# Redis 主机 [必填] +REDIS_HOSTNAME=127.0.0.1 + +# Redis 端口 [必填] +REDIS_PORT=6379 + +# Redis 索引 [必填] +REDIS_DBINDEX=0 + +# Redis 用户名 +REDIS_USERNAME= + +# Redis 密码 +REDIS_PASSWORD= + +# 是否跳过目录检查 +IMMICH_IGNORE_MOUNT_CHECK_ERRORS=false + diff --git a/appstore/immich-server/1.133.0/data.yml b/appstore/immich-server/1.133.0/data.yml new file mode 100644 index 000000000..33b62351b --- /dev/null +++ b/appstore/immich-server/1.133.0/data.yml @@ -0,0 +1,138 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_REDIS_SERVICE + required: true + type: service + default: redis + envKey: PANEL_REDIS_TYPE + labelZh: Redis 服务 (前置检查) + labelEn: Redis Service (Pre-check) + required: true + type: apps + values: + - label: Redis + value: redis + - child: + default: "" + envKey: PANEL_POSTGRES_SERVICE + required: true + type: service + default: postgresql + envKey: PANEL_POSTGRES_TYPE + labelZh: Postgres 服务 (前置检查) + labelEn: Postgres Service (Pre-check) + required: true + type: apps + values: + - label: PostgreSQL + value: postgresql + - default: "/home/immich-app" + edit: true + envKey: IMMICH_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 2283 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "Asia/Shanghai" + edit: true + envKey: TZ + labelZh: 时区 + labelEn: Timezone + required: true + type: text + - default: "127.0.0.1" + edit: true + envKey: DB_HOSTNAME + labelZh: 数据库 主机地址 + labelEn: Database Host + required: true + type: text + - default: 5432 + edit: true + envKey: DB_PORT + labelZh: 数据库 端口 + labelEn: Database Port + required: true + rule: paramPort + type: number + - default: "postgres" + edit: true + envKey: DB_USERNAME + labelZh: 数据库 用户名 + labelEn: Database User + required: true + type: text + - default: "" + edit: true + envKey: DB_PASSWORD + labelZh: 数据库 密码 + labelEn: Database Password + random: true + required: true + rule: paramComplexity + type: password + - default: "immich" + edit: true + envKey: DB_DATABASE_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + type: text + - default: "127.0.0.1" + edit: true + envKey: REDIS_HOSTNAME + labelZh: Redis 主机 + labelEn: Redis Host + required: true + type: text + - default: 6379 + edit: true + envKey: REDIS_PORT + labelZh: Redis 端口 + labelEn: Redis Port + required: true + rule: paramPort + type: number + - default: 0 + edit: true + envKey: REDIS_DBINDEX + labelZh: Redis 索引 + labelEn: Redis Index + required: true + type: number + - default: "" + edit: true + envKey: REDIS_USERNAME + labelZh: Redis 用户名 + labelEn: Redis Username + required: false + type: text + - default: "" + edit: true + envKey: REDIS_PASSWORD + labelZh: Redis 密码 + labelEn: Redis Password + required: false + type: password + - default: "false" + edit: true + envKey: IMMICH_IGNORE_MOUNT_CHECK_ERRORS + labelZh: 是否跳过目录检查 + labelEn: Skip Mount Check + required: false + type: select + values: + - label: 跳过检查 + value: "true" + - label: 不跳过检查 + value: "false" diff --git a/appstore/immich-server/1.133.0/docker-compose.yml b/appstore/immich-server/1.133.0/docker-compose.yml new file mode 100644 index 000000000..39ac0b485 --- /dev/null +++ b/appstore/immich-server/1.133.0/docker-compose.yml @@ -0,0 +1,23 @@ +name: immich-server +networks: + 1panel-network: + external: true +services: + immich-server: + container_name: immich-server-immich-server + devices: + - /dev/dri:/dev/dri + env_file: + - ./envs/global.env + - .env + image: ghcr.io/immich-app/immich-server:v1.133.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:2283 + restart: always + volumes: + - ${IMMICH_ROOT_PATH}/data/library:/usr/src/app/upload + - /etc/localtime:/etc/localtime diff --git a/appstore/immich-server/1.133.0/envs/default.env b/appstore/immich-server/1.133.0/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/immich-server/1.133.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/immich-server/1.133.0/envs/global.env b/appstore/immich-server/1.133.0/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/immich-server/1.133.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/immich-server/1.133.0/scripts/init.sh b/appstore/immich-server/1.133.0/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/immich-server/1.133.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/immich-server/1.133.0/scripts/uninstall.sh b/appstore/immich-server/1.133.0/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/immich-server/1.133.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/immich-server/1.133.0/scripts/upgrade.sh b/appstore/immich-server/1.133.0/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/immich-server/1.133.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/immich/1.131.2/.env b/appstore/immich/1.132.3/.env similarity index 100% rename from appstore/immich/1.131.2/.env rename to appstore/immich/1.132.3/.env diff --git a/appstore/immich/1.131.2/data.yml b/appstore/immich/1.132.3/data.yml similarity index 100% rename from appstore/immich/1.131.2/data.yml rename to appstore/immich/1.132.3/data.yml diff --git a/appstore/immich/1.131.2/docker-compose.yml b/appstore/immich/1.132.3/docker-compose.yml similarity index 97% rename from appstore/immich/1.131.2/docker-compose.yml rename to appstore/immich/1.132.3/docker-compose.yml index f013bfa12..44a2398ec 100644 --- a/appstore/immich/1.131.2/docker-compose.yml +++ b/appstore/immich/1.132.3/docker-compose.yml @@ -10,7 +10,7 @@ services: env_file: - ./envs/global.env - .env - image: ghcr.io/immich-app/immich-machine-learning:v1.131.2 + image: ghcr.io/immich-app/immich-machine-learning:v1.132.3 labels: createdBy: Apps networks: diff --git a/appstore/immich/1.132.3/envs/default.env b/appstore/immich/1.132.3/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/immich/1.132.3/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/immich/1.132.3/envs/global.env b/appstore/immich/1.132.3/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/immich/1.132.3/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/immich/1.132.3/scripts/init.sh b/appstore/immich/1.132.3/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/immich/1.132.3/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/immich/1.132.3/scripts/uninstall.sh b/appstore/immich/1.132.3/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/immich/1.132.3/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/immich/1.132.3/scripts/upgrade.sh b/appstore/immich/1.132.3/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/immich/1.132.3/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/immich/1.133.0/.env b/appstore/immich/1.133.0/.env new file mode 100644 index 000000000..a4e4ae287 --- /dev/null +++ b/appstore/immich/1.133.0/.env @@ -0,0 +1,54 @@ +# Redis 服务 (前置检查) [必填] +PANEL_REDIS_TYPE=redis + +# 数据持久化路径 [必填] +IMMICH_ROOT_PATH=/home/immich-app + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=2283 + +# 机器学习端口 [必填] +PANEL_APP_PORT_MACHINE_LEARNING=3003 + +# 数据库连接密码 [必填] +DB_PASSWORD= + +# 数据库 端口 [必填] +PANEL_APP_PORT_DB=5432 + +# 数据库 主机地址 [必填] +DB_HOSTNAME=immich-pg14-vectors + +# 数据库 用户名 [必填] +DB_USERNAME=postgres + +# 数据库 名称 [必填] +DB_DATABASE_NAME=immich + +# Redis 主机 [必填] +REDIS_HOSTNAME=127.0.0.1 + +# Redis 端口 [必填] +REDIS_PORT=6379 + +# Redis 索引 [必填] +REDIS_DBINDEX=0 + +# Redis 用户名 +REDIS_USERNAME= + +# Redis 密码 +REDIS_PASSWORD= + +# 机器学习 预加载模型 +MACHINE_LEARNING_PRELOAD__CLIP=XLM-Roberta-Large-Vit-B-16Plus + +# 人脸识别 预加载模型 +MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION=buffalo_l + +# Hugging Face 服务地址 +HF_ENDPOINT=https://hf-mirror.com + +# 是否跳过目录检查 +IMMICH_IGNORE_MOUNT_CHECK_ERRORS=false + diff --git a/appstore/immich/1.133.0/data.yml b/appstore/immich/1.133.0/data.yml new file mode 100644 index 000000000..5dafe3219 --- /dev/null +++ b/appstore/immich/1.133.0/data.yml @@ -0,0 +1,156 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_REDIS_SERVICE + required: true + type: service + default: redis + envKey: PANEL_REDIS_TYPE + labelZh: Redis 服务 (前置检查) + labelEn: Redis Service (Pre-check) + required: true + type: apps + values: + - label: Redis + value: redis + - default: "/home/immich-app" + edit: true + envKey: IMMICH_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 2283 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 3003 + edit: true + envKey: PANEL_APP_PORT_MACHINE_LEARNING + labelZh: 机器学习端口 + labelEn: Machine Learning port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: DB_PASSWORD + labelEn: Database Password + labelZh: 数据库连接密码 + random: true + required: true + rule: paramComplexity + type: password + - default: 5432 + edit: true + envKey: PANEL_APP_PORT_DB + labelZh: 数据库 端口 + labelEn: Database Port + required: true + rule: paramPort + type: number + - default: "immich-pg14-vectors" + disabled: true + envKey: DB_HOSTNAME + labelZh: 数据库 主机地址 + labelEn: Database Host + required: true + type: text + - default: "postgres" + disabled: true + envKey: DB_USERNAME + labelZh: 数据库 用户名 + labelEn: Database User + required: true + type: text + - default: "immich" + disabled: true + envKey: DB_DATABASE_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + type: text + - default: "127.0.0.1" + edit: true + envKey: REDIS_HOSTNAME + labelZh: Redis 主机 + labelEn: Redis Host + required: true + type: text + - default: 6379 + edit: true + envKey: REDIS_PORT + labelZh: Redis 端口 + labelEn: Redis Port + required: true + rule: paramPort + type: number + - default: 0 + edit: true + envKey: REDIS_DBINDEX + labelZh: Redis 索引 + labelEn: Redis Index + required: true + type: number + - default: "" + edit: true + envKey: REDIS_USERNAME + labelZh: Redis 用户名 + labelEn: Redis Username + required: false + type: text + - default: "" + edit: true + envKey: REDIS_PASSWORD + labelZh: Redis 密码 + labelEn: Redis Password + required: false + type: password + - default: "XLM-Roberta-Large-Vit-B-16Plus" + edit: true + envKey: MACHINE_LEARNING_PRELOAD__CLIP + labelEn: Machine Learning Preload Model + labelZh: 机器学习 预加载模型 + required: false + type: text + - default: "buffalo_l" + edit: true + envKey: MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION + labelEn: Machine Learning Preload Model + labelZh: 人脸识别 预加载模型 + required: false + type: select + values: + - label: antelopev2 + value: "antelopev2" + - label: buffalo_l + value: "buffalo_l" + - label: buffalo_m + value: "buffalo_m" + - label: buffalo_s + value: "buffalo_s" + - default: "https://hf-mirror.com" + edit: true + envKey: HF_ENDPOINT + labelZh: Hugging Face 服务地址 + labelEn: Hugging Face Endpoint + rule: paramExtUrl + required: false + type: text + - default: "false" + edit: true + envKey: IMMICH_IGNORE_MOUNT_CHECK_ERRORS + labelZh: 是否跳过目录检查 + labelEn: Skip Mount Check + required: false + type: select + values: + - label: 跳过检查 + value: "true" + - label: 不跳过检查 + value: "false" diff --git a/appstore/immich/1.133.0/docker-compose.yml b/appstore/immich/1.133.0/docker-compose.yml new file mode 100644 index 000000000..d9313baa3 --- /dev/null +++ b/appstore/immich/1.133.0/docker-compose.yml @@ -0,0 +1,58 @@ +name: immich +networks: + 1panel-network: + external: true +services: + immich-machine-learning: + container_name: immich-machine-learning-immich + devices: &id001 + - /dev/dri:/dev/dri + env_file: + - ./envs/global.env + - .env + image: ghcr.io/immich-app/immich-machine-learning:v1.133.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_MACHINE_LEARNING}:3003 + restart: always + volumes: + - ${IMMICH_ROOT_PATH}/data/cache:/cache + immich-pg14-vectors: + container_name: pg14-vectors-immich + environment: + POSTGRES_DB: ${DB_DATABASE_NAME:-immich} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${DB_PASSWORD} + POSTGRES_USER: ${DB_USERNAME:-postgres} + image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0-pgvectors0.2.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_DB:-5432}:5432 + restart: always + volumes: + - ${IMMICH_ROOT_PATH}/pg14/data:/var/lib/postgresql/data + immich-server: + container_name: immich-server-immich + depends_on: + - immich-pg14-vectors + devices: *id001 + env_file: + - ./envs/global.env + - .env + image: ghcr.io/immich-app/immich-server:v1.133.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:2283 + restart: always + volumes: + - ${IMMICH_ROOT_PATH}/data/library:/usr/src/app/upload + - /etc/localtime:/etc/localtime diff --git a/appstore/immich/1.133.0/envs/default.env b/appstore/immich/1.133.0/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/immich/1.133.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/immich/1.133.0/envs/global.env b/appstore/immich/1.133.0/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/immich/1.133.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/immich/1.133.0/scripts/init.sh b/appstore/immich/1.133.0/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/immich/1.133.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/immich/1.133.0/scripts/uninstall.sh b/appstore/immich/1.133.0/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/immich/1.133.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/immich/1.133.0/scripts/upgrade.sh b/appstore/immich/1.133.0/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/immich/1.133.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/dockge/bili-fetcher/.env b/dockge/bili-fetcher/.env new file mode 100644 index 000000000..5343acab9 --- /dev/null +++ b/dockge/bili-fetcher/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +BILI_FETCHER_ROOT_PATH=/home/bili-fetcher + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + diff --git a/dockge/bili-fetcher/docker-compose.yml b/dockge/bili-fetcher/docker-compose.yml new file mode 100644 index 000000000..50547078c --- /dev/null +++ b/dockge/bili-fetcher/docker-compose.yml @@ -0,0 +1,40 @@ +networks: + 1panel-network: + external: true +services: + bili-fetcher-api: + build: + context: https://github.com/2977094657/BilibiliHistoryFetcher.git + dockerfile: docker/Dockerfile.cpu + container_name: api-bili-fetcher + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + - DOCKER_ENV=true + image: bilibili-api:latest + networks: + - 1panel-network + restart: always + volumes: + - ${BILI_FETCHER_ROOT_PATH}/config:/app/config + - ${BILI_FETCHER_ROOT_PATH}/output:/app/output + bili-fetcher-web: + build: + context: https://github.com/2977094657/BiliHistoryFrontend.git + dockerfile: Dockerfile + container_name: bili-fetcher + depends_on: + - bili-fetcher-api + environment: + - BACKEND_URL=http://bili-fetcher-api:8899 + - TZ=Asia/Shanghai + image: bilibili-frontend:latest + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always diff --git a/dockge/bili-fetcher/envs/default.env b/dockge/bili-fetcher/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/dockge/bili-fetcher/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/bili-fetcher/envs/global.env b/dockge/bili-fetcher/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/dockge/bili-fetcher/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/dpanel-lite/docker-compose.yml b/dockge/dpanel-lite/docker-compose.yml index 203e95c6e..59260c11f 100644 --- a/dockge/dpanel-lite/docker-compose.yml +++ b/dockge/dpanel-lite/docker-compose.yml @@ -10,7 +10,7 @@ services: environment: - APP_NAME=${CONTAINER_NAME} - HTTPS_PROXY=${HTTP_PROXY} - image: dpanel/dpanel:1.6.4-lite + image: dpanel/dpanel:1.7.0-lite labels: createdBy: Apps networks: diff --git a/dockge/dpanel/docker-compose.yml b/dockge/dpanel/docker-compose.yml index f73ab6d09..599980786 100644 --- a/dockge/dpanel/docker-compose.yml +++ b/dockge/dpanel/docker-compose.yml @@ -10,7 +10,7 @@ services: environment: - APP_NAME=${CONTAINER_NAME} - HTTPS_PROXY=${HTTP_PROXY} - image: dpanel/dpanel:1.6.4 + image: dpanel/dpanel:1.7.0 labels: createdBy: Apps networks: diff --git a/dockge/immich-machine-learning/docker-compose.yml b/dockge/immich-machine-learning/docker-compose.yml index cbb6736ef..556391618 100644 --- a/dockge/immich-machine-learning/docker-compose.yml +++ b/dockge/immich-machine-learning/docker-compose.yml @@ -10,7 +10,7 @@ services: env_file: - ./envs/global.env - .env - image: ghcr.io/immich-app/immich-machine-learning:v1.131.2 + image: ghcr.io/immich-app/immich-machine-learning:v1.133.0 labels: createdBy: Apps networks: diff --git a/dockge/immich-machine-learning_1_132_3/.env b/dockge/immich-machine-learning_1_132_3/.env new file mode 100644 index 000000000..91116ad60 --- /dev/null +++ b/dockge/immich-machine-learning_1_132_3/.env @@ -0,0 +1,21 @@ +# 数据持久化路径 [必填] +IMMICH_ROOT_PATH=/home/immich-machine-learning + +# API 端口 [必填] +PANEL_APP_PORT_HTTP=2283 + +# 硬件驱动路径 [必填] +IMMICH_DRIVE_PATH=/dev/dri + +# 时区 [必填] +TZ=Asia/Shanghai + +# 机器学习 预加载模型 +MACHINE_LEARNING_PRELOAD__CLIP=XLM-Roberta-Large-Vit-B-16Plus + +# 人脸识别 预加载模型 +MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION=buffalo_l + +# Hugging Face 服务地址 +HF_ENDPOINT=https://hf-mirror.com + diff --git a/dockge/immich-machine-learning_1_132_3/docker-compose.yml b/dockge/immich-machine-learning_1_132_3/docker-compose.yml new file mode 100644 index 000000000..0c0530ffe --- /dev/null +++ b/dockge/immich-machine-learning_1_132_3/docker-compose.yml @@ -0,0 +1,22 @@ +name: immich-machine-learning +networks: + 1panel-network: + external: true +services: + immich-machine-learning: + container_name: immich-machine-learning-immich-machine-learning + devices: + - /dev/dri:/dev/dri + env_file: + - ./envs/global.env + - .env + image: ghcr.io/immich-app/immich-machine-learning:v1.132.3 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3003 + restart: always + volumes: + - ${IMMICH_ROOT_PATH}/data/cache:/cache diff --git a/dockge/immich-machine-learning_1_132_3/envs/default.env b/dockge/immich-machine-learning_1_132_3/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/dockge/immich-machine-learning_1_132_3/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/immich-machine-learning_1_132_3/envs/global.env b/dockge/immich-machine-learning_1_132_3/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/dockge/immich-machine-learning_1_132_3/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/immich-no-machine/docker-compose.yml b/dockge/immich-no-machine/docker-compose.yml index 0ad713e57..27a353edf 100644 --- a/dockge/immich-no-machine/docker-compose.yml +++ b/dockge/immich-no-machine/docker-compose.yml @@ -4,36 +4,13 @@ networks: external: true services: immich-pg14-vectors: - command: - - postgres - - -c - - shared_preload_libraries=vectors.so - - -c - - search_path="$$user", public, vectors - - -c - - logging_collector=on - - -c - - max_wal_size=2GB - - -c - - shared_buffers=512MB - - -c - - wal_compression=on container_name: pg14-vectors-immich-no-machine environment: POSTGRES_DB: ${DB_DATABASE_NAME:-immich} POSTGRES_INITDB_ARGS: --data-checksums POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_USER: ${DB_USERNAME:-postgres} - healthcheck: - interval: 5m - start_interval: 30s - start_period: 5m - test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' - || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' - --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), - 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ - "$$Chksum" = '0' ] || exit 1 - image: tensorchord/pgvecto-rs:pg14-v0.2.0 + image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0-pgvectors0.2.0 labels: createdBy: Apps networks: @@ -52,7 +29,7 @@ services: env_file: - ./envs/global.env - .env - image: ghcr.io/immich-app/immich-server:v1.132.3 + image: ghcr.io/immich-app/immich-server:v1.133.0 labels: createdBy: Apps networks: diff --git a/dockge/immich-no-machine_1_132_3/.env b/dockge/immich-no-machine_1_132_3/.env new file mode 100644 index 000000000..da1ba0f59 --- /dev/null +++ b/dockge/immich-no-machine_1_132_3/.env @@ -0,0 +1,42 @@ +# Redis 服务 (前置检查) [必填] +PANEL_REDIS_TYPE=redis + +# 数据持久化路径 [必填] +IMMICH_ROOT_PATH=/home/immich-app + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=2283 + +# 数据库连接密码 [必填] +DB_PASSWORD= + +# 数据库 端口 [必填] +PANEL_APP_PORT_DB=5432 + +# 数据库 主机地址 [必填] +DB_HOSTNAME=immich-pg14-vectors + +# 数据库 用户名 [必填] +DB_USERNAME=postgres + +# 数据库 名称 [必填] +DB_DATABASE_NAME=immich + +# Redis 主机 [必填] +REDIS_HOSTNAME=127.0.0.1 + +# Redis 端口 [必填] +REDIS_PORT=6379 + +# Redis 索引 [必填] +REDIS_DBINDEX=0 + +# Redis 用户名 +REDIS_USERNAME= + +# Redis 密码 +REDIS_PASSWORD= + +# 是否跳过目录检查 +IMMICH_IGNORE_MOUNT_CHECK_ERRORS=false + diff --git a/dockge/immich-no-machine_1_132_3/docker-compose.yml b/dockge/immich-no-machine_1_132_3/docker-compose.yml new file mode 100644 index 000000000..0ad713e57 --- /dev/null +++ b/dockge/immich-no-machine_1_132_3/docker-compose.yml @@ -0,0 +1,65 @@ +name: immich +networks: + 1panel-network: + external: true +services: + immich-pg14-vectors: + command: + - postgres + - -c + - shared_preload_libraries=vectors.so + - -c + - search_path="$$user", public, vectors + - -c + - logging_collector=on + - -c + - max_wal_size=2GB + - -c + - shared_buffers=512MB + - -c + - wal_compression=on + container_name: pg14-vectors-immich-no-machine + environment: + POSTGRES_DB: ${DB_DATABASE_NAME:-immich} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${DB_PASSWORD} + POSTGRES_USER: ${DB_USERNAME:-postgres} + healthcheck: + interval: 5m + start_interval: 30s + start_period: 5m + test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' + || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' + --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), + 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ + "$$Chksum" = '0' ] || exit 1 + image: tensorchord/pgvecto-rs:pg14-v0.2.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_DB:-5432}:5432 + restart: always + volumes: + - ${IMMICH_ROOT_PATH}/pg14/data:/var/lib/postgresql/data + immich-server: + container_name: immich-server-immich-no-machine + depends_on: + - immich-pg14-vectors + devices: + - /dev/dri:/dev/dri + env_file: + - ./envs/global.env + - .env + image: ghcr.io/immich-app/immich-server:v1.132.3 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:2283 + restart: always + volumes: + - ${IMMICH_ROOT_PATH}/data/library:/usr/src/app/upload + - /etc/localtime:/etc/localtime diff --git a/dockge/immich-no-machine_1_132_3/envs/default.env b/dockge/immich-no-machine_1_132_3/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/dockge/immich-no-machine_1_132_3/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/immich-no-machine_1_132_3/envs/global.env b/dockge/immich-no-machine_1_132_3/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/dockge/immich-no-machine_1_132_3/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/immich-server/docker-compose.yml b/dockge/immich-server/docker-compose.yml index 1f7695a07..39ac0b485 100644 --- a/dockge/immich-server/docker-compose.yml +++ b/dockge/immich-server/docker-compose.yml @@ -10,7 +10,7 @@ services: env_file: - ./envs/global.env - .env - image: ghcr.io/immich-app/immich-server:v1.132.3 + image: ghcr.io/immich-app/immich-server:v1.133.0 labels: createdBy: Apps networks: diff --git a/dockge/immich-server_1_132_3/.env b/dockge/immich-server_1_132_3/.env new file mode 100644 index 000000000..27aea5506 --- /dev/null +++ b/dockge/immich-server_1_132_3/.env @@ -0,0 +1,48 @@ +# Redis 服务 (前置检查) [必填] +PANEL_REDIS_TYPE=redis + +# Postgres 服务 (前置检查) [必填] +PANEL_POSTGRES_TYPE=postgresql + +# 数据持久化路径 [必填] +IMMICH_ROOT_PATH=/home/immich-app + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=2283 + +# 时区 [必填] +TZ=Asia/Shanghai + +# 数据库 主机地址 [必填] +DB_HOSTNAME=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 用户名 [必填] +DB_USERNAME=postgres + +# 数据库 密码 [必填] +DB_PASSWORD= + +# 数据库 名称 [必填] +DB_DATABASE_NAME=immich + +# Redis 主机 [必填] +REDIS_HOSTNAME=127.0.0.1 + +# Redis 端口 [必填] +REDIS_PORT=6379 + +# Redis 索引 [必填] +REDIS_DBINDEX=0 + +# Redis 用户名 +REDIS_USERNAME= + +# Redis 密码 +REDIS_PASSWORD= + +# 是否跳过目录检查 +IMMICH_IGNORE_MOUNT_CHECK_ERRORS=false + diff --git a/dockge/immich-server_1_132_3/docker-compose.yml b/dockge/immich-server_1_132_3/docker-compose.yml new file mode 100644 index 000000000..1f7695a07 --- /dev/null +++ b/dockge/immich-server_1_132_3/docker-compose.yml @@ -0,0 +1,23 @@ +name: immich-server +networks: + 1panel-network: + external: true +services: + immich-server: + container_name: immich-server-immich-server + devices: + - /dev/dri:/dev/dri + env_file: + - ./envs/global.env + - .env + image: ghcr.io/immich-app/immich-server:v1.132.3 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:2283 + restart: always + volumes: + - ${IMMICH_ROOT_PATH}/data/library:/usr/src/app/upload + - /etc/localtime:/etc/localtime diff --git a/dockge/immich-server_1_132_3/envs/default.env b/dockge/immich-server_1_132_3/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/dockge/immich-server_1_132_3/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/immich-server_1_132_3/envs/global.env b/dockge/immich-server_1_132_3/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/dockge/immich-server_1_132_3/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/immich/docker-compose.yml b/dockge/immich/docker-compose.yml index f013bfa12..d9313baa3 100644 --- a/dockge/immich/docker-compose.yml +++ b/dockge/immich/docker-compose.yml @@ -10,7 +10,7 @@ services: env_file: - ./envs/global.env - .env - image: ghcr.io/immich-app/immich-machine-learning:v1.131.2 + image: ghcr.io/immich-app/immich-machine-learning:v1.133.0 labels: createdBy: Apps networks: @@ -21,36 +21,13 @@ services: volumes: - ${IMMICH_ROOT_PATH}/data/cache:/cache immich-pg14-vectors: - command: - - postgres - - -c - - shared_preload_libraries=vectors.so - - -c - - search_path="$$user", public, vectors - - -c - - logging_collector=on - - -c - - max_wal_size=2GB - - -c - - shared_buffers=512MB - - -c - - wal_compression=on container_name: pg14-vectors-immich environment: POSTGRES_DB: ${DB_DATABASE_NAME:-immich} POSTGRES_INITDB_ARGS: --data-checksums POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_USER: ${DB_USERNAME:-postgres} - healthcheck: - interval: 5m - start_interval: 30s - start_period: 5m - test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' - || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' - --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), - 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ - "$$Chksum" = '0' ] || exit 1 - image: tensorchord/pgvecto-rs:pg14-v0.2.0 + image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0-pgvectors0.2.0 labels: createdBy: Apps networks: @@ -68,7 +45,7 @@ services: env_file: - ./envs/global.env - .env - image: ghcr.io/immich-app/immich-server:v1.132.3 + image: ghcr.io/immich-app/immich-server:v1.133.0 labels: createdBy: Apps networks: diff --git a/dockge/immich_1_132_3/.env b/dockge/immich_1_132_3/.env new file mode 100644 index 000000000..a4e4ae287 --- /dev/null +++ b/dockge/immich_1_132_3/.env @@ -0,0 +1,54 @@ +# Redis 服务 (前置检查) [必填] +PANEL_REDIS_TYPE=redis + +# 数据持久化路径 [必填] +IMMICH_ROOT_PATH=/home/immich-app + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=2283 + +# 机器学习端口 [必填] +PANEL_APP_PORT_MACHINE_LEARNING=3003 + +# 数据库连接密码 [必填] +DB_PASSWORD= + +# 数据库 端口 [必填] +PANEL_APP_PORT_DB=5432 + +# 数据库 主机地址 [必填] +DB_HOSTNAME=immich-pg14-vectors + +# 数据库 用户名 [必填] +DB_USERNAME=postgres + +# 数据库 名称 [必填] +DB_DATABASE_NAME=immich + +# Redis 主机 [必填] +REDIS_HOSTNAME=127.0.0.1 + +# Redis 端口 [必填] +REDIS_PORT=6379 + +# Redis 索引 [必填] +REDIS_DBINDEX=0 + +# Redis 用户名 +REDIS_USERNAME= + +# Redis 密码 +REDIS_PASSWORD= + +# 机器学习 预加载模型 +MACHINE_LEARNING_PRELOAD__CLIP=XLM-Roberta-Large-Vit-B-16Plus + +# 人脸识别 预加载模型 +MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION=buffalo_l + +# Hugging Face 服务地址 +HF_ENDPOINT=https://hf-mirror.com + +# 是否跳过目录检查 +IMMICH_IGNORE_MOUNT_CHECK_ERRORS=false + diff --git a/dockge/immich_1_132_3/docker-compose.yml b/dockge/immich_1_132_3/docker-compose.yml new file mode 100644 index 000000000..44a2398ec --- /dev/null +++ b/dockge/immich_1_132_3/docker-compose.yml @@ -0,0 +1,81 @@ +name: immich +networks: + 1panel-network: + external: true +services: + immich-machine-learning: + container_name: immich-machine-learning-immich + devices: &id001 + - /dev/dri:/dev/dri + env_file: + - ./envs/global.env + - .env + image: ghcr.io/immich-app/immich-machine-learning:v1.132.3 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_MACHINE_LEARNING}:3003 + restart: always + volumes: + - ${IMMICH_ROOT_PATH}/data/cache:/cache + immich-pg14-vectors: + command: + - postgres + - -c + - shared_preload_libraries=vectors.so + - -c + - search_path="$$user", public, vectors + - -c + - logging_collector=on + - -c + - max_wal_size=2GB + - -c + - shared_buffers=512MB + - -c + - wal_compression=on + container_name: pg14-vectors-immich + environment: + POSTGRES_DB: ${DB_DATABASE_NAME:-immich} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${DB_PASSWORD} + POSTGRES_USER: ${DB_USERNAME:-postgres} + healthcheck: + interval: 5m + start_interval: 30s + start_period: 5m + test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' + || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' + --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), + 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ + "$$Chksum" = '0' ] || exit 1 + image: tensorchord/pgvecto-rs:pg14-v0.2.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_DB:-5432}:5432 + restart: always + volumes: + - ${IMMICH_ROOT_PATH}/pg14/data:/var/lib/postgresql/data + immich-server: + container_name: immich-server-immich + depends_on: + - immich-pg14-vectors + devices: *id001 + env_file: + - ./envs/global.env + - .env + image: ghcr.io/immich-app/immich-server:v1.132.3 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:2283 + restart: always + volumes: + - ${IMMICH_ROOT_PATH}/data/library:/usr/src/app/upload + - /etc/localtime:/etc/localtime diff --git a/dockge/immich_1_132_3/envs/default.env b/dockge/immich_1_132_3/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/dockge/immich_1_132_3/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/immich_1_132_3/envs/global.env b/dockge/immich_1_132_3/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/dockge/immich_1_132_3/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai