From 275d5be6583a74b78bcfb61b210ea32d9ff74f19 Mon Sep 17 00:00:00 2001 From: QYG2297248353 Date: Thu, 28 Nov 2024 09:57:19 +0000 Subject: [PATCH] Processed apps directory via GitHub Actions --- appstore/acg-faka/1.3.8/.env | 6 + appstore/acg-faka/1.3.8/data.yml | 17 + appstore/acg-faka/1.3.8/docker-compose.yml | 19 + appstore/acg-faka/1.3.8/envs/default.env | 2 + appstore/acg-faka/1.3.8/envs/global.env | 2 + appstore/acg-faka/1.3.8/scripts/init.sh | 17 + appstore/acg-faka/1.3.8/scripts/uninstall.sh | 10 + appstore/acg-faka/1.3.8/scripts/upgrade.sh | 17 + appstore/acg-faka/README.md | 77 + appstore/acg-faka/data.yml | 15 + appstore/acg-faka/logo.png | Bin 0 -> 7947 bytes appstore/alist-aria2/3.40.0/.env | 30 + appstore/alist-aria2/3.40.0/data.yml | 74 + .../alist-aria2/3.40.0/docker-compose.yml | 27 + appstore/alist-aria2/3.40.0/envs/default.env | 2 + appstore/alist-aria2/3.40.0/envs/global.env | 2 + appstore/alist-aria2/3.40.0/scripts/init.sh | 17 + .../alist-aria2/3.40.0/scripts/uninstall.sh | 10 + .../alist-aria2/3.40.0/scripts/upgrade.sh | 17 + appstore/alist-aria2/README.md | 90 + appstore/alist-aria2/data.yml | 15 + appstore/alist-aria2/logo.png | Bin 0 -> 14831 bytes appstore/alist-ffmpeg/3.40.0/.env | 30 + appstore/alist-ffmpeg/3.40.0/data.yml | 74 + .../alist-ffmpeg/3.40.0/docker-compose.yml | 27 + appstore/alist-ffmpeg/3.40.0/envs/default.env | 2 + appstore/alist-ffmpeg/3.40.0/envs/global.env | 2 + appstore/alist-ffmpeg/3.40.0/scripts/init.sh | 17 + .../alist-ffmpeg/3.40.0/scripts/uninstall.sh | 10 + .../alist-ffmpeg/3.40.0/scripts/upgrade.sh | 17 + appstore/alist-ffmpeg/README.md | 90 + appstore/alist-ffmpeg/data.yml | 15 + appstore/alist-ffmpeg/logo.png | Bin 0 -> 14831 bytes appstore/alist/3.40.0/.env | 30 + appstore/alist/3.40.0/data.yml | 74 + appstore/alist/3.40.0/docker-compose.yml | 27 + appstore/alist/3.40.0/envs/default.env | 2 + appstore/alist/3.40.0/envs/global.env | 2 + appstore/alist/3.40.0/scripts/init.sh | 17 + appstore/alist/3.40.0/scripts/uninstall.sh | 10 + appstore/alist/3.40.0/scripts/upgrade.sh | 17 + appstore/alist/README.md | 88 + appstore/alist/data.yml | 15 + appstore/alist/logo.png | Bin 0 -> 14831 bytes appstore/ani-rss/1.1.202/.env | 15 + appstore/ani-rss/1.1.202/data.yml | 38 + appstore/ani-rss/1.1.202/docker-compose.yml | 28 + appstore/ani-rss/1.1.202/envs/default.env | 2 + appstore/ani-rss/1.1.202/envs/global.env | 2 + appstore/ani-rss/1.1.202/scripts/init.sh | 17 + appstore/ani-rss/1.1.202/scripts/uninstall.sh | 10 + appstore/ani-rss/1.1.202/scripts/upgrade.sh | 17 + appstore/ani-rss/README.md | 17 + appstore/ani-rss/data.yml | 15 + appstore/ani-rss/logo.png | Bin 0 -> 81124 bytes appstore/artalk/2.9.1/.env | 60 + appstore/artalk/2.9.1/data.yml | 187 ++ appstore/artalk/2.9.1/docker-compose.yml | 26 + appstore/artalk/2.9.1/envs/default.env | 2 + appstore/artalk/2.9.1/envs/global.env | 2 + appstore/artalk/2.9.1/scripts/init.sh | 30 + appstore/artalk/2.9.1/scripts/uninstall.sh | 10 + appstore/artalk/2.9.1/scripts/upgrade.sh | 30 + appstore/artalk/README.md | 95 + appstore/artalk/data.yml | 16 + appstore/artalk/logo.png | Bin 0 -> 9106 bytes appstore/auto-lady/1.1.202/.env | 15 + appstore/auto-lady/1.1.202/data.yml | 38 + appstore/auto-lady/1.1.202/docker-compose.yml | 22 + appstore/auto-lady/1.1.202/envs/default.env | 2 + appstore/auto-lady/1.1.202/envs/global.env | 2 + appstore/auto-lady/1.1.202/scripts/init.sh | 17 + .../auto-lady/1.1.202/scripts/uninstall.sh | 10 + appstore/auto-lady/1.1.202/scripts/upgrade.sh | 17 + appstore/auto-lady/README.md | 22 + appstore/auto-lady/data.yml | 15 + appstore/auto-lady/logo.png | Bin 0 -> 11652 bytes appstore/baota/9.0/.env | 27 + appstore/baota/9.0/data.yml | 81 + appstore/baota/9.0/docker-compose.yml | 26 + appstore/baota/9.0/envs/default.env | 2 + appstore/baota/9.0/envs/global.env | 2 + appstore/baota/9.0/scripts/init.sh | 17 + appstore/baota/9.0/scripts/uninstall.sh | 10 + appstore/baota/9.0/scripts/upgrade.sh | 17 + appstore/baota/README.md | 30 + appstore/baota/data.yml | 15 + appstore/baota/logo.png | Bin 0 -> 8280 bytes appstore/bark/2.1.5/.env | 15 + appstore/bark/2.1.5/data.yml | 38 + appstore/bark/2.1.5/docker-compose.yml | 24 + appstore/bark/2.1.5/envs/default.env | 2 + appstore/bark/2.1.5/envs/global.env | 2 + appstore/bark/2.1.5/scripts/init.sh | 17 + appstore/bark/2.1.5/scripts/uninstall.sh | 10 + appstore/bark/2.1.5/scripts/upgrade.sh | 17 + appstore/bark/README.md | 125 + appstore/bark/data.yml | 16 + appstore/bark/logo.png | Bin 0 -> 7260 bytes appstore/bitmagnet/0.9.5/.env | 33 + appstore/bitmagnet/0.9.5/data.yml | 97 + appstore/bitmagnet/0.9.5/docker-compose.yml | 36 + appstore/bitmagnet/0.9.5/envs/default.env | 2 + appstore/bitmagnet/0.9.5/envs/global.env | 2 + appstore/bitmagnet/0.9.5/scripts/init.sh | 17 + appstore/bitmagnet/0.9.5/scripts/uninstall.sh | 10 + appstore/bitmagnet/0.9.5/scripts/upgrade.sh | 17 + appstore/bitmagnet/README.md | 60 + appstore/bitmagnet/data.yml | 15 + appstore/bitmagnet/logo.png | Bin 0 -> 13804 bytes appstore/casdoor/1.758.0/.env | 45 + .../casdoor/1.758.0/config/init_data.json | 490 +++ appstore/casdoor/1.758.0/data.yml | 138 + appstore/casdoor/1.758.0/docker-compose.yml | 26 + appstore/casdoor/1.758.0/envs/casdoor.env | 31 + appstore/casdoor/1.758.0/envs/default.env | 2 + appstore/casdoor/1.758.0/envs/global.env | 2 + appstore/casdoor/1.758.0/scripts/init.sh | 33 + appstore/casdoor/1.758.0/scripts/uninstall.sh | 10 + appstore/casdoor/1.758.0/scripts/upgrade.sh | 19 + appstore/casdoor/README.md | 95 + appstore/casdoor/data.yml | 16 + appstore/casdoor/logo.png | Bin 0 -> 38624 bytes appstore/certimate/0.2.21/.env | 6 + appstore/certimate/0.2.21/data.yml | 17 + appstore/certimate/0.2.21/docker-compose.yml | 19 + appstore/certimate/0.2.21/envs/default.env | 2 + appstore/certimate/0.2.21/envs/global.env | 2 + appstore/certimate/0.2.21/scripts/init.sh | 17 + .../certimate/0.2.21/scripts/uninstall.sh | 10 + appstore/certimate/0.2.21/scripts/upgrade.sh | 17 + appstore/certimate/README.md | 58 + appstore/certimate/data.yml | 16 + appstore/certimate/logo.png | Bin 0 -> 17936 bytes appstore/cookie-cloud/README.md | 25 + appstore/cookie-cloud/data.yml | 16 + appstore/cookie-cloud/latest/.env | 9 + appstore/cookie-cloud/latest/data.yml | 24 + .../cookie-cloud/latest/docker-compose.yml | 19 + appstore/cookie-cloud/latest/envs/default.env | 2 + appstore/cookie-cloud/latest/envs/global.env | 2 + appstore/cookie-cloud/latest/scripts/init.sh | 17 + .../cookie-cloud/latest/scripts/uninstall.sh | 10 + .../cookie-cloud/latest/scripts/upgrade.sh | 17 + appstore/cookie-cloud/logo.png | Bin 0 -> 35850 bytes appstore/deeplx/0.9.8.3/.env | 15 + appstore/deeplx/0.9.8.3/data.yml | 39 + appstore/deeplx/0.9.8.3/docker-compose.yml | 19 + appstore/deeplx/0.9.8.3/envs/default.env | 2 + appstore/deeplx/0.9.8.3/envs/global.env | 2 + appstore/deeplx/0.9.8.3/scripts/init.sh | 17 + appstore/deeplx/0.9.8.3/scripts/uninstall.sh | 10 + appstore/deeplx/0.9.8.3/scripts/upgrade.sh | 17 + appstore/deeplx/README.md | 121 + appstore/deeplx/data.yml | 15 + appstore/deeplx/logo.png | Bin 0 -> 29851 bytes appstore/dockge/1.4.2/.env | 6 + appstore/dockge/1.4.2/data.yml | 17 + appstore/dockge/1.4.2/docker-compose.yml | 23 + appstore/dockge/1.4.2/envs/default.env | 2 + appstore/dockge/1.4.2/envs/global.env | 2 + appstore/dockge/1.4.2/scripts/init.sh | 17 + appstore/dockge/1.4.2/scripts/uninstall.sh | 10 + appstore/dockge/1.4.2/scripts/upgrade.sh | 17 + appstore/dockge/README.md | 25 + appstore/dockge/data.yml | 16 + appstore/dockge/logo.png | Bin 0 -> 28382 bytes appstore/dozzle/8.8.2/.env | 3 + appstore/dozzle/8.8.2/data.yml | 10 + appstore/dozzle/8.8.2/docker-compose.yml | 32 + appstore/dozzle/8.8.2/envs/default.env | 2 + appstore/dozzle/8.8.2/envs/global.env | 2 + appstore/dozzle/8.8.2/scripts/init.sh | 17 + appstore/dozzle/8.8.2/scripts/uninstall.sh | 10 + appstore/dozzle/8.8.2/scripts/upgrade.sh | 17 + appstore/dozzle/README.md | 33 + appstore/dozzle/data.yml | 16 + appstore/dozzle/logo.png | Bin 0 -> 7525 bytes appstore/dpanel-lite/1.3.0/.env | 12 + appstore/dpanel-lite/1.3.0/data.yml | 31 + appstore/dpanel-lite/1.3.0/docker-compose.yml | 33 + appstore/dpanel-lite/1.3.0/envs/default.env | 2 + appstore/dpanel-lite/1.3.0/envs/global.env | 2 + appstore/dpanel-lite/1.3.0/scripts/init.sh | 17 + .../dpanel-lite/1.3.0/scripts/uninstall.sh | 10 + appstore/dpanel-lite/1.3.0/scripts/upgrade.sh | 17 + appstore/dpanel-lite/README.md | 33 + appstore/dpanel-lite/data.yml | 15 + appstore/dpanel-lite/logo.png | Bin 0 -> 52633 bytes appstore/dpanel/1.3.0/.env | 18 + appstore/dpanel/1.3.0/data.yml | 47 + appstore/dpanel/1.3.0/docker-compose.yml | 35 + appstore/dpanel/1.3.0/envs/default.env | 2 + appstore/dpanel/1.3.0/envs/global.env | 2 + appstore/dpanel/1.3.0/scripts/init.sh | 17 + appstore/dpanel/1.3.0/scripts/uninstall.sh | 10 + appstore/dpanel/1.3.0/scripts/upgrade.sh | 17 + appstore/dpanel/README.md | 31 + appstore/dpanel/data.yml | 15 + appstore/dpanel/logo.png | Bin 0 -> 52633 bytes appstore/dujiaoka/2.0.9/.env | 30 + appstore/dujiaoka/2.0.9/data.yml | 89 + appstore/dujiaoka/2.0.9/docker-compose.yml | 31 + appstore/dujiaoka/2.0.9/envs/default.env | 2 + appstore/dujiaoka/2.0.9/envs/global.env | 2 + appstore/dujiaoka/2.0.9/scripts/init.sh | 17 + appstore/dujiaoka/2.0.9/scripts/uninstall.sh | 10 + appstore/dujiaoka/2.0.9/scripts/upgrade.sh | 17 + appstore/dujiaoka/README.md | 48 + appstore/dujiaoka/data.yml | 15 + appstore/dujiaoka/logo.png | Bin 0 -> 10149 bytes appstore/elastic-elasticsearch/8.16.1/.env | 24 + .../elastic-elasticsearch/8.16.1/data.yml | 60 + .../8.16.1/docker-compose.yml | 34 + .../8.16.1/envs/default.env | 2 + .../8.16.1/envs/global.env | 2 + .../8.16.1/scripts/init.sh | 23 + .../8.16.1/scripts/uninstall.sh | 10 + .../8.16.1/scripts/upgrade.sh | 17 + appstore/elastic-elasticsearch/README.md | 105 + appstore/elastic-elasticsearch/data.yml | 15 + appstore/elastic-elasticsearch/logo.png | Bin 0 -> 52594 bytes appstore/elastic-kibana/8.16.1/.env | 9 + appstore/elastic-kibana/8.16.1/data.yml | 24 + .../elastic-kibana/8.16.1/docker-compose.yml | 26 + .../elastic-kibana/8.16.1/envs/default.env | 2 + .../elastic-kibana/8.16.1/envs/global.env | 2 + .../elastic-kibana/8.16.1/scripts/init.sh | 22 + .../8.16.1/scripts/uninstall.sh | 10 + .../elastic-kibana/8.16.1/scripts/upgrade.sh | 17 + appstore/elastic-kibana/README.md | 58 + appstore/elastic-kibana/data.yml | 16 + appstore/elastic-kibana/logo.png | Bin 0 -> 36919 bytes appstore/element-web/1.11.86/.env | 9 + .../1.11.86/conf/config.sample.json | 53 + appstore/element-web/1.11.86/data.yml | 24 + .../element-web/1.11.86/docker-compose.yml | 19 + appstore/element-web/1.11.86/envs/default.env | 2 + appstore/element-web/1.11.86/envs/global.env | 2 + appstore/element-web/1.11.86/scripts/init.sh | 29 + .../element-web/1.11.86/scripts/uninstall.sh | 10 + .../element-web/1.11.86/scripts/upgrade.sh | 17 + appstore/element-web/README.md | 38 + appstore/element-web/data.yml | 14 + appstore/element-web/logo.png | Bin 0 -> 82981 bytes appstore/emby-amilys/4.8.9.0/.env | 21 + appstore/emby-amilys/4.8.9.0/data.yml | 61 + .../emby-amilys/4.8.9.0/docker-compose.yml | 30 + appstore/emby-amilys/4.8.9.0/envs/default.env | 2 + appstore/emby-amilys/4.8.9.0/envs/global.env | 2 + appstore/emby-amilys/4.8.9.0/scripts/init.sh | 17 + .../emby-amilys/4.8.9.0/scripts/uninstall.sh | 10 + .../emby-amilys/4.8.9.0/scripts/upgrade.sh | 17 + appstore/emby-amilys/README.md | 81 + appstore/emby-amilys/data.yml | 14 + appstore/emby-amilys/logo.png | Bin 0 -> 5482 bytes appstore/emby-lovechen/4.8.0.21/.env | 21 + appstore/emby-lovechen/4.8.0.21/data.yml | 61 + .../emby-lovechen/4.8.0.21/docker-compose.yml | 31 + .../emby-lovechen/4.8.0.21/envs/default.env | 2 + .../emby-lovechen/4.8.0.21/envs/global.env | 2 + .../emby-lovechen/4.8.0.21/scripts/init.sh | 17 + .../4.8.0.21/scripts/uninstall.sh | 10 + .../emby-lovechen/4.8.0.21/scripts/upgrade.sh | 17 + appstore/emby-lovechen/README.md | 64 + appstore/emby-lovechen/data.yml | 14 + appstore/emby-lovechen/logo.png | Bin 0 -> 5482 bytes appstore/emby/4.8.10.0/.env | 21 + appstore/emby/4.8.10.0/data.yml | 61 + appstore/emby/4.8.10.0/docker-compose.yml | 30 + appstore/emby/4.8.10.0/envs/default.env | 2 + appstore/emby/4.8.10.0/envs/global.env | 2 + appstore/emby/4.8.10.0/scripts/init.sh | 17 + appstore/emby/4.8.10.0/scripts/uninstall.sh | 10 + appstore/emby/4.8.10.0/scripts/upgrade.sh | 17 + appstore/emby/README.md | 49 + appstore/emby/data.yml | 15 + appstore/emby/logo.png | Bin 0 -> 5482 bytes appstore/ghost/5.101.4/.env | 48 + appstore/ghost/5.101.4/data.yml | 130 + appstore/ghost/5.101.4/docker-compose.yml | 26 + appstore/ghost/5.101.4/envs/default.env | 2 + appstore/ghost/5.101.4/envs/global.env | 2 + appstore/ghost/5.101.4/scripts/init.sh | 17 + appstore/ghost/5.101.4/scripts/uninstall.sh | 10 + appstore/ghost/5.101.4/scripts/upgrade.sh | 17 + appstore/ghost/README.md | 139 + appstore/ghost/data.yml | 14 + appstore/ghost/logo.png | Bin 0 -> 339175 bytes appstore/gitea-runner/0.2.11/.env | 15 + appstore/gitea-runner/0.2.11/data.yml | 37 + .../gitea-runner/0.2.11/docker-compose.yml | 21 + appstore/gitea-runner/0.2.11/envs/default.env | 2 + appstore/gitea-runner/0.2.11/envs/global.env | 2 + appstore/gitea-runner/0.2.11/scripts/init.sh | 10 + .../gitea-runner/0.2.11/scripts/uninstall.sh | 10 + .../gitea-runner/0.2.11/scripts/upgrade.sh | 10 + appstore/gitea-runner/README.md | 87 + appstore/gitea-runner/data.yml | 16 + appstore/gitea-runner/logo.png | Bin 0 -> 8022 bytes appstore/gitea/1.22.4/.env | 90 + appstore/gitea/1.22.4/config/app.example.ini | 2706 +++++++++++++++++ appstore/gitea/1.22.4/data.yml | 268 ++ appstore/gitea/1.22.4/docker-compose.yml | 43 + appstore/gitea/1.22.4/envs/default.env | 2 + appstore/gitea/1.22.4/envs/gitea.env | 36 + appstore/gitea/1.22.4/envs/global.env | 2 + appstore/gitea/1.22.4/scripts/init.sh | 19 + appstore/gitea/1.22.4/scripts/uninstall.sh | 10 + appstore/gitea/1.22.4/scripts/upgrade.sh | 19 + appstore/gitea/README.md | 152 + appstore/gitea/data.yml | 16 + appstore/gitea/logo.png | Bin 0 -> 8022 bytes appstore/halo/2.20.10/.env | 33 + appstore/halo/2.20.10/data.yml | 103 + appstore/halo/2.20.10/docker-compose.yml | 23 + appstore/halo/2.20.10/envs/default.env | 2 + appstore/halo/2.20.10/envs/global.env | 2 + appstore/halo/2.20.10/scripts/init.sh | 17 + appstore/halo/2.20.10/scripts/uninstall.sh | 10 + appstore/halo/2.20.10/scripts/upgrade.sh | 17 + appstore/halo/README.md | 79 + appstore/halo/data.yml | 14 + appstore/halo/logo.png | Bin 0 -> 7545 bytes appstore/iframely/2.4.3/.env | 9 + .../iframely/2.4.3/config/config.local.js | 231 ++ appstore/iframely/2.4.3/data.yml | 24 + appstore/iframely/2.4.3/docker-compose.yml | 24 + appstore/iframely/2.4.3/envs/default.env | 2 + appstore/iframely/2.4.3/envs/global.env | 2 + appstore/iframely/2.4.3/scripts/init.sh | 17 + appstore/iframely/2.4.3/scripts/uninstall.sh | 10 + appstore/iframely/2.4.3/scripts/upgrade.sh | 17 + appstore/iframely/README.md | 80 + appstore/iframely/data.yml | 15 + appstore/iframely/logo.png | Bin 0 -> 14374 bytes appstore/immich-machine-learning/1.121.0/.env | 21 + .../immich-machine-learning/1.121.0/data.yml | 61 + .../1.121.0/docker-compose.yml | 24 + .../1.121.0/envs/default.env | 2 + .../1.121.0/envs/global.env | 2 + .../1.121.0/scripts/init.sh | 17 + .../1.121.0/scripts/uninstall.sh | 10 + .../1.121.0/scripts/upgrade.sh | 17 + appstore/immich-machine-learning/README.md | 123 + appstore/immich-machine-learning/data.yml | 14 + appstore/immich-machine-learning/logo.png | Bin 0 -> 14868 bytes appstore/immich-server/1.121.0/.env | 48 + appstore/immich-server/1.121.0/data.yml | 138 + .../immich-server/1.121.0/docker-compose.yml | 25 + .../immich-server/1.121.0/envs/default.env | 2 + .../immich-server/1.121.0/envs/global.env | 2 + .../immich-server/1.121.0/scripts/init.sh | 17 + .../1.121.0/scripts/uninstall.sh | 10 + .../immich-server/1.121.0/scripts/upgrade.sh | 17 + appstore/immich-server/README.md | 123 + appstore/immich-server/data.yml | 15 + appstore/immich-server/logo.png | Bin 0 -> 14868 bytes appstore/immich/1.121.0/.env | 54 + appstore/immich/1.121.0/data.yml | 156 + appstore/immich/1.121.0/docker-compose.yml | 85 + appstore/immich/1.121.0/envs/default.env | 2 + appstore/immich/1.121.0/envs/global.env | 2 + appstore/immich/1.121.0/scripts/init.sh | 17 + appstore/immich/1.121.0/scripts/uninstall.sh | 10 + appstore/immich/1.121.0/scripts/upgrade.sh | 17 + appstore/immich/README.md | 123 + appstore/immich/data.yml | 16 + appstore/immich/logo.png | Bin 0 -> 14868 bytes appstore/iycms/3.3.44/.env | 9 + appstore/iycms/3.3.44/data.yml | 25 + appstore/iycms/3.3.44/docker-compose.yml | 20 + appstore/iycms/3.3.44/envs/default.env | 2 + appstore/iycms/3.3.44/envs/global.env | 2 + appstore/iycms/3.3.44/scripts/init.sh | 17 + appstore/iycms/3.3.44/scripts/uninstall.sh | 10 + appstore/iycms/3.3.44/scripts/upgrade.sh | 17 + appstore/iycms/README.md | 63 + appstore/iycms/data.yml | 14 + appstore/iycms/logo.png | Bin 0 -> 23675 bytes appstore/iyuu-plus/README.md | 91 + appstore/iyuu-plus/data.yml | 16 + appstore/iyuu-plus/latest/.env | 21 + appstore/iyuu-plus/latest/data.yml | 54 + appstore/iyuu-plus/latest/docker-compose.yml | 24 + appstore/iyuu-plus/latest/envs/default.env | 2 + appstore/iyuu-plus/latest/envs/global.env | 2 + appstore/iyuu-plus/latest/scripts/init.sh | 10 + .../iyuu-plus/latest/scripts/uninstall.sh | 10 + appstore/iyuu-plus/latest/scripts/upgrade.sh | 10 + appstore/iyuu-plus/logo.png | Bin 0 -> 56125 bytes appstore/jellyfin/10.10.3/.env | 21 + appstore/jellyfin/10.10.3/data.yml | 61 + appstore/jellyfin/10.10.3/docker-compose.yml | 30 + appstore/jellyfin/10.10.3/envs/default.env | 2 + appstore/jellyfin/10.10.3/envs/global.env | 2 + appstore/jellyfin/10.10.3/scripts/init.sh | 66 + .../jellyfin/10.10.3/scripts/uninstall.sh | 10 + appstore/jellyfin/10.10.3/scripts/upgrade.sh | 66 + appstore/jellyfin/10.9.11/.env | 21 + appstore/jellyfin/10.9.11/data.yml | 61 + appstore/jellyfin/10.9.11/docker-compose.yml | 30 + appstore/jellyfin/10.9.11/envs/default.env | 2 + appstore/jellyfin/10.9.11/envs/global.env | 2 + appstore/jellyfin/10.9.11/scripts/init.sh | 66 + .../jellyfin/10.9.11/scripts/uninstall.sh | 10 + appstore/jellyfin/10.9.11/scripts/upgrade.sh | 66 + appstore/jellyfin/README.md | 46 + appstore/jellyfin/data.yml | 15 + appstore/jellyfin/logo.png | Bin 0 -> 6534 bytes appstore/jellyseerr/2.1.0/.env | 12 + appstore/jellyseerr/2.1.0/data.yml | 36 + appstore/jellyseerr/2.1.0/docker-compose.yml | 24 + appstore/jellyseerr/2.1.0/envs/default.env | 2 + appstore/jellyseerr/2.1.0/envs/global.env | 2 + appstore/jellyseerr/2.1.0/scripts/init.sh | 17 + .../jellyseerr/2.1.0/scripts/uninstall.sh | 10 + appstore/jellyseerr/2.1.0/scripts/upgrade.sh | 17 + appstore/jellyseerr/README.md | 51 + appstore/jellyseerr/data.yml | 16 + appstore/jellyseerr/logo.png | Bin 0 -> 61449 bytes appstore/jproxy/3.4.4/.env | 27 + appstore/jproxy/3.4.4/data.yml | 70 + appstore/jproxy/3.4.4/docker-compose.yml | 23 + appstore/jproxy/3.4.4/envs/default.env | 2 + appstore/jproxy/3.4.4/envs/global.env | 2 + appstore/jproxy/3.4.4/scripts/init.sh | 17 + appstore/jproxy/3.4.4/scripts/uninstall.sh | 10 + appstore/jproxy/3.4.4/scripts/upgrade.sh | 17 + appstore/jproxy/README.md | 45 + appstore/jproxy/data.yml | 14 + appstore/jproxy/logo.png | Bin 0 -> 215273 bytes appstore/kimai/2.23.0/.env | 30 + appstore/kimai/2.23.0/data.yml | 89 + appstore/kimai/2.23.0/docker-compose.yml | 22 + appstore/kimai/2.23.0/envs/default.env | 2 + appstore/kimai/2.23.0/envs/global.env | 2 + appstore/kimai/2.23.0/scripts/init.sh | 17 + appstore/kimai/2.23.0/scripts/uninstall.sh | 10 + appstore/kimai/2.23.0/scripts/upgrade.sh | 17 + appstore/kimai/README.md | 22 + appstore/kimai/data.yml | 15 + appstore/kimai/logo.png | Bin 0 -> 97466 bytes appstore/limesurvey/6.6.5/.env | 42 + appstore/limesurvey/6.6.5/data.yml | 123 + appstore/limesurvey/6.6.5/docker-compose.yml | 22 + appstore/limesurvey/6.6.5/envs/default.env | 2 + appstore/limesurvey/6.6.5/envs/global.env | 2 + appstore/limesurvey/6.6.5/scripts/init.sh | 17 + .../limesurvey/6.6.5/scripts/uninstall.sh | 10 + appstore/limesurvey/6.6.5/scripts/upgrade.sh | 17 + appstore/limesurvey/README.md | 17 + appstore/limesurvey/data.yml | 15 + appstore/limesurvey/logo.png | Bin 0 -> 24448 bytes appstore/linkding/1.36.0/.env | 60 + appstore/linkding/1.36.0/data.yml | 168 + appstore/linkding/1.36.0/docker-compose.yml | 29 + appstore/linkding/1.36.0/envs/default.env | 2 + appstore/linkding/1.36.0/envs/global.env | 2 + appstore/linkding/1.36.0/scripts/init.sh | 17 + appstore/linkding/1.36.0/scripts/uninstall.sh | 10 + appstore/linkding/1.36.0/scripts/upgrade.sh | 17 + appstore/linkding/README.md | 50 + appstore/linkding/data.yml | 15 + appstore/linkding/logo.png | Bin 0 -> 25358 bytes appstore/maccms10/24.11.19/.env | 6 + appstore/maccms10/24.11.19/data.yml | 17 + appstore/maccms10/24.11.19/docker-compose.yml | 19 + appstore/maccms10/24.11.19/envs/default.env | 2 + appstore/maccms10/24.11.19/envs/global.env | 2 + appstore/maccms10/24.11.19/scripts/init.sh | 17 + .../maccms10/24.11.19/scripts/uninstall.sh | 10 + appstore/maccms10/24.11.19/scripts/upgrade.sh | 17 + appstore/maccms10/README.md | 55 + appstore/maccms10/data.yml | 14 + appstore/maccms10/logo.png | Bin 0 -> 165834 bytes appstore/macos/1.16/.env | 21 + appstore/macos/1.16/data.yml | 64 + appstore/macos/1.16/docker-compose.yml | 29 + appstore/macos/1.16/envs/default.env | 2 + appstore/macos/1.16/envs/global.env | 2 + appstore/macos/1.16/scripts/init.sh | 17 + appstore/macos/1.16/scripts/uninstall.sh | 10 + appstore/macos/1.16/scripts/upgrade.sh | 17 + appstore/macos/README.md | 66 + appstore/macos/data.yml | 14 + appstore/macos/logo.png | Bin 0 -> 5795 bytes appstore/mailserver/14.0.0/.env | 75 + appstore/mailserver/14.0.0/data.yml | 205 ++ appstore/mailserver/14.0.0/docker-compose.yml | 52 + appstore/mailserver/14.0.0/envs/default.env | 2 + appstore/mailserver/14.0.0/envs/global.env | 2 + .../mailserver/14.0.0/envs/mailserver.env | 661 ++++ appstore/mailserver/14.0.0/scripts/init.sh | 19 + .../mailserver/14.0.0/scripts/uninstall.sh | 10 + appstore/mailserver/14.0.0/scripts/upgrade.sh | 19 + appstore/mailserver/README.md | 138 + appstore/mailserver/data.yml | 14 + appstore/mailserver/logo.png | Bin 0 -> 24206 bytes appstore/mariadb/11.6.2/.env | 9 + appstore/mariadb/11.6.2/config/my.cnf | 30 + appstore/mariadb/11.6.2/data.yml | 24 + appstore/mariadb/11.6.2/docker-compose.yml | 20 + appstore/mariadb/11.6.2/envs/default.env | 2 + appstore/mariadb/11.6.2/envs/global.env | 2 + appstore/mariadb/11.6.2/scripts/init.sh | 25 + appstore/mariadb/11.6.2/scripts/uninstall.sh | 10 + appstore/mariadb/11.6.2/scripts/upgrade.sh | 17 + appstore/mariadb/README.md | 24 + appstore/mariadb/data.yml | 14 + appstore/mariadb/logo.png | Bin 0 -> 24460 bytes appstore/maxkb/1.7.2/.env | 6 + appstore/maxkb/1.7.2/data.yml | 17 + appstore/maxkb/1.7.2/docker-compose.yml | 21 + appstore/maxkb/1.7.2/envs/default.env | 2 + appstore/maxkb/1.7.2/envs/global.env | 2 + appstore/maxkb/1.7.2/scripts/init.sh | 17 + appstore/maxkb/1.7.2/scripts/uninstall.sh | 10 + appstore/maxkb/1.7.2/scripts/upgrade.sh | 17 + appstore/maxkb/README.md | 69 + appstore/maxkb/data.yml | 15 + appstore/maxkb/logo.png | Bin 0 -> 2141 bytes appstore/mcy-shop/5.0.17/.env | 6 + appstore/mcy-shop/5.0.17/data.yml | 17 + appstore/mcy-shop/5.0.17/docker-compose.yml | 19 + appstore/mcy-shop/5.0.17/envs/default.env | 2 + appstore/mcy-shop/5.0.17/envs/global.env | 2 + appstore/mcy-shop/5.0.17/scripts/init.sh | 17 + appstore/mcy-shop/5.0.17/scripts/uninstall.sh | 10 + appstore/mcy-shop/5.0.17/scripts/upgrade.sh | 17 + appstore/mcy-shop/README.md | 77 + appstore/mcy-shop/data.yml | 15 + appstore/mcy-shop/logo.png | Bin 0 -> 704720 bytes appstore/mediacms/4.1.0/.env | 45 + appstore/mediacms/4.1.0/data.yml | 126 + appstore/mediacms/4.1.0/docker-compose.yml | 77 + appstore/mediacms/4.1.0/envs/default.env | 2 + appstore/mediacms/4.1.0/envs/global.env | 2 + appstore/mediacms/4.1.0/scripts/init.sh | 17 + appstore/mediacms/4.1.0/scripts/uninstall.sh | 10 + appstore/mediacms/4.1.0/scripts/upgrade.sh | 17 + appstore/mediacms/README.md | 36 + appstore/mediacms/data.yml | 14 + appstore/mediacms/logo.png | Bin 0 -> 25355 bytes appstore/metatube-server/1.2.8/.env | 33 + appstore/metatube-server/1.2.8/data.yml | 91 + .../metatube-server/1.2.8/docker-compose.yml | 27 + .../metatube-server/1.2.8/envs/default.env | 2 + .../metatube-server/1.2.8/envs/global.env | 2 + .../metatube-server/1.2.8/scripts/init.sh | 17 + .../1.2.8/scripts/uninstall.sh | 10 + .../metatube-server/1.2.8/scripts/upgrade.sh | 17 + appstore/metatube-server/README.md | 87 + appstore/metatube-server/data.yml | 15 + appstore/metatube-server/logo.png | Bin 0 -> 81365 bytes appstore/minio/2024-11-07/.env | 36 + appstore/minio/2024-11-07/data.yml | 103 + appstore/minio/2024-11-07/docker-compose.yml | 34 + appstore/minio/2024-11-07/envs/default.env | 2 + appstore/minio/2024-11-07/envs/global.env | 2 + appstore/minio/2024-11-07/scripts/init.sh | 17 + .../minio/2024-11-07/scripts/uninstall.sh | 10 + appstore/minio/2024-11-07/scripts/upgrade.sh | 17 + appstore/minio/README.md | 72 + appstore/minio/data.yml | 17 + appstore/minio/logo.png | Bin 0 -> 6426 bytes appstore/movie-pilot/1.9.17/.env | 138 + appstore/movie-pilot/1.9.17/data.yml | 341 +++ .../movie-pilot/1.9.17/docker-compose.yml | 37 + appstore/movie-pilot/1.9.17/envs/default.env | 2 + appstore/movie-pilot/1.9.17/envs/global.env | 2 + .../movie-pilot/1.9.17/envs/movie-pilot.env | 53 + appstore/movie-pilot/1.9.17/scripts/init.sh | 19 + .../movie-pilot/1.9.17/scripts/uninstall.sh | 10 + .../movie-pilot/1.9.17/scripts/upgrade.sh | 18 + appstore/movie-pilot/2.1.0/.env | 33 + appstore/movie-pilot/2.1.0/data.yml | 87 + appstore/movie-pilot/2.1.0/docker-compose.yml | 39 + appstore/movie-pilot/2.1.0/envs/default.env | 2 + appstore/movie-pilot/2.1.0/envs/global.env | 2 + .../movie-pilot/2.1.0/envs/movie-pilot.env | 63 + appstore/movie-pilot/2.1.0/scripts/init.sh | 19 + .../movie-pilot/2.1.0/scripts/uninstall.sh | 10 + appstore/movie-pilot/2.1.0/scripts/upgrade.sh | 18 + appstore/movie-pilot/README.md | 127 + appstore/movie-pilot/data.yml | 14 + appstore/movie-pilot/logo.png | Bin 0 -> 19018 bytes appstore/mysql/5.7.44/.env | 9 + appstore/mysql/5.7.44/config/my.cnf | 42 + appstore/mysql/5.7.44/data.yml | 24 + appstore/mysql/5.7.44/docker-compose.yml | 29 + appstore/mysql/5.7.44/envs/default.env | 2 + appstore/mysql/5.7.44/envs/global.env | 2 + appstore/mysql/5.7.44/scripts/init.sh | 26 + appstore/mysql/5.7.44/scripts/uninstall.sh | 10 + appstore/mysql/5.7.44/scripts/upgrade.sh | 17 + appstore/mysql/8.4.3/.env | 9 + appstore/mysql/8.4.3/config/my.cnf | 20 + appstore/mysql/8.4.3/data.yml | 24 + appstore/mysql/8.4.3/docker-compose.yml | 28 + appstore/mysql/8.4.3/envs/default.env | 2 + appstore/mysql/8.4.3/envs/global.env | 2 + appstore/mysql/8.4.3/scripts/init.sh | 26 + appstore/mysql/8.4.3/scripts/uninstall.sh | 10 + appstore/mysql/8.4.3/scripts/upgrade.sh | 17 + appstore/mysql/README.md | 24 + appstore/mysql/data.yml | 14 + appstore/mysql/logo.png | Bin 0 -> 5788 bytes appstore/nacos/2.4.3/.env | 66 + appstore/nacos/2.4.3/data.yml | 185 ++ appstore/nacos/2.4.3/docker-compose.yml | 26 + appstore/nacos/2.4.3/envs/default.env | 2 + appstore/nacos/2.4.3/envs/global.env | 2 + appstore/nacos/2.4.3/init/mysql-schema.sql | 227 ++ appstore/nacos/2.4.3/scripts/init.sh | 26 + appstore/nacos/2.4.3/scripts/uninstall.sh | 10 + appstore/nacos/2.4.3/scripts/upgrade.sh | 17 + appstore/nacos/README.md | 89 + appstore/nacos/data.yml | 16 + appstore/nacos/logo.png | Bin 0 -> 34308 bytes appstore/nexusphp/1.8.16/.env | 18 + appstore/nexusphp/1.8.16/data.yml | 45 + appstore/nexusphp/1.8.16/docker-compose.yml | 23 + appstore/nexusphp/1.8.16/envs/default.env | 2 + appstore/nexusphp/1.8.16/envs/global.env | 2 + appstore/nexusphp/1.8.16/envs/nexusphp.env | 94 + appstore/nexusphp/1.8.16/scripts/init.sh | 36 + appstore/nexusphp/1.8.16/scripts/uninstall.sh | 10 + appstore/nexusphp/1.8.16/scripts/upgrade.sh | 17 + appstore/nexusphp/README.md | 98 + appstore/nexusphp/data.yml | 14 + appstore/nexusphp/logo.png | Bin 0 -> 6731 bytes appstore/nezha-dash/1.5.5/.env | 9 + appstore/nezha-dash/1.5.5/data.yml | 24 + appstore/nezha-dash/1.5.5/docker-compose.yml | 29 + appstore/nezha-dash/1.5.5/envs/default.env | 2 + appstore/nezha-dash/1.5.5/envs/global.env | 2 + appstore/nezha-dash/1.5.5/scripts/init.sh | 17 + .../nezha-dash/1.5.5/scripts/uninstall.sh | 10 + appstore/nezha-dash/1.5.5/scripts/upgrade.sh | 17 + appstore/nezha-dash/README.md | 19 + appstore/nezha-dash/data.yml | 15 + appstore/nezha-dash/logo.png | Bin 0 -> 10272 bytes appstore/nezha/0.20.13/.env | 33 + appstore/nezha/0.20.13/data.yml | 94 + .../nezha/0.20.13/data/config-example.yaml | 33 + appstore/nezha/0.20.13/docker-compose.yml | 20 + appstore/nezha/0.20.13/envs/default.env | 2 + appstore/nezha/0.20.13/envs/global.env | 2 + appstore/nezha/0.20.13/scripts/init.sh | 26 + appstore/nezha/0.20.13/scripts/uninstall.sh | 10 + appstore/nezha/0.20.13/scripts/upgrade.sh | 10 + appstore/nezha/README.md | 94 + appstore/nezha/data.yml | 15 + appstore/nezha/logo.png | Bin 0 -> 10105 bytes appstore/nginx-ui/2.0.0/.env | 30 + appstore/nginx-ui/2.0.0/data.yml | 74 + appstore/nginx-ui/2.0.0/docker-compose.yml | 35 + appstore/nginx-ui/2.0.0/envs/default.env | 2 + appstore/nginx-ui/2.0.0/envs/global.env | 2 + appstore/nginx-ui/2.0.0/scripts/init.sh | 17 + appstore/nginx-ui/2.0.0/scripts/uninstall.sh | 10 + appstore/nginx-ui/2.0.0/scripts/upgrade.sh | 17 + appstore/nginx-ui/README.md | 31 + appstore/nginx-ui/data.yml | 15 + appstore/nginx-ui/logo.png | Bin 0 -> 15618 bytes appstore/nocodb/0.258.3/.env | 57 + appstore/nocodb/0.258.3/data.yml | 159 + appstore/nocodb/0.258.3/docker-compose.yml | 29 + appstore/nocodb/0.258.3/envs/default.env | 2 + appstore/nocodb/0.258.3/envs/global.env | 2 + appstore/nocodb/0.258.3/scripts/init.sh | 17 + appstore/nocodb/0.258.3/scripts/uninstall.sh | 10 + appstore/nocodb/0.258.3/scripts/upgrade.sh | 17 + appstore/nocodb/README.md | 109 + appstore/nocodb/data.yml | 16 + appstore/nocodb/logo.png | Bin 0 -> 133740 bytes appstore/onedev/11.5.3/.env | 24 + appstore/onedev/11.5.3/data.yml | 64 + appstore/onedev/11.5.3/docker-compose.yml | 28 + appstore/onedev/11.5.3/envs/default.env | 2 + appstore/onedev/11.5.3/envs/global.env | 2 + appstore/onedev/11.5.3/envs/onedev.env | 29 + appstore/onedev/11.5.3/scripts/init.sh | 19 + appstore/onedev/11.5.3/scripts/uninstall.sh | 10 + appstore/onedev/11.5.3/scripts/upgrade.sh | 19 + appstore/onedev/README.md | 236 ++ appstore/onedev/data.yml | 15 + appstore/onedev/logo.png | Bin 0 -> 13332 bytes appstore/openfire/4.9.0/.env | 15 + appstore/openfire/4.9.0/data.yml | 41 + appstore/openfire/4.9.0/docker-compose.yml | 23 + appstore/openfire/4.9.0/envs/default.env | 2 + appstore/openfire/4.9.0/envs/global.env | 2 + appstore/openfire/4.9.0/scripts/init.sh | 17 + appstore/openfire/4.9.0/scripts/uninstall.sh | 10 + appstore/openfire/4.9.0/scripts/upgrade.sh | 17 + appstore/openfire/README.md | 19 + appstore/openfire/data.yml | 16 + appstore/openfire/logo.png | Bin 0 -> 50314 bytes appstore/outline/0.81.1/.env | 108 + appstore/outline/0.81.1/data.yml | 274 ++ appstore/outline/0.81.1/docker-compose.yml | 22 + appstore/outline/0.81.1/envs/default.env | 2 + appstore/outline/0.81.1/envs/global.env | 2 + appstore/outline/0.81.1/envs/outline.env | 224 ++ appstore/outline/0.81.1/scripts/init.sh | 25 + appstore/outline/0.81.1/scripts/uninstall.sh | 10 + appstore/outline/0.81.1/scripts/upgrade.sh | 21 + appstore/outline/README.md | 82 + appstore/outline/data.yml | 15 + appstore/outline/logo.png | Bin 0 -> 90301 bytes appstore/page-spy-web/1.9.6/.env | 6 + appstore/page-spy-web/1.9.6/data.yml | 17 + .../page-spy-web/1.9.6/docker-compose.yml | 20 + appstore/page-spy-web/1.9.6/envs/default.env | 2 + appstore/page-spy-web/1.9.6/envs/global.env | 2 + appstore/page-spy-web/1.9.6/scripts/init.sh | 17 + .../page-spy-web/1.9.6/scripts/uninstall.sh | 10 + .../page-spy-web/1.9.6/scripts/upgrade.sh | 17 + appstore/page-spy-web/README.md | 27 + appstore/page-spy-web/data.yml | 15 + appstore/page-spy-web/logo.png | Bin 0 -> 11255 bytes appstore/percona/8.0/.env | 9 + appstore/percona/8.0/config/my.cnf | 19 + appstore/percona/8.0/data.yml | 24 + appstore/percona/8.0/docker-compose.yml | 26 + appstore/percona/8.0/envs/default.env | 2 + appstore/percona/8.0/envs/global.env | 2 + appstore/percona/8.0/scripts/init.sh | 26 + appstore/percona/8.0/scripts/uninstall.sh | 10 + appstore/percona/8.0/scripts/upgrade.sh | 17 + appstore/percona/README.md | 18 + appstore/percona/data.yml | 14 + appstore/percona/logo.png | Bin 0 -> 5131 bytes appstore/photoprism/240915/.env | 60 + appstore/photoprism/240915/data.yml | 180 ++ appstore/photoprism/240915/docker-compose.yml | 38 + appstore/photoprism/240915/envs/default.env | 2 + appstore/photoprism/240915/envs/global.env | 2 + .../photoprism/240915/envs/photoprism.env | 25 + appstore/photoprism/240915/scripts/init.sh | 19 + .../photoprism/240915/scripts/uninstall.sh | 10 + appstore/photoprism/240915/scripts/upgrade.sh | 19 + appstore/photoprism/README.md | 122 + appstore/photoprism/data.yml | 15 + appstore/photoprism/logo.png | Bin 0 -> 30936 bytes appstore/pingvin-share/1.6.1/.env | 9 + appstore/pingvin-share/1.6.1/data.yml | 29 + .../pingvin-share/1.6.1/docker-compose.yml | 25 + appstore/pingvin-share/1.6.1/envs/default.env | 2 + appstore/pingvin-share/1.6.1/envs/global.env | 2 + appstore/pingvin-share/1.6.1/scripts/init.sh | 17 + .../pingvin-share/1.6.1/scripts/uninstall.sh | 10 + .../pingvin-share/1.6.1/scripts/upgrade.sh | 17 + appstore/pingvin-share/README.md | 20 + appstore/pingvin-share/data.yml | 14 + appstore/pingvin-share/logo.png | Bin 0 -> 87662 bytes appstore/pixman/1.8.2/.env | 12 + appstore/pixman/1.8.2/data.yml | 31 + appstore/pixman/1.8.2/docker-compose.yml | 22 + appstore/pixman/1.8.2/envs/default.env | 2 + appstore/pixman/1.8.2/envs/global.env | 2 + appstore/pixman/1.8.2/m3u/Adult.m3u | 50 + appstore/pixman/1.8.2/m3u/CCTV.m3u | 57 + appstore/pixman/1.8.2/m3u/CNTV.m3u | 171 ++ appstore/pixman/1.8.2/m3u/IPTV.m3u | 277 ++ appstore/pixman/1.8.2/scripts/init.sh | 22 + appstore/pixman/1.8.2/scripts/uninstall.sh | 10 + appstore/pixman/1.8.2/scripts/upgrade.sh | 22 + appstore/pixman/README.md | 133 + appstore/pixman/data.yml | 14 + appstore/pixman/logo.png | Bin 0 -> 158011 bytes appstore/postgresql/16.6-alpine/.env | 15 + appstore/postgresql/16.6-alpine/data.yml | 40 + .../postgresql/16.6-alpine/docker-compose.yml | 24 + .../postgresql/16.6-alpine/envs/default.env | 2 + .../postgresql/16.6-alpine/envs/global.env | 2 + .../postgresql/16.6-alpine/scripts/init.sh | 17 + .../16.6-alpine/scripts/uninstall.sh | 10 + .../postgresql/16.6-alpine/scripts/upgrade.sh | 17 + appstore/postgresql/16.6/.env | 15 + appstore/postgresql/16.6/data.yml | 40 + appstore/postgresql/16.6/docker-compose.yml | 24 + appstore/postgresql/16.6/envs/default.env | 2 + appstore/postgresql/16.6/envs/global.env | 2 + appstore/postgresql/16.6/scripts/init.sh | 17 + appstore/postgresql/16.6/scripts/uninstall.sh | 10 + appstore/postgresql/16.6/scripts/upgrade.sh | 17 + appstore/postgresql/17.2-alpine/.env | 15 + appstore/postgresql/17.2-alpine/data.yml | 40 + .../postgresql/17.2-alpine/docker-compose.yml | 24 + .../postgresql/17.2-alpine/envs/default.env | 2 + .../postgresql/17.2-alpine/envs/global.env | 2 + .../postgresql/17.2-alpine/scripts/init.sh | 17 + .../17.2-alpine/scripts/uninstall.sh | 10 + .../postgresql/17.2-alpine/scripts/upgrade.sh | 17 + appstore/postgresql/17.2/.env | 15 + appstore/postgresql/17.2/data.yml | 40 + appstore/postgresql/17.2/docker-compose.yml | 24 + appstore/postgresql/17.2/envs/default.env | 2 + appstore/postgresql/17.2/envs/global.env | 2 + appstore/postgresql/17.2/scripts/init.sh | 17 + appstore/postgresql/17.2/scripts/uninstall.sh | 10 + appstore/postgresql/17.2/scripts/upgrade.sh | 17 + appstore/postgresql/README.md | 50 + appstore/postgresql/data.yml | 14 + appstore/postgresql/logo.png | Bin 0 -> 4207 bytes appstore/postgresql/pg14-alpine/.env | 15 + appstore/postgresql/pg14-alpine/data.yml | 40 + .../postgresql/pg14-alpine/docker-compose.yml | 24 + .../postgresql/pg14-alpine/envs/default.env | 2 + .../postgresql/pg14-alpine/envs/global.env | 2 + .../postgresql/pg14-alpine/scripts/init.sh | 17 + .../pg14-alpine/scripts/uninstall.sh | 10 + .../postgresql/pg14-alpine/scripts/upgrade.sh | 17 + appstore/postgresql/pg14-vectors/.env | 15 + appstore/postgresql/pg14-vectors/data.yml | 40 + .../pg14-vectors/docker-compose.yml | 24 + .../postgresql/pg14-vectors/envs/default.env | 2 + .../postgresql/pg14-vectors/envs/global.env | 2 + .../postgresql/pg14-vectors/scripts/init.sh | 17 + .../pg14-vectors/scripts/uninstall.sh | 10 + .../pg14-vectors/scripts/upgrade.sh | 17 + appstore/postgresql/pg14/.env | 15 + appstore/postgresql/pg14/data.yml | 40 + appstore/postgresql/pg14/docker-compose.yml | 24 + appstore/postgresql/pg14/envs/default.env | 2 + appstore/postgresql/pg14/envs/global.env | 2 + appstore/postgresql/pg14/scripts/init.sh | 17 + appstore/postgresql/pg14/scripts/uninstall.sh | 10 + appstore/postgresql/pg14/scripts/upgrade.sh | 17 + appstore/postgresql/pg15-alpine/.env | 15 + appstore/postgresql/pg15-alpine/data.yml | 40 + .../postgresql/pg15-alpine/docker-compose.yml | 24 + .../postgresql/pg15-alpine/envs/default.env | 2 + .../postgresql/pg15-alpine/envs/global.env | 2 + .../postgresql/pg15-alpine/scripts/init.sh | 17 + .../pg15-alpine/scripts/uninstall.sh | 10 + .../postgresql/pg15-alpine/scripts/upgrade.sh | 17 + appstore/postgresql/pg15-vectors/.env | 15 + appstore/postgresql/pg15-vectors/data.yml | 40 + .../pg15-vectors/docker-compose.yml | 24 + .../postgresql/pg15-vectors/envs/default.env | 2 + .../postgresql/pg15-vectors/envs/global.env | 2 + .../postgresql/pg15-vectors/scripts/init.sh | 17 + .../pg15-vectors/scripts/uninstall.sh | 10 + .../pg15-vectors/scripts/upgrade.sh | 17 + appstore/postgresql/pg15/.env | 15 + appstore/postgresql/pg15/data.yml | 40 + appstore/postgresql/pg15/docker-compose.yml | 24 + appstore/postgresql/pg15/envs/default.env | 2 + appstore/postgresql/pg15/envs/global.env | 2 + appstore/postgresql/pg15/scripts/init.sh | 17 + appstore/postgresql/pg15/scripts/uninstall.sh | 10 + appstore/postgresql/pg15/scripts/upgrade.sh | 17 + appstore/postgresql/pg16-alpine/.env | 15 + appstore/postgresql/pg16-alpine/data.yml | 40 + .../postgresql/pg16-alpine/docker-compose.yml | 24 + .../postgresql/pg16-alpine/envs/default.env | 2 + .../postgresql/pg16-alpine/envs/global.env | 2 + .../postgresql/pg16-alpine/scripts/init.sh | 17 + .../pg16-alpine/scripts/uninstall.sh | 10 + .../postgresql/pg16-alpine/scripts/upgrade.sh | 17 + appstore/postgresql/pg16-vectors/.env | 15 + appstore/postgresql/pg16-vectors/data.yml | 40 + .../pg16-vectors/docker-compose.yml | 24 + .../postgresql/pg16-vectors/envs/default.env | 2 + .../postgresql/pg16-vectors/envs/global.env | 2 + .../postgresql/pg16-vectors/scripts/init.sh | 17 + .../pg16-vectors/scripts/uninstall.sh | 10 + .../pg16-vectors/scripts/upgrade.sh | 17 + appstore/postgresql/pg16/.env | 15 + appstore/postgresql/pg16/data.yml | 40 + appstore/postgresql/pg16/docker-compose.yml | 24 + appstore/postgresql/pg16/envs/default.env | 2 + appstore/postgresql/pg16/envs/global.env | 2 + appstore/postgresql/pg16/scripts/init.sh | 17 + appstore/postgresql/pg16/scripts/uninstall.sh | 10 + appstore/postgresql/pg16/scripts/upgrade.sh | 17 + appstore/prowlarr/1.27.0/.env | 6 + appstore/prowlarr/1.27.0/data.yml | 16 + appstore/prowlarr/1.27.0/docker-compose.yml | 24 + appstore/prowlarr/1.27.0/envs/default.env | 2 + appstore/prowlarr/1.27.0/envs/global.env | 2 + appstore/prowlarr/1.27.0/scripts/init.sh | 17 + appstore/prowlarr/1.27.0/scripts/uninstall.sh | 10 + appstore/prowlarr/1.27.0/scripts/upgrade.sh | 17 + appstore/prowlarr/README.md | 76 + appstore/prowlarr/data.yml | 15 + appstore/prowlarr/logo.png | Bin 0 -> 51331 bytes appstore/puff/0.2.2/.env | 6 + appstore/puff/0.2.2/data.yml | 17 + appstore/puff/0.2.2/docker-compose.yml | 19 + appstore/puff/0.2.2/envs/default.env | 2 + appstore/puff/0.2.2/envs/global.env | 2 + appstore/puff/0.2.2/scripts/init.sh | 17 + appstore/puff/0.2.2/scripts/uninstall.sh | 10 + appstore/puff/0.2.2/scripts/upgrade.sh | 17 + appstore/puff/README.md | 29 + appstore/puff/data.yml | 15 + appstore/puff/logo.png | Bin 0 -> 21227 bytes appstore/qbittorrent/4.6.7/.env | 21 + appstore/qbittorrent/4.6.7/data.yml | 62 + appstore/qbittorrent/4.6.7/docker-compose.yml | 29 + appstore/qbittorrent/4.6.7/envs/default.env | 2 + appstore/qbittorrent/4.6.7/envs/global.env | 2 + appstore/qbittorrent/4.6.7/scripts/init.sh | 10 + .../qbittorrent/4.6.7/scripts/uninstall.sh | 10 + appstore/qbittorrent/4.6.7/scripts/upgrade.sh | 10 + appstore/qbittorrent/5.0.2/.env | 21 + appstore/qbittorrent/5.0.2/data.yml | 62 + appstore/qbittorrent/5.0.2/docker-compose.yml | 29 + appstore/qbittorrent/5.0.2/envs/default.env | 2 + appstore/qbittorrent/5.0.2/envs/global.env | 2 + appstore/qbittorrent/5.0.2/scripts/init.sh | 10 + .../qbittorrent/5.0.2/scripts/uninstall.sh | 10 + appstore/qbittorrent/5.0.2/scripts/upgrade.sh | 10 + appstore/qbittorrent/README.md | 37 + appstore/qbittorrent/data.yml | 15 + appstore/qbittorrent/logo.png | Bin 0 -> 22398 bytes appstore/qinglong/2.17.12/.env | 9 + appstore/qinglong/2.17.12/data.yml | 24 + appstore/qinglong/2.17.12/docker-compose.yml | 19 + appstore/qinglong/2.17.12/envs/default.env | 2 + appstore/qinglong/2.17.12/envs/global.env | 2 + appstore/qinglong/2.17.12/scripts/init.sh | 10 + .../qinglong/2.17.12/scripts/uninstall.sh | 10 + appstore/qinglong/2.17.12/scripts/upgrade.sh | 10 + appstore/qinglong/README.md | 79 + appstore/qinglong/data.yml | 14 + appstore/qinglong/logo.png | Bin 0 -> 14354 bytes appstore/radarr/5.15.1/.env | 15 + appstore/radarr/5.15.1/data.yml | 37 + appstore/radarr/5.15.1/docker-compose.yml | 29 + appstore/radarr/5.15.1/envs/default.env | 2 + appstore/radarr/5.15.1/envs/global.env | 2 + appstore/radarr/5.15.1/scripts/init.sh | 17 + appstore/radarr/5.15.1/scripts/uninstall.sh | 10 + appstore/radarr/5.15.1/scripts/upgrade.sh | 17 + appstore/radarr/README.md | 78 + appstore/radarr/data.yml | 15 + appstore/radarr/logo.png | Bin 0 -> 27702 bytes appstore/reader3-webview/3.2.0/.env | 3 + appstore/reader3-webview/3.2.0/data.yml | 10 + .../reader3-webview/3.2.0/docker-compose.yml | 16 + .../reader3-webview/3.2.0/envs/default.env | 2 + .../reader3-webview/3.2.0/envs/global.env | 2 + .../reader3-webview/3.2.0/scripts/init.sh | 10 + .../3.2.0/scripts/uninstall.sh | 10 + .../reader3-webview/3.2.0/scripts/upgrade.sh | 10 + appstore/reader3-webview/README.md | 15 + appstore/reader3-webview/data.yml | 14 + appstore/reader3-webview/logo.png | Bin 0 -> 210648 bytes appstore/reader3/3.2.10/.env | 39 + appstore/reader3/3.2.10/data.yml | 119 + appstore/reader3/3.2.10/docker-compose.yml | 28 + appstore/reader3/3.2.10/envs/default.env | 2 + appstore/reader3/3.2.10/envs/global.env | 2 + appstore/reader3/3.2.10/scripts/init.sh | 17 + appstore/reader3/3.2.10/scripts/uninstall.sh | 10 + appstore/reader3/3.2.10/scripts/upgrade.sh | 17 + appstore/reader3/README.md | 107 + appstore/reader3/data.yml | 14 + appstore/reader3/logo.png | Bin 0 -> 210648 bytes appstore/redis/6.2.16/.env | 9 + appstore/redis/6.2.16/config/redis.conf | 1877 ++++++++++++ appstore/redis/6.2.16/data.yml | 23 + appstore/redis/6.2.16/docker-compose.yml | 21 + appstore/redis/6.2.16/envs/default.env | 2 + appstore/redis/6.2.16/envs/global.env | 2 + appstore/redis/6.2.16/scripts/init.sh | 18 + appstore/redis/6.2.16/scripts/uninstall.sh | 10 + appstore/redis/6.2.16/scripts/upgrade.sh | 10 + appstore/redis/7.4.1/.env | 9 + appstore/redis/7.4.1/config/redis.conf | 2276 ++++++++++++++ appstore/redis/7.4.1/data.yml | 23 + appstore/redis/7.4.1/docker-compose.yml | 21 + appstore/redis/7.4.1/envs/default.env | 2 + appstore/redis/7.4.1/envs/global.env | 2 + appstore/redis/7.4.1/scripts/init.sh | 18 + appstore/redis/7.4.1/scripts/uninstall.sh | 10 + appstore/redis/7.4.1/scripts/upgrade.sh | 10 + appstore/redis/README.md | 23 + appstore/redis/data.yml | 16 + appstore/redis/logo.png | Bin 0 -> 9262 bytes appstore/rsshub/2024-11-28/.env | 30 + appstore/rsshub/2024-11-28/data.yml | 78 + appstore/rsshub/2024-11-28/docker-compose.yml | 67 + appstore/rsshub/2024-11-28/envs/default.env | 2 + appstore/rsshub/2024-11-28/envs/global.env | 2 + appstore/rsshub/2024-11-28/scripts/init.sh | 17 + .../rsshub/2024-11-28/scripts/uninstall.sh | 10 + appstore/rsshub/2024-11-28/scripts/upgrade.sh | 17 + appstore/rsshub/README.md | 63 + appstore/rsshub/data.yml | 15 + appstore/rsshub/logo.png | Bin 0 -> 12581 bytes appstore/sentinel/1.8.8/.env | 18 + appstore/sentinel/1.8.8/data.yml | 60 + appstore/sentinel/1.8.8/docker-compose.yml | 26 + appstore/sentinel/1.8.8/envs/default.env | 2 + appstore/sentinel/1.8.8/envs/global.env | 2 + appstore/sentinel/1.8.8/scripts/init.sh | 17 + appstore/sentinel/1.8.8/scripts/uninstall.sh | 10 + appstore/sentinel/1.8.8/scripts/upgrade.sh | 17 + appstore/sentinel/README.md | 53 + appstore/sentinel/data.yml | 15 + appstore/sentinel/logo.png | Bin 0 -> 12548 bytes appstore/shiori/1.7.1/.env | 18 + appstore/shiori/1.7.1/data.yml | 63 + appstore/shiori/1.7.1/docker-compose.yml | 33 + appstore/shiori/1.7.1/envs/default.env | 2 + appstore/shiori/1.7.1/envs/global.env | 2 + appstore/shiori/1.7.1/scripts/init.sh | 17 + appstore/shiori/1.7.1/scripts/uninstall.sh | 10 + appstore/shiori/1.7.1/scripts/upgrade.sh | 17 + appstore/shiori/README.md | 64 + appstore/shiori/data.yml | 14 + appstore/shiori/logo.png | Bin 0 -> 19505 bytes appstore/siyuan/3.1.13/.env | 9 + appstore/siyuan/3.1.13/data.yml | 25 + appstore/siyuan/3.1.13/docker-compose.yml | 24 + appstore/siyuan/3.1.13/envs/default.env | 2 + appstore/siyuan/3.1.13/envs/global.env | 2 + appstore/siyuan/3.1.13/scripts/init.sh | 20 + appstore/siyuan/3.1.13/scripts/uninstall.sh | 10 + appstore/siyuan/3.1.13/scripts/upgrade.sh | 10 + appstore/siyuan/README.md | 54 + appstore/siyuan/data.yml | 15 + appstore/siyuan/logo.png | Bin 0 -> 1589 bytes appstore/slink/1.2.1/.env | 42 + appstore/slink/1.2.1/data.yml | 148 + appstore/slink/1.2.1/docker-compose.yml | 25 + appstore/slink/1.2.1/envs/default.env | 2 + appstore/slink/1.2.1/envs/global.env | 2 + appstore/slink/1.2.1/scripts/init.sh | 17 + appstore/slink/1.2.1/scripts/uninstall.sh | 10 + appstore/slink/1.2.1/scripts/upgrade.sh | 17 + appstore/slink/README.md | 65 + appstore/slink/data.yml | 15 + appstore/slink/logo.png | Bin 0 -> 158427 bytes appstore/sonarr/4.0.11/.env | 15 + appstore/sonarr/4.0.11/data.yml | 37 + appstore/sonarr/4.0.11/docker-compose.yml | 29 + appstore/sonarr/4.0.11/envs/default.env | 2 + appstore/sonarr/4.0.11/envs/global.env | 2 + appstore/sonarr/4.0.11/scripts/init.sh | 17 + appstore/sonarr/4.0.11/scripts/uninstall.sh | 10 + appstore/sonarr/4.0.11/scripts/upgrade.sh | 17 + appstore/sonarr/README.md | 72 + appstore/sonarr/data.yml | 15 + appstore/sonarr/logo.png | Bin 0 -> 35690 bytes appstore/speedtest-tracker-sqlite/0.24.3/.env | 57 + .../speedtest-tracker-sqlite/0.24.3/data.yml | 150 + .../0.24.3/docker-compose.yml | 25 + .../0.24.3/envs/default.env | 2 + .../0.24.3/envs/global.env | 2 + .../0.24.3/scripts/init.sh | 17 + .../0.24.3/scripts/uninstall.sh | 10 + .../0.24.3/scripts/upgrade.sh | 17 + appstore/speedtest-tracker-sqlite/README.md | 25 + appstore/speedtest-tracker-sqlite/data.yml | 15 + appstore/speedtest-tracker-sqlite/logo.png | Bin 0 -> 11283 bytes appstore/speedtest-tracker/0.24.3/.env | 78 + appstore/speedtest-tracker/0.24.3/data.yml | 221 ++ .../0.24.3/docker-compose.yml | 23 + .../speedtest-tracker/0.24.3/envs/default.env | 2 + .../speedtest-tracker/0.24.3/envs/global.env | 2 + .../speedtest-tracker/0.24.3/scripts/init.sh | 17 + .../0.24.3/scripts/uninstall.sh | 10 + .../0.24.3/scripts/upgrade.sh | 17 + appstore/speedtest-tracker/README.md | 25 + appstore/speedtest-tracker/data.yml | 15 + appstore/speedtest-tracker/logo.png | Bin 0 -> 11283 bytes appstore/speedtest/5.4.1/.env | 33 + appstore/speedtest/5.4.1/data.yml | 100 + appstore/speedtest/5.4.1/docker-compose.yml | 22 + appstore/speedtest/5.4.1/envs/default.env | 2 + appstore/speedtest/5.4.1/envs/global.env | 2 + appstore/speedtest/5.4.1/scripts/init.sh | 17 + appstore/speedtest/5.4.1/scripts/uninstall.sh | 10 + appstore/speedtest/5.4.1/scripts/upgrade.sh | 17 + appstore/speedtest/README.md | 56 + appstore/speedtest/data.yml | 15 + appstore/speedtest/logo.png | Bin 0 -> 60920 bytes appstore/stream-rec-backend/0.7.2/.env | 12 + appstore/stream-rec-backend/0.7.2/data.yml | 32 + .../0.7.2/docker-compose.yml | 24 + .../stream-rec-backend/0.7.2/envs/default.env | 2 + .../stream-rec-backend/0.7.2/envs/global.env | 2 + .../stream-rec-backend/0.7.2/scripts/init.sh | 17 + .../0.7.2/scripts/uninstall.sh | 10 + .../0.7.2/scripts/upgrade.sh | 17 + appstore/stream-rec-backend/README.md | 72 + appstore/stream-rec-backend/data.yml | 14 + appstore/stream-rec-backend/logo.png | Bin 0 -> 9641 bytes appstore/stream-rec-frontend/0.7.2/.env | 18 + appstore/stream-rec-frontend/0.7.2/data.yml | 46 + .../0.7.2/docker-compose.yml | 17 + .../0.7.2/envs/default.env | 2 + .../stream-rec-frontend/0.7.2/envs/global.env | 2 + .../stream-rec-frontend/0.7.2/scripts/init.sh | 17 + .../0.7.2/scripts/uninstall.sh | 10 + .../0.7.2/scripts/upgrade.sh | 17 + appstore/stream-rec-frontend/README.md | 72 + appstore/stream-rec-frontend/data.yml | 15 + appstore/stream-rec-frontend/logo.png | Bin 0 -> 9641 bytes appstore/stream-rec/0.7.2/.env | 27 + appstore/stream-rec/0.7.2/data.yml | 69 + appstore/stream-rec/0.7.2/docker-compose.yml | 39 + appstore/stream-rec/0.7.2/envs/default.env | 2 + appstore/stream-rec/0.7.2/envs/global.env | 2 + appstore/stream-rec/0.7.2/scripts/init.sh | 17 + .../stream-rec/0.7.2/scripts/uninstall.sh | 10 + appstore/stream-rec/0.7.2/scripts/upgrade.sh | 17 + appstore/stream-rec/README.md | 72 + appstore/stream-rec/data.yml | 15 + appstore/stream-rec/logo.png | Bin 0 -> 9641 bytes appstore/sun-panel/1.6.0/.env | 6 + appstore/sun-panel/1.6.0/data.yml | 17 + appstore/sun-panel/1.6.0/docker-compose.yml | 22 + appstore/sun-panel/1.6.0/envs/default.env | 2 + appstore/sun-panel/1.6.0/envs/global.env | 2 + appstore/sun-panel/1.6.0/scripts/init.sh | 17 + appstore/sun-panel/1.6.0/scripts/uninstall.sh | 10 + appstore/sun-panel/1.6.0/scripts/upgrade.sh | 17 + appstore/sun-panel/README.md | 30 + appstore/sun-panel/data.yml | 14 + appstore/sun-panel/logo.png | Bin 0 -> 63259 bytes appstore/synapse-admin/0.10.3/.env | 3 + appstore/synapse-admin/0.10.3/data.yml | 10 + .../synapse-admin/0.10.3/docker-compose.yml | 17 + .../synapse-admin/0.10.3/envs/default.env | 2 + appstore/synapse-admin/0.10.3/envs/global.env | 2 + appstore/synapse-admin/0.10.3/scripts/init.sh | 17 + .../synapse-admin/0.10.3/scripts/uninstall.sh | 10 + .../synapse-admin/0.10.3/scripts/upgrade.sh | 17 + appstore/synapse-admin/README.md | 19 + appstore/synapse-admin/data.yml | 15 + appstore/synapse-admin/logo.png | Bin 0 -> 82981 bytes appstore/synapse/1.120.0/.env | 9 + appstore/synapse/1.120.0/data.yml | 24 + appstore/synapse/1.120.0/docker-compose.yml | 39 + appstore/synapse/1.120.0/envs/default.env | 2 + appstore/synapse/1.120.0/envs/global.env | 2 + appstore/synapse/1.120.0/scripts/init.sh | 17 + appstore/synapse/1.120.0/scripts/uninstall.sh | 10 + appstore/synapse/1.120.0/scripts/upgrade.sh | 17 + appstore/synapse/README.md | 82 + appstore/synapse/data.yml | 15 + appstore/synapse/logo.png | Bin 0 -> 82981 bytes appstore/tangsengdaodao/1.5/.env | 81 + appstore/tangsengdaodao/1.5/data.yml | 222 ++ .../tangsengdaodao/1.5/docker-compose.yml | 93 + appstore/tangsengdaodao/1.5/envs/default.env | 2 + appstore/tangsengdaodao/1.5/envs/global.env | 2 + appstore/tangsengdaodao/1.5/scripts/init.sh | 17 + .../tangsengdaodao/1.5/scripts/uninstall.sh | 10 + .../tangsengdaodao/1.5/scripts/upgrade.sh | 17 + appstore/tangsengdaodao/README.md | 78 + appstore/tangsengdaodao/data.yml | 15 + appstore/tangsengdaodao/logo.png | Bin 0 -> 247475 bytes appstore/teemii/0.8.2/.env | 9 + appstore/teemii/0.8.2/data.yml | 24 + appstore/teemii/0.8.2/docker-compose.yml | 35 + appstore/teemii/0.8.2/envs/default.env | 2 + appstore/teemii/0.8.2/envs/global.env | 2 + appstore/teemii/0.8.2/scripts/init.sh | 17 + appstore/teemii/0.8.2/scripts/uninstall.sh | 10 + appstore/teemii/0.8.2/scripts/upgrade.sh | 17 + appstore/teemii/README.md | 28 + appstore/teemii/data.yml | 14 + appstore/teemii/logo.png | Bin 0 -> 37942 bytes appstore/telegram-bot-api/8.0/.env | 18 + appstore/telegram-bot-api/8.0/data.yml | 46 + .../telegram-bot-api/8.0/docker-compose.yml | 28 + .../telegram-bot-api/8.0/envs/default.env | 2 + appstore/telegram-bot-api/8.0/envs/global.env | 2 + appstore/telegram-bot-api/8.0/scripts/init.sh | 17 + .../telegram-bot-api/8.0/scripts/uninstall.sh | 10 + .../telegram-bot-api/8.0/scripts/upgrade.sh | 17 + appstore/telegram-bot-api/README.md | 46 + appstore/telegram-bot-api/data.yml | 15 + appstore/telegram-bot-api/logo.png | Bin 0 -> 12125 bytes appstore/traccar/6.5/.env | 6 + appstore/traccar/6.5/conf/traccar.xml | 12 + appstore/traccar/6.5/data.yml | 17 + appstore/traccar/6.5/docker-compose.yml | 21 + appstore/traccar/6.5/envs/default.env | 2 + appstore/traccar/6.5/envs/global.env | 2 + appstore/traccar/6.5/scripts/init.sh | 19 + appstore/traccar/6.5/scripts/uninstall.sh | 10 + appstore/traccar/6.5/scripts/upgrade.sh | 17 + appstore/traccar/README.md | 136 + appstore/traccar/data.yml | 15 + appstore/traccar/logo.png | Bin 0 -> 22009 bytes appstore/transmission/4.0.6/.env | 36 + appstore/transmission/4.0.6/data.yml | 97 + .../transmission/4.0.6/docker-compose.yml | 30 + appstore/transmission/4.0.6/envs/default.env | 2 + appstore/transmission/4.0.6/envs/global.env | 2 + appstore/transmission/4.0.6/scripts/init.sh | 17 + .../transmission/4.0.6/scripts/uninstall.sh | 10 + .../transmission/4.0.6/scripts/upgrade.sh | 17 + appstore/transmission/README.md | 15 + appstore/transmission/data.yml | 15 + appstore/transmission/logo.png | Bin 0 -> 84323 bytes appstore/umami-mysql/2.14.0/.env | 36 + appstore/umami-mysql/2.14.0/data.yml | 109 + .../umami-mysql/2.14.0/docker-compose.yml | 23 + appstore/umami-mysql/2.14.0/envs/default.env | 2 + appstore/umami-mysql/2.14.0/envs/global.env | 2 + appstore/umami-mysql/2.14.0/scripts/init.sh | 17 + .../umami-mysql/2.14.0/scripts/uninstall.sh | 10 + .../umami-mysql/2.14.0/scripts/upgrade.sh | 17 + appstore/umami-mysql/README.md | 142 + appstore/umami-mysql/data.yml | 17 + appstore/umami-mysql/logo.png | Bin 0 -> 9458 bytes appstore/umami/2.14.0/.env | 36 + appstore/umami/2.14.0/data.yml | 104 + appstore/umami/2.14.0/docker-compose.yml | 22 + appstore/umami/2.14.0/envs/default.env | 2 + appstore/umami/2.14.0/envs/global.env | 2 + appstore/umami/2.14.0/scripts/init.sh | 17 + appstore/umami/2.14.0/scripts/uninstall.sh | 10 + appstore/umami/2.14.0/scripts/upgrade.sh | 17 + appstore/umami/README.md | 148 + appstore/umami/data.yml | 17 + appstore/umami/logo.png | Bin 0 -> 9458 bytes appstore/uptime-kuma/1.23.15/.env | 12 + appstore/uptime-kuma/1.23.15/data.yml | 36 + .../uptime-kuma/1.23.15/docker-compose.yml | 29 + appstore/uptime-kuma/1.23.15/envs/default.env | 2 + appstore/uptime-kuma/1.23.15/envs/global.env | 2 + appstore/uptime-kuma/1.23.15/scripts/init.sh | 17 + .../uptime-kuma/1.23.15/scripts/uninstall.sh | 10 + .../uptime-kuma/1.23.15/scripts/upgrade.sh | 17 + appstore/uptime-kuma/2.0.0/.env | 6 + appstore/uptime-kuma/2.0.0/data.yml | 17 + appstore/uptime-kuma/2.0.0/docker-compose.yml | 20 + appstore/uptime-kuma/2.0.0/envs/default.env | 2 + appstore/uptime-kuma/2.0.0/envs/global.env | 2 + appstore/uptime-kuma/2.0.0/scripts/init.sh | 17 + .../uptime-kuma/2.0.0/scripts/uninstall.sh | 10 + appstore/uptime-kuma/2.0.0/scripts/upgrade.sh | 17 + appstore/uptime-kuma/README.md | 25 + appstore/uptime-kuma/data.yml | 15 + appstore/uptime-kuma/logo.png | Bin 0 -> 6271 bytes appstore/watchyourlan/2.0.4/.env | 33 + appstore/watchyourlan/2.0.4/data.yml | 108 + .../watchyourlan/2.0.4/docker-compose.yml | 22 + appstore/watchyourlan/2.0.4/envs/default.env | 2 + appstore/watchyourlan/2.0.4/envs/global.env | 2 + appstore/watchyourlan/2.0.4/scripts/init.sh | 17 + .../watchyourlan/2.0.4/scripts/uninstall.sh | 10 + .../watchyourlan/2.0.4/scripts/upgrade.sh | 17 + appstore/watchyourlan/README.md | 20 + appstore/watchyourlan/data.yml | 15 + appstore/watchyourlan/logo.png | Bin 0 -> 20627 bytes appstore/windows/4.05/.env | 39 + appstore/windows/4.05/data.yml | 204 ++ appstore/windows/4.05/docker-compose.yml | 33 + appstore/windows/4.05/envs/default.env | 2 + appstore/windows/4.05/envs/global.env | 2 + appstore/windows/4.05/scripts/init.sh | 17 + appstore/windows/4.05/scripts/uninstall.sh | 10 + appstore/windows/4.05/scripts/upgrade.sh | 17 + appstore/windows/README.md | 106 + appstore/windows/data.yml | 14 + appstore/windows/logo.png | Bin 0 -> 15096 bytes appstore/wiseflow/0.3.0/.env | 27 + appstore/wiseflow/0.3.0/data.yml | 68 + appstore/wiseflow/0.3.0/docker-compose.yml | 28 + appstore/wiseflow/0.3.0/envs/default.env | 2 + appstore/wiseflow/0.3.0/envs/global.env | 2 + appstore/wiseflow/0.3.0/scripts/init.sh | 17 + appstore/wiseflow/0.3.0/scripts/uninstall.sh | 10 + appstore/wiseflow/0.3.0/scripts/upgrade.sh | 17 + appstore/wiseflow/README.md | 72 + appstore/wiseflow/data.yml | 15 + appstore/wiseflow/logo.png | Bin 0 -> 19159 bytes appstore/wukongim/1.2.6/.env | 21 + appstore/wukongim/1.2.6/data.yml | 47 + appstore/wukongim/1.2.6/docker-compose.yml | 25 + appstore/wukongim/1.2.6/envs/default.env | 2 + appstore/wukongim/1.2.6/envs/global.env | 2 + appstore/wukongim/1.2.6/scripts/init.sh | 17 + appstore/wukongim/1.2.6/scripts/uninstall.sh | 10 + appstore/wukongim/1.2.6/scripts/upgrade.sh | 17 + appstore/wukongim/README.md | 115 + appstore/wukongim/data.yml | 15 + appstore/wukongim/logo.png | Bin 0 -> 26517 bytes appstore/xunlei-cnk3x/3.20.2/.env | 12 + appstore/xunlei-cnk3x/3.20.2/data.yml | 34 + .../xunlei-cnk3x/3.20.2/docker-compose.yml | 30 + appstore/xunlei-cnk3x/3.20.2/envs/default.env | 2 + appstore/xunlei-cnk3x/3.20.2/envs/global.env | 2 + appstore/xunlei-cnk3x/3.20.2/scripts/init.sh | 17 + .../xunlei-cnk3x/3.20.2/scripts/uninstall.sh | 10 + .../xunlei-cnk3x/3.20.2/scripts/upgrade.sh | 17 + appstore/xunlei-cnk3x/README.md | 49 + appstore/xunlei-cnk3x/data.yml | 15 + appstore/xunlei-cnk3x/logo.png | Bin 0 -> 3876 bytes appstore/yarr/2.4.0/.env | 6 + appstore/yarr/2.4.0/data.yml | 17 + appstore/yarr/2.4.0/docker-compose.yml | 16 + appstore/yarr/2.4.0/envs/default.env | 2 + appstore/yarr/2.4.0/envs/global.env | 2 + appstore/yarr/2.4.0/scripts/init.sh | 10 + appstore/yarr/2.4.0/scripts/upgrade.sh | 10 + appstore/yarr/README.md | 16 + appstore/yarr/data.yml | 14 + appstore/yarr/logo.png | Bin 0 -> 36956 bytes appstore/zerotier-planet/1.14.2/.env | 21 + appstore/zerotier-planet/1.14.2/data.yml | 63 + .../zerotier-planet/1.14.2/docker-compose.yml | 28 + .../zerotier-planet/1.14.2/envs/default.env | 2 + .../zerotier-planet/1.14.2/envs/global.env | 2 + .../zerotier-planet/1.14.2/scripts/init.sh | 17 + .../1.14.2/scripts/uninstall.sh | 10 + .../zerotier-planet/1.14.2/scripts/upgrade.sh | 17 + appstore/zerotier-planet/README.md | 36 + appstore/zerotier-planet/data.yml | 15 + appstore/zerotier-planet/logo.png | Bin 0 -> 9983 bytes appstore/ztncui/1.2.17/.env | 21 + appstore/ztncui/1.2.17/data.yml | 63 + appstore/ztncui/1.2.17/docker-compose.yml | 27 + appstore/ztncui/1.2.17/envs/default.env | 2 + appstore/ztncui/1.2.17/envs/global.env | 2 + appstore/ztncui/1.2.17/scripts/init.sh | 17 + appstore/ztncui/1.2.17/scripts/uninstall.sh | 10 + appstore/ztncui/1.2.17/scripts/upgrade.sh | 17 + appstore/ztncui/README.md | 36 + appstore/ztncui/data.yml | 15 + appstore/ztncui/logo.png | Bin 0 -> 9983 bytes dockge/acg-faka/.env | 6 + dockge/acg-faka/docker-compose.yml | 19 + dockge/acg-faka/envs/default.env | 2 + dockge/acg-faka/envs/global.env | 2 + dockge/alist-aria2/.env | 30 + dockge/alist-aria2/docker-compose.yml | 27 + dockge/alist-aria2/envs/default.env | 2 + dockge/alist-aria2/envs/global.env | 2 + dockge/alist-ffmpeg/.env | 30 + dockge/alist-ffmpeg/docker-compose.yml | 27 + dockge/alist-ffmpeg/envs/default.env | 2 + dockge/alist-ffmpeg/envs/global.env | 2 + dockge/alist/.env | 30 + dockge/alist/docker-compose.yml | 27 + dockge/alist/envs/default.env | 2 + dockge/alist/envs/global.env | 2 + dockge/ani-rss/.env | 15 + dockge/ani-rss/docker-compose.yml | 28 + dockge/ani-rss/envs/default.env | 2 + dockge/ani-rss/envs/global.env | 2 + dockge/artalk/.env | 60 + dockge/artalk/docker-compose.yml | 26 + dockge/artalk/envs/default.env | 2 + dockge/artalk/envs/global.env | 2 + dockge/auto-lady/.env | 15 + dockge/auto-lady/docker-compose.yml | 22 + dockge/auto-lady/envs/default.env | 2 + dockge/auto-lady/envs/global.env | 2 + dockge/baota/.env | 27 + dockge/baota/docker-compose.yml | 26 + dockge/baota/envs/default.env | 2 + dockge/baota/envs/global.env | 2 + dockge/bark/.env | 15 + dockge/bark/docker-compose.yml | 24 + dockge/bark/envs/default.env | 2 + dockge/bark/envs/global.env | 2 + dockge/bitmagnet/.env | 33 + dockge/bitmagnet/docker-compose.yml | 36 + dockge/bitmagnet/envs/default.env | 2 + dockge/bitmagnet/envs/global.env | 2 + dockge/casdoor/.env | 45 + dockge/casdoor/config/init_data.json | 490 +++ dockge/casdoor/docker-compose.yml | 26 + dockge/casdoor/envs/casdoor.env | 31 + dockge/casdoor/envs/default.env | 2 + dockge/casdoor/envs/global.env | 2 + dockge/certimate/.env | 6 + dockge/certimate/docker-compose.yml | 19 + dockge/certimate/envs/default.env | 2 + dockge/certimate/envs/global.env | 2 + dockge/cookie-cloud/.env | 9 + dockge/cookie-cloud/docker-compose.yml | 19 + dockge/cookie-cloud/envs/default.env | 2 + dockge/cookie-cloud/envs/global.env | 2 + dockge/deeplx/.env | 15 + dockge/deeplx/docker-compose.yml | 19 + dockge/deeplx/envs/default.env | 2 + dockge/deeplx/envs/global.env | 2 + dockge/dockge/.env | 6 + dockge/dockge/docker-compose.yml | 23 + dockge/dockge/envs/default.env | 2 + dockge/dockge/envs/global.env | 2 + dockge/dozzle/.env | 3 + dockge/dozzle/docker-compose.yml | 32 + dockge/dozzle/envs/default.env | 2 + dockge/dozzle/envs/global.env | 2 + dockge/dpanel-lite/.env | 12 + dockge/dpanel-lite/docker-compose.yml | 33 + dockge/dpanel-lite/envs/default.env | 2 + dockge/dpanel-lite/envs/global.env | 2 + dockge/dpanel/.env | 18 + dockge/dpanel/docker-compose.yml | 35 + dockge/dpanel/envs/default.env | 2 + dockge/dpanel/envs/global.env | 2 + dockge/dujiaoka/.env | 30 + dockge/dujiaoka/docker-compose.yml | 31 + dockge/dujiaoka/envs/default.env | 2 + dockge/dujiaoka/envs/global.env | 2 + dockge/elastic-elasticsearch/.env | 24 + .../elastic-elasticsearch/docker-compose.yml | 34 + dockge/elastic-elasticsearch/envs/default.env | 2 + dockge/elastic-elasticsearch/envs/global.env | 2 + dockge/elastic-kibana/.env | 9 + dockge/elastic-kibana/docker-compose.yml | 26 + dockge/elastic-kibana/envs/default.env | 2 + dockge/elastic-kibana/envs/global.env | 2 + dockge/element-web/.env | 9 + dockge/element-web/conf/config.sample.json | 53 + dockge/element-web/docker-compose.yml | 19 + dockge/element-web/envs/default.env | 2 + dockge/element-web/envs/global.env | 2 + dockge/emby-amilys/.env | 21 + dockge/emby-amilys/docker-compose.yml | 30 + dockge/emby-amilys/envs/default.env | 2 + dockge/emby-amilys/envs/global.env | 2 + dockge/emby-lovechen/.env | 21 + dockge/emby-lovechen/docker-compose.yml | 31 + dockge/emby-lovechen/envs/default.env | 2 + dockge/emby-lovechen/envs/global.env | 2 + dockge/emby/.env | 21 + dockge/emby/docker-compose.yml | 30 + dockge/emby/envs/default.env | 2 + dockge/emby/envs/global.env | 2 + dockge/ghost/.env | 48 + dockge/ghost/docker-compose.yml | 26 + dockge/ghost/envs/default.env | 2 + dockge/ghost/envs/global.env | 2 + dockge/gitea-runner/.env | 15 + dockge/gitea-runner/docker-compose.yml | 21 + dockge/gitea-runner/envs/default.env | 2 + dockge/gitea-runner/envs/global.env | 2 + dockge/gitea/.env | 90 + dockge/gitea/config/app.example.ini | 2706 +++++++++++++++++ dockge/gitea/docker-compose.yml | 43 + dockge/gitea/envs/default.env | 2 + dockge/gitea/envs/gitea.env | 36 + dockge/gitea/envs/global.env | 2 + dockge/halo/.env | 33 + dockge/halo/docker-compose.yml | 23 + dockge/halo/envs/default.env | 2 + dockge/halo/envs/global.env | 2 + dockge/iframely/.env | 9 + dockge/iframely/config/config.local.js | 231 ++ dockge/iframely/docker-compose.yml | 24 + dockge/iframely/envs/default.env | 2 + dockge/iframely/envs/global.env | 2 + dockge/immich-machine-learning/.env | 21 + .../docker-compose.yml | 24 + .../immich-machine-learning/envs/default.env | 2 + .../immich-machine-learning/envs/global.env | 2 + dockge/immich-server/.env | 48 + dockge/immich-server/docker-compose.yml | 25 + dockge/immich-server/envs/default.env | 2 + dockge/immich-server/envs/global.env | 2 + dockge/immich/.env | 54 + dockge/immich/docker-compose.yml | 85 + dockge/immich/envs/default.env | 2 + dockge/immich/envs/global.env | 2 + dockge/iycms/.env | 9 + dockge/iycms/docker-compose.yml | 20 + dockge/iycms/envs/default.env | 2 + dockge/iycms/envs/global.env | 2 + dockge/iyuu-plus/.env | 21 + dockge/iyuu-plus/docker-compose.yml | 24 + dockge/iyuu-plus/envs/default.env | 2 + dockge/iyuu-plus/envs/global.env | 2 + dockge/jellyfin/.env | 21 + dockge/jellyfin/docker-compose.yml | 30 + dockge/jellyfin/envs/default.env | 2 + dockge/jellyfin/envs/global.env | 2 + dockge/jellyfin_10_10_3/.env | 21 + dockge/jellyfin_10_10_3/docker-compose.yml | 30 + dockge/jellyfin_10_10_3/envs/default.env | 2 + dockge/jellyfin_10_10_3/envs/global.env | 2 + dockge/jellyseerr/.env | 12 + dockge/jellyseerr/docker-compose.yml | 24 + dockge/jellyseerr/envs/default.env | 2 + dockge/jellyseerr/envs/global.env | 2 + dockge/jproxy/.env | 27 + dockge/jproxy/docker-compose.yml | 23 + dockge/jproxy/envs/default.env | 2 + dockge/jproxy/envs/global.env | 2 + dockge/kimai/.env | 30 + dockge/kimai/docker-compose.yml | 22 + dockge/kimai/envs/default.env | 2 + dockge/kimai/envs/global.env | 2 + dockge/limesurvey/.env | 42 + dockge/limesurvey/docker-compose.yml | 22 + dockge/limesurvey/envs/default.env | 2 + dockge/limesurvey/envs/global.env | 2 + dockge/linkding/.env | 60 + dockge/linkding/docker-compose.yml | 29 + dockge/linkding/envs/default.env | 2 + dockge/linkding/envs/global.env | 2 + dockge/maccms10/.env | 6 + dockge/maccms10/docker-compose.yml | 19 + dockge/maccms10/envs/default.env | 2 + dockge/maccms10/envs/global.env | 2 + dockge/macos/.env | 21 + dockge/macos/docker-compose.yml | 29 + dockge/macos/envs/default.env | 2 + dockge/macos/envs/global.env | 2 + dockge/mailserver/.env | 75 + dockge/mailserver/docker-compose.yml | 52 + dockge/mailserver/envs/default.env | 2 + dockge/mailserver/envs/global.env | 2 + dockge/mailserver/envs/mailserver.env | 661 ++++ dockge/mariadb/.env | 9 + dockge/mariadb/config/my.cnf | 30 + dockge/mariadb/docker-compose.yml | 20 + dockge/mariadb/envs/default.env | 2 + dockge/mariadb/envs/global.env | 2 + dockge/maxkb/.env | 6 + dockge/maxkb/docker-compose.yml | 21 + dockge/maxkb/envs/default.env | 2 + dockge/maxkb/envs/global.env | 2 + dockge/mcy-shop/.env | 6 + dockge/mcy-shop/docker-compose.yml | 19 + dockge/mcy-shop/envs/default.env | 2 + dockge/mcy-shop/envs/global.env | 2 + dockge/mediacms/.env | 45 + dockge/mediacms/docker-compose.yml | 77 + dockge/mediacms/envs/default.env | 2 + dockge/mediacms/envs/global.env | 2 + dockge/metatube-server/.env | 33 + dockge/metatube-server/docker-compose.yml | 27 + dockge/metatube-server/envs/default.env | 2 + dockge/metatube-server/envs/global.env | 2 + dockge/minio/.env | 36 + dockge/minio/docker-compose.yml | 34 + dockge/minio/envs/default.env | 2 + dockge/minio/envs/global.env | 2 + dockge/movie-pilot/.env | 33 + dockge/movie-pilot/docker-compose.yml | 39 + dockge/movie-pilot/envs/default.env | 2 + dockge/movie-pilot/envs/global.env | 2 + dockge/movie-pilot/envs/movie-pilot.env | 63 + dockge/movie-pilot_1_9_17/.env | 138 + dockge/movie-pilot_1_9_17/docker-compose.yml | 37 + dockge/movie-pilot_1_9_17/envs/default.env | 2 + dockge/movie-pilot_1_9_17/envs/global.env | 2 + .../movie-pilot_1_9_17/envs/movie-pilot.env | 53 + dockge/mysql/.env | 9 + dockge/mysql/config/my.cnf | 20 + dockge/mysql/docker-compose.yml | 28 + dockge/mysql/envs/default.env | 2 + dockge/mysql/envs/global.env | 2 + dockge/mysql_5_7_44/.env | 9 + dockge/mysql_5_7_44/config/my.cnf | 42 + dockge/mysql_5_7_44/docker-compose.yml | 29 + dockge/mysql_5_7_44/envs/default.env | 2 + dockge/mysql_5_7_44/envs/global.env | 2 + dockge/nacos/.env | 66 + dockge/nacos/docker-compose.yml | 26 + dockge/nacos/envs/default.env | 2 + dockge/nacos/envs/global.env | 2 + dockge/nacos/init/mysql-schema.sql | 227 ++ dockge/nexusphp/.env | 18 + dockge/nexusphp/docker-compose.yml | 23 + dockge/nexusphp/envs/default.env | 2 + dockge/nexusphp/envs/global.env | 2 + dockge/nexusphp/envs/nexusphp.env | 94 + dockge/nezha-dash/.env | 9 + dockge/nezha-dash/docker-compose.yml | 29 + dockge/nezha-dash/envs/default.env | 2 + dockge/nezha-dash/envs/global.env | 2 + dockge/nezha/.env | 33 + dockge/nezha/data/config-example.yaml | 33 + dockge/nezha/docker-compose.yml | 20 + dockge/nezha/envs/default.env | 2 + dockge/nezha/envs/global.env | 2 + dockge/nginx-ui/.env | 30 + dockge/nginx-ui/docker-compose.yml | 35 + dockge/nginx-ui/envs/default.env | 2 + dockge/nginx-ui/envs/global.env | 2 + dockge/nocodb/.env | 57 + dockge/nocodb/docker-compose.yml | 29 + dockge/nocodb/envs/default.env | 2 + dockge/nocodb/envs/global.env | 2 + dockge/onedev/.env | 24 + dockge/onedev/docker-compose.yml | 28 + dockge/onedev/envs/default.env | 2 + dockge/onedev/envs/global.env | 2 + dockge/onedev/envs/onedev.env | 29 + dockge/openfire/.env | 15 + dockge/openfire/docker-compose.yml | 23 + dockge/openfire/envs/default.env | 2 + dockge/openfire/envs/global.env | 2 + dockge/outline/.env | 108 + dockge/outline/docker-compose.yml | 22 + dockge/outline/envs/default.env | 2 + dockge/outline/envs/global.env | 2 + dockge/outline/envs/outline.env | 224 ++ dockge/page-spy-web/.env | 6 + dockge/page-spy-web/docker-compose.yml | 20 + dockge/page-spy-web/envs/default.env | 2 + dockge/page-spy-web/envs/global.env | 2 + dockge/percona/.env | 9 + dockge/percona/config/my.cnf | 19 + dockge/percona/docker-compose.yml | 26 + dockge/percona/envs/default.env | 2 + dockge/percona/envs/global.env | 2 + dockge/photoprism/.env | 60 + dockge/photoprism/docker-compose.yml | 38 + dockge/photoprism/envs/default.env | 2 + dockge/photoprism/envs/global.env | 2 + dockge/photoprism/envs/photoprism.env | 25 + dockge/pingvin-share/.env | 9 + dockge/pingvin-share/docker-compose.yml | 25 + dockge/pingvin-share/envs/default.env | 2 + dockge/pingvin-share/envs/global.env | 2 + dockge/pixman/.env | 12 + dockge/pixman/docker-compose.yml | 22 + dockge/pixman/envs/default.env | 2 + dockge/pixman/envs/global.env | 2 + dockge/pixman/m3u/Adult.m3u | 50 + dockge/pixman/m3u/CCTV.m3u | 57 + dockge/pixman/m3u/CNTV.m3u | 171 ++ dockge/pixman/m3u/IPTV.m3u | 277 ++ dockge/postgresql/.env | 15 + dockge/postgresql/docker-compose.yml | 24 + dockge/postgresql/envs/default.env | 2 + dockge/postgresql/envs/global.env | 2 + dockge/postgresql_16_6-alpine/.env | 15 + .../postgresql_16_6-alpine/docker-compose.yml | 24 + .../postgresql_16_6-alpine/envs/default.env | 2 + dockge/postgresql_16_6-alpine/envs/global.env | 2 + dockge/postgresql_16_6/.env | 15 + dockge/postgresql_16_6/docker-compose.yml | 24 + dockge/postgresql_16_6/envs/default.env | 2 + dockge/postgresql_16_6/envs/global.env | 2 + dockge/postgresql_17_2-alpine/.env | 15 + .../postgresql_17_2-alpine/docker-compose.yml | 24 + .../postgresql_17_2-alpine/envs/default.env | 2 + dockge/postgresql_17_2-alpine/envs/global.env | 2 + dockge/postgresql_17_2/.env | 15 + dockge/postgresql_17_2/docker-compose.yml | 24 + dockge/postgresql_17_2/envs/default.env | 2 + dockge/postgresql_17_2/envs/global.env | 2 + dockge/postgresql_pg14-alpine/.env | 15 + .../postgresql_pg14-alpine/docker-compose.yml | 24 + .../postgresql_pg14-alpine/envs/default.env | 2 + dockge/postgresql_pg14-alpine/envs/global.env | 2 + dockge/postgresql_pg14-vectors/.env | 15 + .../docker-compose.yml | 24 + .../postgresql_pg14-vectors/envs/default.env | 2 + .../postgresql_pg14-vectors/envs/global.env | 2 + dockge/postgresql_pg14/.env | 15 + dockge/postgresql_pg14/docker-compose.yml | 24 + dockge/postgresql_pg14/envs/default.env | 2 + dockge/postgresql_pg14/envs/global.env | 2 + dockge/postgresql_pg15-alpine/.env | 15 + .../postgresql_pg15-alpine/docker-compose.yml | 24 + .../postgresql_pg15-alpine/envs/default.env | 2 + dockge/postgresql_pg15-alpine/envs/global.env | 2 + dockge/postgresql_pg15/.env | 15 + dockge/postgresql_pg15/docker-compose.yml | 24 + dockge/postgresql_pg15/envs/default.env | 2 + dockge/postgresql_pg15/envs/global.env | 2 + dockge/postgresql_pg16-alpine/.env | 15 + .../postgresql_pg16-alpine/docker-compose.yml | 24 + .../postgresql_pg16-alpine/envs/default.env | 2 + dockge/postgresql_pg16-alpine/envs/global.env | 2 + dockge/postgresql_pg16-vectors/.env | 15 + .../docker-compose.yml | 24 + .../postgresql_pg16-vectors/envs/default.env | 2 + .../postgresql_pg16-vectors/envs/global.env | 2 + dockge/postgresql_pg16/.env | 15 + dockge/postgresql_pg16/docker-compose.yml | 24 + dockge/postgresql_pg16/envs/default.env | 2 + dockge/postgresql_pg16/envs/global.env | 2 + dockge/prowlarr/.env | 6 + dockge/prowlarr/docker-compose.yml | 24 + dockge/prowlarr/envs/default.env | 2 + dockge/prowlarr/envs/global.env | 2 + dockge/puff/.env | 6 + dockge/puff/docker-compose.yml | 19 + dockge/puff/envs/default.env | 2 + dockge/puff/envs/global.env | 2 + dockge/qbittorrent/.env | 21 + dockge/qbittorrent/docker-compose.yml | 29 + dockge/qbittorrent/envs/default.env | 2 + dockge/qbittorrent/envs/global.env | 2 + dockge/qbittorrent_4_6_7/.env | 21 + dockge/qbittorrent_4_6_7/docker-compose.yml | 29 + dockge/qbittorrent_4_6_7/envs/default.env | 2 + dockge/qbittorrent_4_6_7/envs/global.env | 2 + dockge/qinglong/.env | 9 + dockge/qinglong/docker-compose.yml | 19 + dockge/qinglong/envs/default.env | 2 + dockge/qinglong/envs/global.env | 2 + dockge/radarr/.env | 15 + dockge/radarr/docker-compose.yml | 29 + dockge/radarr/envs/default.env | 2 + dockge/radarr/envs/global.env | 2 + dockge/reader3-webview/.env | 3 + dockge/reader3-webview/docker-compose.yml | 16 + dockge/reader3-webview/envs/default.env | 2 + dockge/reader3-webview/envs/global.env | 2 + dockge/reader3/.env | 39 + dockge/reader3/docker-compose.yml | 28 + dockge/reader3/envs/default.env | 2 + dockge/reader3/envs/global.env | 2 + dockge/redis/.env | 9 + dockge/redis/config/redis.conf | 2276 ++++++++++++++ dockge/redis/docker-compose.yml | 21 + dockge/redis/envs/default.env | 2 + dockge/redis/envs/global.env | 2 + dockge/redis_6_2_16/.env | 9 + dockge/redis_6_2_16/config/redis.conf | 1877 ++++++++++++ dockge/redis_6_2_16/docker-compose.yml | 21 + dockge/redis_6_2_16/envs/default.env | 2 + dockge/redis_6_2_16/envs/global.env | 2 + dockge/rsshub/.env | 30 + dockge/rsshub/docker-compose.yml | 67 + dockge/rsshub/envs/default.env | 2 + dockge/rsshub/envs/global.env | 2 + dockge/sentinel/.env | 18 + dockge/sentinel/docker-compose.yml | 26 + dockge/sentinel/envs/default.env | 2 + dockge/sentinel/envs/global.env | 2 + dockge/shiori/.env | 18 + dockge/shiori/docker-compose.yml | 33 + dockge/shiori/envs/default.env | 2 + dockge/shiori/envs/global.env | 2 + dockge/siyuan/.env | 9 + dockge/siyuan/docker-compose.yml | 24 + dockge/siyuan/envs/default.env | 2 + dockge/siyuan/envs/global.env | 2 + dockge/slink/.env | 42 + dockge/slink/docker-compose.yml | 25 + dockge/slink/envs/default.env | 2 + dockge/slink/envs/global.env | 2 + dockge/sonarr/.env | 15 + dockge/sonarr/docker-compose.yml | 29 + dockge/sonarr/envs/default.env | 2 + dockge/sonarr/envs/global.env | 2 + dockge/speedtest-tracker-sqlite/.env | 57 + .../docker-compose.yml | 25 + .../speedtest-tracker-sqlite/envs/default.env | 2 + .../speedtest-tracker-sqlite/envs/global.env | 2 + dockge/speedtest-tracker/.env | 78 + dockge/speedtest-tracker/docker-compose.yml | 23 + dockge/speedtest-tracker/envs/default.env | 2 + dockge/speedtest-tracker/envs/global.env | 2 + dockge/speedtest/.env | 33 + dockge/speedtest/docker-compose.yml | 22 + dockge/speedtest/envs/default.env | 2 + dockge/speedtest/envs/global.env | 2 + dockge/stream-rec-backend/.env | 12 + dockge/stream-rec-backend/docker-compose.yml | 24 + dockge/stream-rec-backend/envs/default.env | 2 + dockge/stream-rec-backend/envs/global.env | 2 + dockge/stream-rec-frontend/.env | 18 + dockge/stream-rec-frontend/docker-compose.yml | 17 + dockge/stream-rec-frontend/envs/default.env | 2 + dockge/stream-rec-frontend/envs/global.env | 2 + dockge/stream-rec/.env | 27 + dockge/stream-rec/docker-compose.yml | 39 + dockge/stream-rec/envs/default.env | 2 + dockge/stream-rec/envs/global.env | 2 + dockge/sun-panel/.env | 6 + dockge/sun-panel/docker-compose.yml | 22 + dockge/sun-panel/envs/default.env | 2 + dockge/sun-panel/envs/global.env | 2 + dockge/synapse-admin/.env | 3 + dockge/synapse-admin/docker-compose.yml | 17 + dockge/synapse-admin/envs/default.env | 2 + dockge/synapse-admin/envs/global.env | 2 + dockge/synapse/.env | 9 + dockge/synapse/docker-compose.yml | 39 + dockge/synapse/envs/default.env | 2 + dockge/synapse/envs/global.env | 2 + dockge/tangsengdaodao/.env | 81 + dockge/tangsengdaodao/docker-compose.yml | 93 + dockge/tangsengdaodao/envs/default.env | 2 + dockge/tangsengdaodao/envs/global.env | 2 + dockge/teemii/.env | 9 + dockge/teemii/docker-compose.yml | 35 + dockge/teemii/envs/default.env | 2 + dockge/teemii/envs/global.env | 2 + dockge/telegram-bot-api/.env | 18 + dockge/telegram-bot-api/docker-compose.yml | 28 + dockge/telegram-bot-api/envs/default.env | 2 + dockge/telegram-bot-api/envs/global.env | 2 + dockge/traccar/.env | 6 + dockge/traccar/conf/traccar.xml | 12 + dockge/traccar/docker-compose.yml | 21 + dockge/traccar/envs/default.env | 2 + dockge/traccar/envs/global.env | 2 + dockge/transmission/.env | 36 + dockge/transmission/docker-compose.yml | 30 + dockge/transmission/envs/default.env | 2 + dockge/transmission/envs/global.env | 2 + dockge/umami-mysql/.env | 36 + dockge/umami-mysql/docker-compose.yml | 23 + dockge/umami-mysql/envs/default.env | 2 + dockge/umami-mysql/envs/global.env | 2 + dockge/umami/.env | 36 + dockge/umami/docker-compose.yml | 22 + dockge/umami/envs/default.env | 2 + dockge/umami/envs/global.env | 2 + dockge/uptime-kuma/.env | 6 + dockge/uptime-kuma/docker-compose.yml | 20 + dockge/uptime-kuma/envs/default.env | 2 + dockge/uptime-kuma/envs/global.env | 2 + dockge/uptime-kuma_1_23_15/.env | 12 + dockge/uptime-kuma_1_23_15/docker-compose.yml | 29 + dockge/uptime-kuma_1_23_15/envs/default.env | 2 + dockge/uptime-kuma_1_23_15/envs/global.env | 2 + dockge/watchyourlan/.env | 33 + dockge/watchyourlan/docker-compose.yml | 22 + dockge/watchyourlan/envs/default.env | 2 + dockge/watchyourlan/envs/global.env | 2 + dockge/windows/.env | 39 + dockge/windows/docker-compose.yml | 33 + dockge/windows/envs/default.env | 2 + dockge/windows/envs/global.env | 2 + dockge/wiseflow/.env | 27 + dockge/wiseflow/docker-compose.yml | 28 + dockge/wiseflow/envs/default.env | 2 + dockge/wiseflow/envs/global.env | 2 + dockge/wukongim/.env | 21 + dockge/wukongim/docker-compose.yml | 25 + dockge/wukongim/envs/default.env | 2 + dockge/wukongim/envs/global.env | 2 + dockge/xunlei-cnk3x/.env | 12 + dockge/xunlei-cnk3x/docker-compose.yml | 30 + dockge/xunlei-cnk3x/envs/default.env | 2 + dockge/xunlei-cnk3x/envs/global.env | 2 + dockge/yarr/.env | 6 + dockge/yarr/docker-compose.yml | 16 + dockge/yarr/envs/default.env | 2 + dockge/yarr/envs/global.env | 2 + dockge/zerotier-planet/.env | 21 + dockge/zerotier-planet/docker-compose.yml | 28 + dockge/zerotier-planet/envs/default.env | 2 + dockge/zerotier-planet/envs/global.env | 2 + dockge/ztncui/.env | 21 + dockge/ztncui/docker-compose.yml | 27 + dockge/ztncui/envs/default.env | 2 + dockge/ztncui/envs/global.env | 2 + 1857 files changed, 56700 insertions(+) create mode 100644 appstore/acg-faka/1.3.8/.env create mode 100644 appstore/acg-faka/1.3.8/data.yml create mode 100644 appstore/acg-faka/1.3.8/docker-compose.yml create mode 100644 appstore/acg-faka/1.3.8/envs/default.env create mode 100644 appstore/acg-faka/1.3.8/envs/global.env create mode 100644 appstore/acg-faka/1.3.8/scripts/init.sh create mode 100644 appstore/acg-faka/1.3.8/scripts/uninstall.sh create mode 100644 appstore/acg-faka/1.3.8/scripts/upgrade.sh create mode 100644 appstore/acg-faka/README.md create mode 100644 appstore/acg-faka/data.yml create mode 100644 appstore/acg-faka/logo.png create mode 100644 appstore/alist-aria2/3.40.0/.env create mode 100644 appstore/alist-aria2/3.40.0/data.yml create mode 100644 appstore/alist-aria2/3.40.0/docker-compose.yml create mode 100644 appstore/alist-aria2/3.40.0/envs/default.env create mode 100644 appstore/alist-aria2/3.40.0/envs/global.env create mode 100644 appstore/alist-aria2/3.40.0/scripts/init.sh create mode 100644 appstore/alist-aria2/3.40.0/scripts/uninstall.sh create mode 100644 appstore/alist-aria2/3.40.0/scripts/upgrade.sh create mode 100644 appstore/alist-aria2/README.md create mode 100644 appstore/alist-aria2/data.yml create mode 100644 appstore/alist-aria2/logo.png create mode 100644 appstore/alist-ffmpeg/3.40.0/.env create mode 100644 appstore/alist-ffmpeg/3.40.0/data.yml create mode 100644 appstore/alist-ffmpeg/3.40.0/docker-compose.yml create mode 100644 appstore/alist-ffmpeg/3.40.0/envs/default.env create mode 100644 appstore/alist-ffmpeg/3.40.0/envs/global.env create mode 100644 appstore/alist-ffmpeg/3.40.0/scripts/init.sh create mode 100644 appstore/alist-ffmpeg/3.40.0/scripts/uninstall.sh create mode 100644 appstore/alist-ffmpeg/3.40.0/scripts/upgrade.sh create mode 100644 appstore/alist-ffmpeg/README.md create mode 100644 appstore/alist-ffmpeg/data.yml create mode 100644 appstore/alist-ffmpeg/logo.png create mode 100644 appstore/alist/3.40.0/.env create mode 100644 appstore/alist/3.40.0/data.yml create mode 100644 appstore/alist/3.40.0/docker-compose.yml create mode 100644 appstore/alist/3.40.0/envs/default.env create mode 100644 appstore/alist/3.40.0/envs/global.env create mode 100644 appstore/alist/3.40.0/scripts/init.sh create mode 100644 appstore/alist/3.40.0/scripts/uninstall.sh create mode 100644 appstore/alist/3.40.0/scripts/upgrade.sh create mode 100644 appstore/alist/README.md create mode 100644 appstore/alist/data.yml create mode 100644 appstore/alist/logo.png create mode 100644 appstore/ani-rss/1.1.202/.env create mode 100644 appstore/ani-rss/1.1.202/data.yml create mode 100644 appstore/ani-rss/1.1.202/docker-compose.yml create mode 100644 appstore/ani-rss/1.1.202/envs/default.env create mode 100644 appstore/ani-rss/1.1.202/envs/global.env create mode 100644 appstore/ani-rss/1.1.202/scripts/init.sh create mode 100644 appstore/ani-rss/1.1.202/scripts/uninstall.sh create mode 100644 appstore/ani-rss/1.1.202/scripts/upgrade.sh create mode 100644 appstore/ani-rss/README.md create mode 100644 appstore/ani-rss/data.yml create mode 100644 appstore/ani-rss/logo.png create mode 100644 appstore/artalk/2.9.1/.env create mode 100644 appstore/artalk/2.9.1/data.yml create mode 100644 appstore/artalk/2.9.1/docker-compose.yml create mode 100644 appstore/artalk/2.9.1/envs/default.env create mode 100644 appstore/artalk/2.9.1/envs/global.env create mode 100644 appstore/artalk/2.9.1/scripts/init.sh create mode 100644 appstore/artalk/2.9.1/scripts/uninstall.sh create mode 100644 appstore/artalk/2.9.1/scripts/upgrade.sh create mode 100644 appstore/artalk/README.md create mode 100644 appstore/artalk/data.yml create mode 100644 appstore/artalk/logo.png create mode 100644 appstore/auto-lady/1.1.202/.env create mode 100644 appstore/auto-lady/1.1.202/data.yml create mode 100644 appstore/auto-lady/1.1.202/docker-compose.yml create mode 100644 appstore/auto-lady/1.1.202/envs/default.env create mode 100644 appstore/auto-lady/1.1.202/envs/global.env create mode 100644 appstore/auto-lady/1.1.202/scripts/init.sh create mode 100644 appstore/auto-lady/1.1.202/scripts/uninstall.sh create mode 100644 appstore/auto-lady/1.1.202/scripts/upgrade.sh create mode 100644 appstore/auto-lady/README.md create mode 100644 appstore/auto-lady/data.yml create mode 100644 appstore/auto-lady/logo.png create mode 100644 appstore/baota/9.0/.env create mode 100644 appstore/baota/9.0/data.yml create mode 100644 appstore/baota/9.0/docker-compose.yml create mode 100644 appstore/baota/9.0/envs/default.env create mode 100644 appstore/baota/9.0/envs/global.env create mode 100644 appstore/baota/9.0/scripts/init.sh create mode 100644 appstore/baota/9.0/scripts/uninstall.sh create mode 100644 appstore/baota/9.0/scripts/upgrade.sh create mode 100644 appstore/baota/README.md create mode 100644 appstore/baota/data.yml create mode 100644 appstore/baota/logo.png create mode 100644 appstore/bark/2.1.5/.env create mode 100644 appstore/bark/2.1.5/data.yml create mode 100644 appstore/bark/2.1.5/docker-compose.yml create mode 100644 appstore/bark/2.1.5/envs/default.env create mode 100644 appstore/bark/2.1.5/envs/global.env create mode 100644 appstore/bark/2.1.5/scripts/init.sh create mode 100644 appstore/bark/2.1.5/scripts/uninstall.sh create mode 100644 appstore/bark/2.1.5/scripts/upgrade.sh create mode 100644 appstore/bark/README.md create mode 100644 appstore/bark/data.yml create mode 100644 appstore/bark/logo.png create mode 100644 appstore/bitmagnet/0.9.5/.env create mode 100644 appstore/bitmagnet/0.9.5/data.yml create mode 100644 appstore/bitmagnet/0.9.5/docker-compose.yml create mode 100644 appstore/bitmagnet/0.9.5/envs/default.env create mode 100644 appstore/bitmagnet/0.9.5/envs/global.env create mode 100644 appstore/bitmagnet/0.9.5/scripts/init.sh create mode 100644 appstore/bitmagnet/0.9.5/scripts/uninstall.sh create mode 100644 appstore/bitmagnet/0.9.5/scripts/upgrade.sh create mode 100644 appstore/bitmagnet/README.md create mode 100644 appstore/bitmagnet/data.yml create mode 100644 appstore/bitmagnet/logo.png create mode 100644 appstore/casdoor/1.758.0/.env create mode 100644 appstore/casdoor/1.758.0/config/init_data.json create mode 100644 appstore/casdoor/1.758.0/data.yml create mode 100644 appstore/casdoor/1.758.0/docker-compose.yml create mode 100644 appstore/casdoor/1.758.0/envs/casdoor.env create mode 100644 appstore/casdoor/1.758.0/envs/default.env create mode 100644 appstore/casdoor/1.758.0/envs/global.env create mode 100644 appstore/casdoor/1.758.0/scripts/init.sh create mode 100644 appstore/casdoor/1.758.0/scripts/uninstall.sh create mode 100644 appstore/casdoor/1.758.0/scripts/upgrade.sh create mode 100644 appstore/casdoor/README.md create mode 100644 appstore/casdoor/data.yml create mode 100644 appstore/casdoor/logo.png create mode 100644 appstore/certimate/0.2.21/.env create mode 100644 appstore/certimate/0.2.21/data.yml create mode 100644 appstore/certimate/0.2.21/docker-compose.yml create mode 100644 appstore/certimate/0.2.21/envs/default.env create mode 100644 appstore/certimate/0.2.21/envs/global.env create mode 100644 appstore/certimate/0.2.21/scripts/init.sh create mode 100644 appstore/certimate/0.2.21/scripts/uninstall.sh create mode 100644 appstore/certimate/0.2.21/scripts/upgrade.sh create mode 100644 appstore/certimate/README.md create mode 100644 appstore/certimate/data.yml create mode 100644 appstore/certimate/logo.png create mode 100644 appstore/cookie-cloud/README.md create mode 100644 appstore/cookie-cloud/data.yml create mode 100644 appstore/cookie-cloud/latest/.env create mode 100644 appstore/cookie-cloud/latest/data.yml create mode 100644 appstore/cookie-cloud/latest/docker-compose.yml create mode 100644 appstore/cookie-cloud/latest/envs/default.env create mode 100644 appstore/cookie-cloud/latest/envs/global.env create mode 100644 appstore/cookie-cloud/latest/scripts/init.sh create mode 100644 appstore/cookie-cloud/latest/scripts/uninstall.sh create mode 100644 appstore/cookie-cloud/latest/scripts/upgrade.sh create mode 100644 appstore/cookie-cloud/logo.png create mode 100644 appstore/deeplx/0.9.8.3/.env create mode 100644 appstore/deeplx/0.9.8.3/data.yml create mode 100644 appstore/deeplx/0.9.8.3/docker-compose.yml create mode 100644 appstore/deeplx/0.9.8.3/envs/default.env create mode 100644 appstore/deeplx/0.9.8.3/envs/global.env create mode 100644 appstore/deeplx/0.9.8.3/scripts/init.sh create mode 100644 appstore/deeplx/0.9.8.3/scripts/uninstall.sh create mode 100644 appstore/deeplx/0.9.8.3/scripts/upgrade.sh create mode 100644 appstore/deeplx/README.md create mode 100644 appstore/deeplx/data.yml create mode 100644 appstore/deeplx/logo.png create mode 100644 appstore/dockge/1.4.2/.env create mode 100644 appstore/dockge/1.4.2/data.yml create mode 100644 appstore/dockge/1.4.2/docker-compose.yml create mode 100644 appstore/dockge/1.4.2/envs/default.env create mode 100644 appstore/dockge/1.4.2/envs/global.env create mode 100644 appstore/dockge/1.4.2/scripts/init.sh create mode 100644 appstore/dockge/1.4.2/scripts/uninstall.sh create mode 100644 appstore/dockge/1.4.2/scripts/upgrade.sh create mode 100644 appstore/dockge/README.md create mode 100644 appstore/dockge/data.yml create mode 100644 appstore/dockge/logo.png create mode 100644 appstore/dozzle/8.8.2/.env create mode 100644 appstore/dozzle/8.8.2/data.yml create mode 100644 appstore/dozzle/8.8.2/docker-compose.yml create mode 100644 appstore/dozzle/8.8.2/envs/default.env create mode 100644 appstore/dozzle/8.8.2/envs/global.env create mode 100644 appstore/dozzle/8.8.2/scripts/init.sh create mode 100644 appstore/dozzle/8.8.2/scripts/uninstall.sh create mode 100644 appstore/dozzle/8.8.2/scripts/upgrade.sh create mode 100644 appstore/dozzle/README.md create mode 100644 appstore/dozzle/data.yml create mode 100644 appstore/dozzle/logo.png create mode 100644 appstore/dpanel-lite/1.3.0/.env create mode 100644 appstore/dpanel-lite/1.3.0/data.yml create mode 100644 appstore/dpanel-lite/1.3.0/docker-compose.yml create mode 100644 appstore/dpanel-lite/1.3.0/envs/default.env create mode 100644 appstore/dpanel-lite/1.3.0/envs/global.env create mode 100644 appstore/dpanel-lite/1.3.0/scripts/init.sh create mode 100644 appstore/dpanel-lite/1.3.0/scripts/uninstall.sh create mode 100644 appstore/dpanel-lite/1.3.0/scripts/upgrade.sh create mode 100644 appstore/dpanel-lite/README.md create mode 100644 appstore/dpanel-lite/data.yml create mode 100644 appstore/dpanel-lite/logo.png create mode 100644 appstore/dpanel/1.3.0/.env create mode 100644 appstore/dpanel/1.3.0/data.yml create mode 100644 appstore/dpanel/1.3.0/docker-compose.yml create mode 100644 appstore/dpanel/1.3.0/envs/default.env create mode 100644 appstore/dpanel/1.3.0/envs/global.env create mode 100644 appstore/dpanel/1.3.0/scripts/init.sh create mode 100644 appstore/dpanel/1.3.0/scripts/uninstall.sh create mode 100644 appstore/dpanel/1.3.0/scripts/upgrade.sh create mode 100644 appstore/dpanel/README.md create mode 100644 appstore/dpanel/data.yml create mode 100644 appstore/dpanel/logo.png create mode 100644 appstore/dujiaoka/2.0.9/.env create mode 100644 appstore/dujiaoka/2.0.9/data.yml create mode 100644 appstore/dujiaoka/2.0.9/docker-compose.yml create mode 100644 appstore/dujiaoka/2.0.9/envs/default.env create mode 100644 appstore/dujiaoka/2.0.9/envs/global.env create mode 100644 appstore/dujiaoka/2.0.9/scripts/init.sh create mode 100644 appstore/dujiaoka/2.0.9/scripts/uninstall.sh create mode 100644 appstore/dujiaoka/2.0.9/scripts/upgrade.sh create mode 100644 appstore/dujiaoka/README.md create mode 100644 appstore/dujiaoka/data.yml create mode 100644 appstore/dujiaoka/logo.png create mode 100644 appstore/elastic-elasticsearch/8.16.1/.env create mode 100644 appstore/elastic-elasticsearch/8.16.1/data.yml create mode 100644 appstore/elastic-elasticsearch/8.16.1/docker-compose.yml create mode 100644 appstore/elastic-elasticsearch/8.16.1/envs/default.env create mode 100644 appstore/elastic-elasticsearch/8.16.1/envs/global.env create mode 100644 appstore/elastic-elasticsearch/8.16.1/scripts/init.sh create mode 100644 appstore/elastic-elasticsearch/8.16.1/scripts/uninstall.sh create mode 100644 appstore/elastic-elasticsearch/8.16.1/scripts/upgrade.sh create mode 100644 appstore/elastic-elasticsearch/README.md create mode 100644 appstore/elastic-elasticsearch/data.yml create mode 100644 appstore/elastic-elasticsearch/logo.png create mode 100644 appstore/elastic-kibana/8.16.1/.env create mode 100644 appstore/elastic-kibana/8.16.1/data.yml create mode 100644 appstore/elastic-kibana/8.16.1/docker-compose.yml create mode 100644 appstore/elastic-kibana/8.16.1/envs/default.env create mode 100644 appstore/elastic-kibana/8.16.1/envs/global.env create mode 100644 appstore/elastic-kibana/8.16.1/scripts/init.sh create mode 100644 appstore/elastic-kibana/8.16.1/scripts/uninstall.sh create mode 100644 appstore/elastic-kibana/8.16.1/scripts/upgrade.sh create mode 100644 appstore/elastic-kibana/README.md create mode 100644 appstore/elastic-kibana/data.yml create mode 100644 appstore/elastic-kibana/logo.png create mode 100644 appstore/element-web/1.11.86/.env create mode 100644 appstore/element-web/1.11.86/conf/config.sample.json create mode 100644 appstore/element-web/1.11.86/data.yml create mode 100644 appstore/element-web/1.11.86/docker-compose.yml create mode 100644 appstore/element-web/1.11.86/envs/default.env create mode 100644 appstore/element-web/1.11.86/envs/global.env create mode 100644 appstore/element-web/1.11.86/scripts/init.sh create mode 100644 appstore/element-web/1.11.86/scripts/uninstall.sh create mode 100644 appstore/element-web/1.11.86/scripts/upgrade.sh create mode 100644 appstore/element-web/README.md create mode 100644 appstore/element-web/data.yml create mode 100644 appstore/element-web/logo.png create mode 100644 appstore/emby-amilys/4.8.9.0/.env create mode 100644 appstore/emby-amilys/4.8.9.0/data.yml create mode 100644 appstore/emby-amilys/4.8.9.0/docker-compose.yml create mode 100644 appstore/emby-amilys/4.8.9.0/envs/default.env create mode 100644 appstore/emby-amilys/4.8.9.0/envs/global.env create mode 100644 appstore/emby-amilys/4.8.9.0/scripts/init.sh create mode 100644 appstore/emby-amilys/4.8.9.0/scripts/uninstall.sh create mode 100644 appstore/emby-amilys/4.8.9.0/scripts/upgrade.sh create mode 100644 appstore/emby-amilys/README.md create mode 100644 appstore/emby-amilys/data.yml create mode 100644 appstore/emby-amilys/logo.png create mode 100644 appstore/emby-lovechen/4.8.0.21/.env create mode 100644 appstore/emby-lovechen/4.8.0.21/data.yml create mode 100644 appstore/emby-lovechen/4.8.0.21/docker-compose.yml create mode 100644 appstore/emby-lovechen/4.8.0.21/envs/default.env create mode 100644 appstore/emby-lovechen/4.8.0.21/envs/global.env create mode 100644 appstore/emby-lovechen/4.8.0.21/scripts/init.sh create mode 100644 appstore/emby-lovechen/4.8.0.21/scripts/uninstall.sh create mode 100644 appstore/emby-lovechen/4.8.0.21/scripts/upgrade.sh create mode 100644 appstore/emby-lovechen/README.md create mode 100644 appstore/emby-lovechen/data.yml create mode 100644 appstore/emby-lovechen/logo.png create mode 100644 appstore/emby/4.8.10.0/.env create mode 100644 appstore/emby/4.8.10.0/data.yml create mode 100644 appstore/emby/4.8.10.0/docker-compose.yml create mode 100644 appstore/emby/4.8.10.0/envs/default.env create mode 100644 appstore/emby/4.8.10.0/envs/global.env create mode 100644 appstore/emby/4.8.10.0/scripts/init.sh create mode 100644 appstore/emby/4.8.10.0/scripts/uninstall.sh create mode 100644 appstore/emby/4.8.10.0/scripts/upgrade.sh create mode 100644 appstore/emby/README.md create mode 100644 appstore/emby/data.yml create mode 100644 appstore/emby/logo.png create mode 100644 appstore/ghost/5.101.4/.env create mode 100644 appstore/ghost/5.101.4/data.yml create mode 100644 appstore/ghost/5.101.4/docker-compose.yml create mode 100644 appstore/ghost/5.101.4/envs/default.env create mode 100644 appstore/ghost/5.101.4/envs/global.env create mode 100644 appstore/ghost/5.101.4/scripts/init.sh create mode 100644 appstore/ghost/5.101.4/scripts/uninstall.sh create mode 100644 appstore/ghost/5.101.4/scripts/upgrade.sh create mode 100644 appstore/ghost/README.md create mode 100644 appstore/ghost/data.yml create mode 100644 appstore/ghost/logo.png create mode 100644 appstore/gitea-runner/0.2.11/.env create mode 100644 appstore/gitea-runner/0.2.11/data.yml create mode 100644 appstore/gitea-runner/0.2.11/docker-compose.yml create mode 100644 appstore/gitea-runner/0.2.11/envs/default.env create mode 100644 appstore/gitea-runner/0.2.11/envs/global.env create mode 100644 appstore/gitea-runner/0.2.11/scripts/init.sh create mode 100644 appstore/gitea-runner/0.2.11/scripts/uninstall.sh create mode 100644 appstore/gitea-runner/0.2.11/scripts/upgrade.sh create mode 100644 appstore/gitea-runner/README.md create mode 100644 appstore/gitea-runner/data.yml create mode 100644 appstore/gitea-runner/logo.png create mode 100644 appstore/gitea/1.22.4/.env create mode 100644 appstore/gitea/1.22.4/config/app.example.ini create mode 100644 appstore/gitea/1.22.4/data.yml create mode 100644 appstore/gitea/1.22.4/docker-compose.yml create mode 100644 appstore/gitea/1.22.4/envs/default.env create mode 100644 appstore/gitea/1.22.4/envs/gitea.env create mode 100644 appstore/gitea/1.22.4/envs/global.env create mode 100644 appstore/gitea/1.22.4/scripts/init.sh create mode 100644 appstore/gitea/1.22.4/scripts/uninstall.sh create mode 100644 appstore/gitea/1.22.4/scripts/upgrade.sh create mode 100644 appstore/gitea/README.md create mode 100644 appstore/gitea/data.yml create mode 100644 appstore/gitea/logo.png create mode 100644 appstore/halo/2.20.10/.env create mode 100644 appstore/halo/2.20.10/data.yml create mode 100644 appstore/halo/2.20.10/docker-compose.yml create mode 100644 appstore/halo/2.20.10/envs/default.env create mode 100644 appstore/halo/2.20.10/envs/global.env create mode 100644 appstore/halo/2.20.10/scripts/init.sh create mode 100644 appstore/halo/2.20.10/scripts/uninstall.sh create mode 100644 appstore/halo/2.20.10/scripts/upgrade.sh create mode 100644 appstore/halo/README.md create mode 100644 appstore/halo/data.yml create mode 100644 appstore/halo/logo.png create mode 100644 appstore/iframely/2.4.3/.env create mode 100644 appstore/iframely/2.4.3/config/config.local.js create mode 100644 appstore/iframely/2.4.3/data.yml create mode 100644 appstore/iframely/2.4.3/docker-compose.yml create mode 100644 appstore/iframely/2.4.3/envs/default.env create mode 100644 appstore/iframely/2.4.3/envs/global.env create mode 100644 appstore/iframely/2.4.3/scripts/init.sh create mode 100644 appstore/iframely/2.4.3/scripts/uninstall.sh create mode 100644 appstore/iframely/2.4.3/scripts/upgrade.sh create mode 100644 appstore/iframely/README.md create mode 100644 appstore/iframely/data.yml create mode 100644 appstore/iframely/logo.png create mode 100644 appstore/immich-machine-learning/1.121.0/.env create mode 100644 appstore/immich-machine-learning/1.121.0/data.yml create mode 100644 appstore/immich-machine-learning/1.121.0/docker-compose.yml create mode 100644 appstore/immich-machine-learning/1.121.0/envs/default.env create mode 100644 appstore/immich-machine-learning/1.121.0/envs/global.env create mode 100644 appstore/immich-machine-learning/1.121.0/scripts/init.sh create mode 100644 appstore/immich-machine-learning/1.121.0/scripts/uninstall.sh create mode 100644 appstore/immich-machine-learning/1.121.0/scripts/upgrade.sh create mode 100644 appstore/immich-machine-learning/README.md create mode 100644 appstore/immich-machine-learning/data.yml create mode 100644 appstore/immich-machine-learning/logo.png create mode 100644 appstore/immich-server/1.121.0/.env create mode 100644 appstore/immich-server/1.121.0/data.yml create mode 100644 appstore/immich-server/1.121.0/docker-compose.yml create mode 100644 appstore/immich-server/1.121.0/envs/default.env create mode 100644 appstore/immich-server/1.121.0/envs/global.env create mode 100644 appstore/immich-server/1.121.0/scripts/init.sh create mode 100644 appstore/immich-server/1.121.0/scripts/uninstall.sh create mode 100644 appstore/immich-server/1.121.0/scripts/upgrade.sh create mode 100644 appstore/immich-server/README.md create mode 100644 appstore/immich-server/data.yml create mode 100644 appstore/immich-server/logo.png create mode 100644 appstore/immich/1.121.0/.env create mode 100644 appstore/immich/1.121.0/data.yml create mode 100644 appstore/immich/1.121.0/docker-compose.yml create mode 100644 appstore/immich/1.121.0/envs/default.env create mode 100644 appstore/immich/1.121.0/envs/global.env create mode 100644 appstore/immich/1.121.0/scripts/init.sh create mode 100644 appstore/immich/1.121.0/scripts/uninstall.sh create mode 100644 appstore/immich/1.121.0/scripts/upgrade.sh create mode 100644 appstore/immich/README.md create mode 100644 appstore/immich/data.yml create mode 100644 appstore/immich/logo.png create mode 100644 appstore/iycms/3.3.44/.env create mode 100644 appstore/iycms/3.3.44/data.yml create mode 100644 appstore/iycms/3.3.44/docker-compose.yml create mode 100644 appstore/iycms/3.3.44/envs/default.env create mode 100644 appstore/iycms/3.3.44/envs/global.env create mode 100644 appstore/iycms/3.3.44/scripts/init.sh create mode 100644 appstore/iycms/3.3.44/scripts/uninstall.sh create mode 100644 appstore/iycms/3.3.44/scripts/upgrade.sh create mode 100644 appstore/iycms/README.md create mode 100644 appstore/iycms/data.yml create mode 100644 appstore/iycms/logo.png create mode 100644 appstore/iyuu-plus/README.md create mode 100644 appstore/iyuu-plus/data.yml create mode 100644 appstore/iyuu-plus/latest/.env create mode 100644 appstore/iyuu-plus/latest/data.yml create mode 100644 appstore/iyuu-plus/latest/docker-compose.yml create mode 100644 appstore/iyuu-plus/latest/envs/default.env create mode 100644 appstore/iyuu-plus/latest/envs/global.env create mode 100644 appstore/iyuu-plus/latest/scripts/init.sh create mode 100644 appstore/iyuu-plus/latest/scripts/uninstall.sh create mode 100644 appstore/iyuu-plus/latest/scripts/upgrade.sh create mode 100644 appstore/iyuu-plus/logo.png create mode 100644 appstore/jellyfin/10.10.3/.env create mode 100644 appstore/jellyfin/10.10.3/data.yml create mode 100644 appstore/jellyfin/10.10.3/docker-compose.yml create mode 100644 appstore/jellyfin/10.10.3/envs/default.env create mode 100644 appstore/jellyfin/10.10.3/envs/global.env create mode 100644 appstore/jellyfin/10.10.3/scripts/init.sh create mode 100644 appstore/jellyfin/10.10.3/scripts/uninstall.sh create mode 100644 appstore/jellyfin/10.10.3/scripts/upgrade.sh create mode 100644 appstore/jellyfin/10.9.11/.env create mode 100644 appstore/jellyfin/10.9.11/data.yml create mode 100644 appstore/jellyfin/10.9.11/docker-compose.yml create mode 100644 appstore/jellyfin/10.9.11/envs/default.env create mode 100644 appstore/jellyfin/10.9.11/envs/global.env create mode 100644 appstore/jellyfin/10.9.11/scripts/init.sh create mode 100644 appstore/jellyfin/10.9.11/scripts/uninstall.sh create mode 100644 appstore/jellyfin/10.9.11/scripts/upgrade.sh create mode 100644 appstore/jellyfin/README.md create mode 100644 appstore/jellyfin/data.yml create mode 100644 appstore/jellyfin/logo.png create mode 100644 appstore/jellyseerr/2.1.0/.env create mode 100644 appstore/jellyseerr/2.1.0/data.yml create mode 100644 appstore/jellyseerr/2.1.0/docker-compose.yml create mode 100644 appstore/jellyseerr/2.1.0/envs/default.env create mode 100644 appstore/jellyseerr/2.1.0/envs/global.env create mode 100644 appstore/jellyseerr/2.1.0/scripts/init.sh create mode 100644 appstore/jellyseerr/2.1.0/scripts/uninstall.sh create mode 100644 appstore/jellyseerr/2.1.0/scripts/upgrade.sh create mode 100644 appstore/jellyseerr/README.md create mode 100644 appstore/jellyseerr/data.yml create mode 100644 appstore/jellyseerr/logo.png create mode 100644 appstore/jproxy/3.4.4/.env create mode 100644 appstore/jproxy/3.4.4/data.yml create mode 100644 appstore/jproxy/3.4.4/docker-compose.yml create mode 100644 appstore/jproxy/3.4.4/envs/default.env create mode 100644 appstore/jproxy/3.4.4/envs/global.env create mode 100644 appstore/jproxy/3.4.4/scripts/init.sh create mode 100644 appstore/jproxy/3.4.4/scripts/uninstall.sh create mode 100644 appstore/jproxy/3.4.4/scripts/upgrade.sh create mode 100644 appstore/jproxy/README.md create mode 100644 appstore/jproxy/data.yml create mode 100644 appstore/jproxy/logo.png create mode 100644 appstore/kimai/2.23.0/.env create mode 100644 appstore/kimai/2.23.0/data.yml create mode 100644 appstore/kimai/2.23.0/docker-compose.yml create mode 100644 appstore/kimai/2.23.0/envs/default.env create mode 100644 appstore/kimai/2.23.0/envs/global.env create mode 100644 appstore/kimai/2.23.0/scripts/init.sh create mode 100644 appstore/kimai/2.23.0/scripts/uninstall.sh create mode 100644 appstore/kimai/2.23.0/scripts/upgrade.sh create mode 100644 appstore/kimai/README.md create mode 100644 appstore/kimai/data.yml create mode 100644 appstore/kimai/logo.png create mode 100644 appstore/limesurvey/6.6.5/.env create mode 100644 appstore/limesurvey/6.6.5/data.yml create mode 100644 appstore/limesurvey/6.6.5/docker-compose.yml create mode 100644 appstore/limesurvey/6.6.5/envs/default.env create mode 100644 appstore/limesurvey/6.6.5/envs/global.env create mode 100644 appstore/limesurvey/6.6.5/scripts/init.sh create mode 100644 appstore/limesurvey/6.6.5/scripts/uninstall.sh create mode 100644 appstore/limesurvey/6.6.5/scripts/upgrade.sh create mode 100644 appstore/limesurvey/README.md create mode 100644 appstore/limesurvey/data.yml create mode 100644 appstore/limesurvey/logo.png create mode 100644 appstore/linkding/1.36.0/.env create mode 100644 appstore/linkding/1.36.0/data.yml create mode 100644 appstore/linkding/1.36.0/docker-compose.yml create mode 100644 appstore/linkding/1.36.0/envs/default.env create mode 100644 appstore/linkding/1.36.0/envs/global.env create mode 100644 appstore/linkding/1.36.0/scripts/init.sh create mode 100644 appstore/linkding/1.36.0/scripts/uninstall.sh create mode 100644 appstore/linkding/1.36.0/scripts/upgrade.sh create mode 100644 appstore/linkding/README.md create mode 100644 appstore/linkding/data.yml create mode 100644 appstore/linkding/logo.png create mode 100644 appstore/maccms10/24.11.19/.env create mode 100644 appstore/maccms10/24.11.19/data.yml create mode 100644 appstore/maccms10/24.11.19/docker-compose.yml create mode 100644 appstore/maccms10/24.11.19/envs/default.env create mode 100644 appstore/maccms10/24.11.19/envs/global.env create mode 100644 appstore/maccms10/24.11.19/scripts/init.sh create mode 100644 appstore/maccms10/24.11.19/scripts/uninstall.sh create mode 100644 appstore/maccms10/24.11.19/scripts/upgrade.sh create mode 100644 appstore/maccms10/README.md create mode 100644 appstore/maccms10/data.yml create mode 100644 appstore/maccms10/logo.png create mode 100644 appstore/macos/1.16/.env create mode 100644 appstore/macos/1.16/data.yml create mode 100644 appstore/macos/1.16/docker-compose.yml create mode 100644 appstore/macos/1.16/envs/default.env create mode 100644 appstore/macos/1.16/envs/global.env create mode 100644 appstore/macos/1.16/scripts/init.sh create mode 100644 appstore/macos/1.16/scripts/uninstall.sh create mode 100644 appstore/macos/1.16/scripts/upgrade.sh create mode 100644 appstore/macos/README.md create mode 100644 appstore/macos/data.yml create mode 100644 appstore/macos/logo.png create mode 100644 appstore/mailserver/14.0.0/.env create mode 100644 appstore/mailserver/14.0.0/data.yml create mode 100644 appstore/mailserver/14.0.0/docker-compose.yml create mode 100644 appstore/mailserver/14.0.0/envs/default.env create mode 100644 appstore/mailserver/14.0.0/envs/global.env create mode 100644 appstore/mailserver/14.0.0/envs/mailserver.env create mode 100644 appstore/mailserver/14.0.0/scripts/init.sh create mode 100644 appstore/mailserver/14.0.0/scripts/uninstall.sh create mode 100644 appstore/mailserver/14.0.0/scripts/upgrade.sh create mode 100644 appstore/mailserver/README.md create mode 100644 appstore/mailserver/data.yml create mode 100644 appstore/mailserver/logo.png create mode 100644 appstore/mariadb/11.6.2/.env create mode 100644 appstore/mariadb/11.6.2/config/my.cnf create mode 100644 appstore/mariadb/11.6.2/data.yml create mode 100644 appstore/mariadb/11.6.2/docker-compose.yml create mode 100644 appstore/mariadb/11.6.2/envs/default.env create mode 100644 appstore/mariadb/11.6.2/envs/global.env create mode 100644 appstore/mariadb/11.6.2/scripts/init.sh create mode 100644 appstore/mariadb/11.6.2/scripts/uninstall.sh create mode 100644 appstore/mariadb/11.6.2/scripts/upgrade.sh create mode 100644 appstore/mariadb/README.md create mode 100644 appstore/mariadb/data.yml create mode 100644 appstore/mariadb/logo.png create mode 100644 appstore/maxkb/1.7.2/.env create mode 100644 appstore/maxkb/1.7.2/data.yml create mode 100644 appstore/maxkb/1.7.2/docker-compose.yml create mode 100644 appstore/maxkb/1.7.2/envs/default.env create mode 100644 appstore/maxkb/1.7.2/envs/global.env create mode 100644 appstore/maxkb/1.7.2/scripts/init.sh create mode 100644 appstore/maxkb/1.7.2/scripts/uninstall.sh create mode 100644 appstore/maxkb/1.7.2/scripts/upgrade.sh create mode 100644 appstore/maxkb/README.md create mode 100644 appstore/maxkb/data.yml create mode 100644 appstore/maxkb/logo.png create mode 100644 appstore/mcy-shop/5.0.17/.env create mode 100644 appstore/mcy-shop/5.0.17/data.yml create mode 100644 appstore/mcy-shop/5.0.17/docker-compose.yml create mode 100644 appstore/mcy-shop/5.0.17/envs/default.env create mode 100644 appstore/mcy-shop/5.0.17/envs/global.env create mode 100644 appstore/mcy-shop/5.0.17/scripts/init.sh create mode 100644 appstore/mcy-shop/5.0.17/scripts/uninstall.sh create mode 100644 appstore/mcy-shop/5.0.17/scripts/upgrade.sh create mode 100644 appstore/mcy-shop/README.md create mode 100644 appstore/mcy-shop/data.yml create mode 100644 appstore/mcy-shop/logo.png create mode 100644 appstore/mediacms/4.1.0/.env create mode 100644 appstore/mediacms/4.1.0/data.yml create mode 100644 appstore/mediacms/4.1.0/docker-compose.yml create mode 100644 appstore/mediacms/4.1.0/envs/default.env create mode 100644 appstore/mediacms/4.1.0/envs/global.env create mode 100644 appstore/mediacms/4.1.0/scripts/init.sh create mode 100644 appstore/mediacms/4.1.0/scripts/uninstall.sh create mode 100644 appstore/mediacms/4.1.0/scripts/upgrade.sh create mode 100644 appstore/mediacms/README.md create mode 100644 appstore/mediacms/data.yml create mode 100644 appstore/mediacms/logo.png create mode 100644 appstore/metatube-server/1.2.8/.env create mode 100644 appstore/metatube-server/1.2.8/data.yml create mode 100644 appstore/metatube-server/1.2.8/docker-compose.yml create mode 100644 appstore/metatube-server/1.2.8/envs/default.env create mode 100644 appstore/metatube-server/1.2.8/envs/global.env create mode 100644 appstore/metatube-server/1.2.8/scripts/init.sh create mode 100644 appstore/metatube-server/1.2.8/scripts/uninstall.sh create mode 100644 appstore/metatube-server/1.2.8/scripts/upgrade.sh create mode 100644 appstore/metatube-server/README.md create mode 100644 appstore/metatube-server/data.yml create mode 100644 appstore/metatube-server/logo.png create mode 100644 appstore/minio/2024-11-07/.env create mode 100644 appstore/minio/2024-11-07/data.yml create mode 100644 appstore/minio/2024-11-07/docker-compose.yml create mode 100644 appstore/minio/2024-11-07/envs/default.env create mode 100644 appstore/minio/2024-11-07/envs/global.env create mode 100644 appstore/minio/2024-11-07/scripts/init.sh create mode 100644 appstore/minio/2024-11-07/scripts/uninstall.sh create mode 100644 appstore/minio/2024-11-07/scripts/upgrade.sh create mode 100644 appstore/minio/README.md create mode 100644 appstore/minio/data.yml create mode 100644 appstore/minio/logo.png create mode 100644 appstore/movie-pilot/1.9.17/.env create mode 100644 appstore/movie-pilot/1.9.17/data.yml create mode 100644 appstore/movie-pilot/1.9.17/docker-compose.yml create mode 100644 appstore/movie-pilot/1.9.17/envs/default.env create mode 100644 appstore/movie-pilot/1.9.17/envs/global.env create mode 100644 appstore/movie-pilot/1.9.17/envs/movie-pilot.env create mode 100644 appstore/movie-pilot/1.9.17/scripts/init.sh create mode 100644 appstore/movie-pilot/1.9.17/scripts/uninstall.sh create mode 100644 appstore/movie-pilot/1.9.17/scripts/upgrade.sh create mode 100644 appstore/movie-pilot/2.1.0/.env create mode 100644 appstore/movie-pilot/2.1.0/data.yml create mode 100644 appstore/movie-pilot/2.1.0/docker-compose.yml create mode 100644 appstore/movie-pilot/2.1.0/envs/default.env create mode 100644 appstore/movie-pilot/2.1.0/envs/global.env create mode 100644 appstore/movie-pilot/2.1.0/envs/movie-pilot.env create mode 100644 appstore/movie-pilot/2.1.0/scripts/init.sh create mode 100644 appstore/movie-pilot/2.1.0/scripts/uninstall.sh create mode 100644 appstore/movie-pilot/2.1.0/scripts/upgrade.sh create mode 100644 appstore/movie-pilot/README.md create mode 100644 appstore/movie-pilot/data.yml create mode 100644 appstore/movie-pilot/logo.png create mode 100644 appstore/mysql/5.7.44/.env create mode 100644 appstore/mysql/5.7.44/config/my.cnf create mode 100644 appstore/mysql/5.7.44/data.yml create mode 100644 appstore/mysql/5.7.44/docker-compose.yml create mode 100644 appstore/mysql/5.7.44/envs/default.env create mode 100644 appstore/mysql/5.7.44/envs/global.env create mode 100644 appstore/mysql/5.7.44/scripts/init.sh create mode 100644 appstore/mysql/5.7.44/scripts/uninstall.sh create mode 100644 appstore/mysql/5.7.44/scripts/upgrade.sh create mode 100644 appstore/mysql/8.4.3/.env create mode 100644 appstore/mysql/8.4.3/config/my.cnf create mode 100644 appstore/mysql/8.4.3/data.yml create mode 100644 appstore/mysql/8.4.3/docker-compose.yml create mode 100644 appstore/mysql/8.4.3/envs/default.env create mode 100644 appstore/mysql/8.4.3/envs/global.env create mode 100644 appstore/mysql/8.4.3/scripts/init.sh create mode 100644 appstore/mysql/8.4.3/scripts/uninstall.sh create mode 100644 appstore/mysql/8.4.3/scripts/upgrade.sh create mode 100644 appstore/mysql/README.md create mode 100644 appstore/mysql/data.yml create mode 100644 appstore/mysql/logo.png create mode 100644 appstore/nacos/2.4.3/.env create mode 100644 appstore/nacos/2.4.3/data.yml create mode 100644 appstore/nacos/2.4.3/docker-compose.yml create mode 100644 appstore/nacos/2.4.3/envs/default.env create mode 100644 appstore/nacos/2.4.3/envs/global.env create mode 100644 appstore/nacos/2.4.3/init/mysql-schema.sql create mode 100644 appstore/nacos/2.4.3/scripts/init.sh create mode 100644 appstore/nacos/2.4.3/scripts/uninstall.sh create mode 100644 appstore/nacos/2.4.3/scripts/upgrade.sh create mode 100644 appstore/nacos/README.md create mode 100644 appstore/nacos/data.yml create mode 100644 appstore/nacos/logo.png create mode 100644 appstore/nexusphp/1.8.16/.env create mode 100644 appstore/nexusphp/1.8.16/data.yml create mode 100644 appstore/nexusphp/1.8.16/docker-compose.yml create mode 100644 appstore/nexusphp/1.8.16/envs/default.env create mode 100644 appstore/nexusphp/1.8.16/envs/global.env create mode 100644 appstore/nexusphp/1.8.16/envs/nexusphp.env create mode 100644 appstore/nexusphp/1.8.16/scripts/init.sh create mode 100644 appstore/nexusphp/1.8.16/scripts/uninstall.sh create mode 100644 appstore/nexusphp/1.8.16/scripts/upgrade.sh create mode 100644 appstore/nexusphp/README.md create mode 100644 appstore/nexusphp/data.yml create mode 100644 appstore/nexusphp/logo.png create mode 100644 appstore/nezha-dash/1.5.5/.env create mode 100644 appstore/nezha-dash/1.5.5/data.yml create mode 100644 appstore/nezha-dash/1.5.5/docker-compose.yml create mode 100644 appstore/nezha-dash/1.5.5/envs/default.env create mode 100644 appstore/nezha-dash/1.5.5/envs/global.env create mode 100644 appstore/nezha-dash/1.5.5/scripts/init.sh create mode 100644 appstore/nezha-dash/1.5.5/scripts/uninstall.sh create mode 100644 appstore/nezha-dash/1.5.5/scripts/upgrade.sh create mode 100644 appstore/nezha-dash/README.md create mode 100644 appstore/nezha-dash/data.yml create mode 100644 appstore/nezha-dash/logo.png create mode 100644 appstore/nezha/0.20.13/.env create mode 100644 appstore/nezha/0.20.13/data.yml create mode 100644 appstore/nezha/0.20.13/data/config-example.yaml create mode 100644 appstore/nezha/0.20.13/docker-compose.yml create mode 100644 appstore/nezha/0.20.13/envs/default.env create mode 100644 appstore/nezha/0.20.13/envs/global.env create mode 100644 appstore/nezha/0.20.13/scripts/init.sh create mode 100644 appstore/nezha/0.20.13/scripts/uninstall.sh create mode 100644 appstore/nezha/0.20.13/scripts/upgrade.sh create mode 100644 appstore/nezha/README.md create mode 100644 appstore/nezha/data.yml create mode 100644 appstore/nezha/logo.png create mode 100644 appstore/nginx-ui/2.0.0/.env create mode 100644 appstore/nginx-ui/2.0.0/data.yml create mode 100644 appstore/nginx-ui/2.0.0/docker-compose.yml create mode 100644 appstore/nginx-ui/2.0.0/envs/default.env create mode 100644 appstore/nginx-ui/2.0.0/envs/global.env create mode 100644 appstore/nginx-ui/2.0.0/scripts/init.sh create mode 100644 appstore/nginx-ui/2.0.0/scripts/uninstall.sh create mode 100644 appstore/nginx-ui/2.0.0/scripts/upgrade.sh create mode 100644 appstore/nginx-ui/README.md create mode 100644 appstore/nginx-ui/data.yml create mode 100644 appstore/nginx-ui/logo.png create mode 100644 appstore/nocodb/0.258.3/.env create mode 100644 appstore/nocodb/0.258.3/data.yml create mode 100644 appstore/nocodb/0.258.3/docker-compose.yml create mode 100644 appstore/nocodb/0.258.3/envs/default.env create mode 100644 appstore/nocodb/0.258.3/envs/global.env create mode 100644 appstore/nocodb/0.258.3/scripts/init.sh create mode 100644 appstore/nocodb/0.258.3/scripts/uninstall.sh create mode 100644 appstore/nocodb/0.258.3/scripts/upgrade.sh create mode 100644 appstore/nocodb/README.md create mode 100644 appstore/nocodb/data.yml create mode 100644 appstore/nocodb/logo.png create mode 100644 appstore/onedev/11.5.3/.env create mode 100644 appstore/onedev/11.5.3/data.yml create mode 100644 appstore/onedev/11.5.3/docker-compose.yml create mode 100644 appstore/onedev/11.5.3/envs/default.env create mode 100644 appstore/onedev/11.5.3/envs/global.env create mode 100644 appstore/onedev/11.5.3/envs/onedev.env create mode 100644 appstore/onedev/11.5.3/scripts/init.sh create mode 100644 appstore/onedev/11.5.3/scripts/uninstall.sh create mode 100644 appstore/onedev/11.5.3/scripts/upgrade.sh create mode 100644 appstore/onedev/README.md create mode 100644 appstore/onedev/data.yml create mode 100644 appstore/onedev/logo.png create mode 100644 appstore/openfire/4.9.0/.env create mode 100644 appstore/openfire/4.9.0/data.yml create mode 100644 appstore/openfire/4.9.0/docker-compose.yml create mode 100644 appstore/openfire/4.9.0/envs/default.env create mode 100644 appstore/openfire/4.9.0/envs/global.env create mode 100644 appstore/openfire/4.9.0/scripts/init.sh create mode 100644 appstore/openfire/4.9.0/scripts/uninstall.sh create mode 100644 appstore/openfire/4.9.0/scripts/upgrade.sh create mode 100644 appstore/openfire/README.md create mode 100644 appstore/openfire/data.yml create mode 100644 appstore/openfire/logo.png create mode 100644 appstore/outline/0.81.1/.env create mode 100644 appstore/outline/0.81.1/data.yml create mode 100644 appstore/outline/0.81.1/docker-compose.yml create mode 100644 appstore/outline/0.81.1/envs/default.env create mode 100644 appstore/outline/0.81.1/envs/global.env create mode 100644 appstore/outline/0.81.1/envs/outline.env create mode 100644 appstore/outline/0.81.1/scripts/init.sh create mode 100644 appstore/outline/0.81.1/scripts/uninstall.sh create mode 100644 appstore/outline/0.81.1/scripts/upgrade.sh create mode 100644 appstore/outline/README.md create mode 100644 appstore/outline/data.yml create mode 100644 appstore/outline/logo.png create mode 100644 appstore/page-spy-web/1.9.6/.env create mode 100644 appstore/page-spy-web/1.9.6/data.yml create mode 100644 appstore/page-spy-web/1.9.6/docker-compose.yml create mode 100644 appstore/page-spy-web/1.9.6/envs/default.env create mode 100644 appstore/page-spy-web/1.9.6/envs/global.env create mode 100644 appstore/page-spy-web/1.9.6/scripts/init.sh create mode 100644 appstore/page-spy-web/1.9.6/scripts/uninstall.sh create mode 100644 appstore/page-spy-web/1.9.6/scripts/upgrade.sh create mode 100644 appstore/page-spy-web/README.md create mode 100644 appstore/page-spy-web/data.yml create mode 100644 appstore/page-spy-web/logo.png create mode 100644 appstore/percona/8.0/.env create mode 100644 appstore/percona/8.0/config/my.cnf create mode 100644 appstore/percona/8.0/data.yml create mode 100644 appstore/percona/8.0/docker-compose.yml create mode 100644 appstore/percona/8.0/envs/default.env create mode 100644 appstore/percona/8.0/envs/global.env create mode 100644 appstore/percona/8.0/scripts/init.sh create mode 100644 appstore/percona/8.0/scripts/uninstall.sh create mode 100644 appstore/percona/8.0/scripts/upgrade.sh create mode 100644 appstore/percona/README.md create mode 100644 appstore/percona/data.yml create mode 100644 appstore/percona/logo.png create mode 100644 appstore/photoprism/240915/.env create mode 100644 appstore/photoprism/240915/data.yml create mode 100644 appstore/photoprism/240915/docker-compose.yml create mode 100644 appstore/photoprism/240915/envs/default.env create mode 100644 appstore/photoprism/240915/envs/global.env create mode 100644 appstore/photoprism/240915/envs/photoprism.env create mode 100644 appstore/photoprism/240915/scripts/init.sh create mode 100644 appstore/photoprism/240915/scripts/uninstall.sh create mode 100644 appstore/photoprism/240915/scripts/upgrade.sh create mode 100644 appstore/photoprism/README.md create mode 100644 appstore/photoprism/data.yml create mode 100644 appstore/photoprism/logo.png create mode 100644 appstore/pingvin-share/1.6.1/.env create mode 100644 appstore/pingvin-share/1.6.1/data.yml create mode 100644 appstore/pingvin-share/1.6.1/docker-compose.yml create mode 100644 appstore/pingvin-share/1.6.1/envs/default.env create mode 100644 appstore/pingvin-share/1.6.1/envs/global.env create mode 100644 appstore/pingvin-share/1.6.1/scripts/init.sh create mode 100644 appstore/pingvin-share/1.6.1/scripts/uninstall.sh create mode 100644 appstore/pingvin-share/1.6.1/scripts/upgrade.sh create mode 100644 appstore/pingvin-share/README.md create mode 100644 appstore/pingvin-share/data.yml create mode 100644 appstore/pingvin-share/logo.png create mode 100644 appstore/pixman/1.8.2/.env create mode 100644 appstore/pixman/1.8.2/data.yml create mode 100644 appstore/pixman/1.8.2/docker-compose.yml create mode 100644 appstore/pixman/1.8.2/envs/default.env create mode 100644 appstore/pixman/1.8.2/envs/global.env create mode 100644 appstore/pixman/1.8.2/m3u/Adult.m3u create mode 100644 appstore/pixman/1.8.2/m3u/CCTV.m3u create mode 100644 appstore/pixman/1.8.2/m3u/CNTV.m3u create mode 100644 appstore/pixman/1.8.2/m3u/IPTV.m3u create mode 100644 appstore/pixman/1.8.2/scripts/init.sh create mode 100644 appstore/pixman/1.8.2/scripts/uninstall.sh create mode 100644 appstore/pixman/1.8.2/scripts/upgrade.sh create mode 100644 appstore/pixman/README.md create mode 100644 appstore/pixman/data.yml create mode 100644 appstore/pixman/logo.png create mode 100644 appstore/postgresql/16.6-alpine/.env create mode 100644 appstore/postgresql/16.6-alpine/data.yml create mode 100644 appstore/postgresql/16.6-alpine/docker-compose.yml create mode 100644 appstore/postgresql/16.6-alpine/envs/default.env create mode 100644 appstore/postgresql/16.6-alpine/envs/global.env create mode 100644 appstore/postgresql/16.6-alpine/scripts/init.sh create mode 100644 appstore/postgresql/16.6-alpine/scripts/uninstall.sh create mode 100644 appstore/postgresql/16.6-alpine/scripts/upgrade.sh create mode 100644 appstore/postgresql/16.6/.env create mode 100644 appstore/postgresql/16.6/data.yml create mode 100644 appstore/postgresql/16.6/docker-compose.yml create mode 100644 appstore/postgresql/16.6/envs/default.env create mode 100644 appstore/postgresql/16.6/envs/global.env create mode 100644 appstore/postgresql/16.6/scripts/init.sh create mode 100644 appstore/postgresql/16.6/scripts/uninstall.sh create mode 100644 appstore/postgresql/16.6/scripts/upgrade.sh create mode 100644 appstore/postgresql/17.2-alpine/.env create mode 100644 appstore/postgresql/17.2-alpine/data.yml create mode 100644 appstore/postgresql/17.2-alpine/docker-compose.yml create mode 100644 appstore/postgresql/17.2-alpine/envs/default.env create mode 100644 appstore/postgresql/17.2-alpine/envs/global.env create mode 100644 appstore/postgresql/17.2-alpine/scripts/init.sh create mode 100644 appstore/postgresql/17.2-alpine/scripts/uninstall.sh create mode 100644 appstore/postgresql/17.2-alpine/scripts/upgrade.sh create mode 100644 appstore/postgresql/17.2/.env create mode 100644 appstore/postgresql/17.2/data.yml create mode 100644 appstore/postgresql/17.2/docker-compose.yml create mode 100644 appstore/postgresql/17.2/envs/default.env create mode 100644 appstore/postgresql/17.2/envs/global.env create mode 100644 appstore/postgresql/17.2/scripts/init.sh create mode 100644 appstore/postgresql/17.2/scripts/uninstall.sh create mode 100644 appstore/postgresql/17.2/scripts/upgrade.sh create mode 100644 appstore/postgresql/README.md create mode 100644 appstore/postgresql/data.yml create mode 100644 appstore/postgresql/logo.png create mode 100644 appstore/postgresql/pg14-alpine/.env create mode 100644 appstore/postgresql/pg14-alpine/data.yml create mode 100644 appstore/postgresql/pg14-alpine/docker-compose.yml create mode 100644 appstore/postgresql/pg14-alpine/envs/default.env create mode 100644 appstore/postgresql/pg14-alpine/envs/global.env create mode 100644 appstore/postgresql/pg14-alpine/scripts/init.sh create mode 100644 appstore/postgresql/pg14-alpine/scripts/uninstall.sh create mode 100644 appstore/postgresql/pg14-alpine/scripts/upgrade.sh create mode 100644 appstore/postgresql/pg14-vectors/.env create mode 100644 appstore/postgresql/pg14-vectors/data.yml create mode 100644 appstore/postgresql/pg14-vectors/docker-compose.yml create mode 100644 appstore/postgresql/pg14-vectors/envs/default.env create mode 100644 appstore/postgresql/pg14-vectors/envs/global.env create mode 100644 appstore/postgresql/pg14-vectors/scripts/init.sh create mode 100644 appstore/postgresql/pg14-vectors/scripts/uninstall.sh create mode 100644 appstore/postgresql/pg14-vectors/scripts/upgrade.sh create mode 100644 appstore/postgresql/pg14/.env create mode 100644 appstore/postgresql/pg14/data.yml create mode 100644 appstore/postgresql/pg14/docker-compose.yml create mode 100644 appstore/postgresql/pg14/envs/default.env create mode 100644 appstore/postgresql/pg14/envs/global.env create mode 100644 appstore/postgresql/pg14/scripts/init.sh create mode 100644 appstore/postgresql/pg14/scripts/uninstall.sh create mode 100644 appstore/postgresql/pg14/scripts/upgrade.sh create mode 100644 appstore/postgresql/pg15-alpine/.env create mode 100644 appstore/postgresql/pg15-alpine/data.yml create mode 100644 appstore/postgresql/pg15-alpine/docker-compose.yml create mode 100644 appstore/postgresql/pg15-alpine/envs/default.env create mode 100644 appstore/postgresql/pg15-alpine/envs/global.env create mode 100644 appstore/postgresql/pg15-alpine/scripts/init.sh create mode 100644 appstore/postgresql/pg15-alpine/scripts/uninstall.sh create mode 100644 appstore/postgresql/pg15-alpine/scripts/upgrade.sh create mode 100644 appstore/postgresql/pg15-vectors/.env create mode 100644 appstore/postgresql/pg15-vectors/data.yml create mode 100644 appstore/postgresql/pg15-vectors/docker-compose.yml create mode 100644 appstore/postgresql/pg15-vectors/envs/default.env create mode 100644 appstore/postgresql/pg15-vectors/envs/global.env create mode 100644 appstore/postgresql/pg15-vectors/scripts/init.sh create mode 100644 appstore/postgresql/pg15-vectors/scripts/uninstall.sh create mode 100644 appstore/postgresql/pg15-vectors/scripts/upgrade.sh create mode 100644 appstore/postgresql/pg15/.env create mode 100644 appstore/postgresql/pg15/data.yml create mode 100644 appstore/postgresql/pg15/docker-compose.yml create mode 100644 appstore/postgresql/pg15/envs/default.env create mode 100644 appstore/postgresql/pg15/envs/global.env create mode 100644 appstore/postgresql/pg15/scripts/init.sh create mode 100644 appstore/postgresql/pg15/scripts/uninstall.sh create mode 100644 appstore/postgresql/pg15/scripts/upgrade.sh create mode 100644 appstore/postgresql/pg16-alpine/.env create mode 100644 appstore/postgresql/pg16-alpine/data.yml create mode 100644 appstore/postgresql/pg16-alpine/docker-compose.yml create mode 100644 appstore/postgresql/pg16-alpine/envs/default.env create mode 100644 appstore/postgresql/pg16-alpine/envs/global.env create mode 100644 appstore/postgresql/pg16-alpine/scripts/init.sh create mode 100644 appstore/postgresql/pg16-alpine/scripts/uninstall.sh create mode 100644 appstore/postgresql/pg16-alpine/scripts/upgrade.sh create mode 100644 appstore/postgresql/pg16-vectors/.env create mode 100644 appstore/postgresql/pg16-vectors/data.yml create mode 100644 appstore/postgresql/pg16-vectors/docker-compose.yml create mode 100644 appstore/postgresql/pg16-vectors/envs/default.env create mode 100644 appstore/postgresql/pg16-vectors/envs/global.env create mode 100644 appstore/postgresql/pg16-vectors/scripts/init.sh create mode 100644 appstore/postgresql/pg16-vectors/scripts/uninstall.sh create mode 100644 appstore/postgresql/pg16-vectors/scripts/upgrade.sh create mode 100644 appstore/postgresql/pg16/.env create mode 100644 appstore/postgresql/pg16/data.yml create mode 100644 appstore/postgresql/pg16/docker-compose.yml create mode 100644 appstore/postgresql/pg16/envs/default.env create mode 100644 appstore/postgresql/pg16/envs/global.env create mode 100644 appstore/postgresql/pg16/scripts/init.sh create mode 100644 appstore/postgresql/pg16/scripts/uninstall.sh create mode 100644 appstore/postgresql/pg16/scripts/upgrade.sh create mode 100644 appstore/prowlarr/1.27.0/.env create mode 100644 appstore/prowlarr/1.27.0/data.yml create mode 100644 appstore/prowlarr/1.27.0/docker-compose.yml create mode 100644 appstore/prowlarr/1.27.0/envs/default.env create mode 100644 appstore/prowlarr/1.27.0/envs/global.env create mode 100644 appstore/prowlarr/1.27.0/scripts/init.sh create mode 100644 appstore/prowlarr/1.27.0/scripts/uninstall.sh create mode 100644 appstore/prowlarr/1.27.0/scripts/upgrade.sh create mode 100644 appstore/prowlarr/README.md create mode 100644 appstore/prowlarr/data.yml create mode 100644 appstore/prowlarr/logo.png create mode 100644 appstore/puff/0.2.2/.env create mode 100644 appstore/puff/0.2.2/data.yml create mode 100644 appstore/puff/0.2.2/docker-compose.yml create mode 100644 appstore/puff/0.2.2/envs/default.env create mode 100644 appstore/puff/0.2.2/envs/global.env create mode 100644 appstore/puff/0.2.2/scripts/init.sh create mode 100644 appstore/puff/0.2.2/scripts/uninstall.sh create mode 100644 appstore/puff/0.2.2/scripts/upgrade.sh create mode 100644 appstore/puff/README.md create mode 100644 appstore/puff/data.yml create mode 100644 appstore/puff/logo.png create mode 100644 appstore/qbittorrent/4.6.7/.env create mode 100644 appstore/qbittorrent/4.6.7/data.yml create mode 100644 appstore/qbittorrent/4.6.7/docker-compose.yml create mode 100644 appstore/qbittorrent/4.6.7/envs/default.env create mode 100644 appstore/qbittorrent/4.6.7/envs/global.env create mode 100644 appstore/qbittorrent/4.6.7/scripts/init.sh create mode 100644 appstore/qbittorrent/4.6.7/scripts/uninstall.sh create mode 100644 appstore/qbittorrent/4.6.7/scripts/upgrade.sh create mode 100644 appstore/qbittorrent/5.0.2/.env create mode 100644 appstore/qbittorrent/5.0.2/data.yml create mode 100644 appstore/qbittorrent/5.0.2/docker-compose.yml create mode 100644 appstore/qbittorrent/5.0.2/envs/default.env create mode 100644 appstore/qbittorrent/5.0.2/envs/global.env create mode 100644 appstore/qbittorrent/5.0.2/scripts/init.sh create mode 100644 appstore/qbittorrent/5.0.2/scripts/uninstall.sh create mode 100644 appstore/qbittorrent/5.0.2/scripts/upgrade.sh create mode 100644 appstore/qbittorrent/README.md create mode 100644 appstore/qbittorrent/data.yml create mode 100644 appstore/qbittorrent/logo.png create mode 100644 appstore/qinglong/2.17.12/.env create mode 100644 appstore/qinglong/2.17.12/data.yml create mode 100644 appstore/qinglong/2.17.12/docker-compose.yml create mode 100644 appstore/qinglong/2.17.12/envs/default.env create mode 100644 appstore/qinglong/2.17.12/envs/global.env create mode 100644 appstore/qinglong/2.17.12/scripts/init.sh create mode 100644 appstore/qinglong/2.17.12/scripts/uninstall.sh create mode 100644 appstore/qinglong/2.17.12/scripts/upgrade.sh create mode 100644 appstore/qinglong/README.md create mode 100644 appstore/qinglong/data.yml create mode 100644 appstore/qinglong/logo.png create mode 100644 appstore/radarr/5.15.1/.env create mode 100644 appstore/radarr/5.15.1/data.yml create mode 100644 appstore/radarr/5.15.1/docker-compose.yml create mode 100644 appstore/radarr/5.15.1/envs/default.env create mode 100644 appstore/radarr/5.15.1/envs/global.env create mode 100644 appstore/radarr/5.15.1/scripts/init.sh create mode 100644 appstore/radarr/5.15.1/scripts/uninstall.sh create mode 100644 appstore/radarr/5.15.1/scripts/upgrade.sh create mode 100644 appstore/radarr/README.md create mode 100644 appstore/radarr/data.yml create mode 100644 appstore/radarr/logo.png create mode 100644 appstore/reader3-webview/3.2.0/.env create mode 100644 appstore/reader3-webview/3.2.0/data.yml create mode 100644 appstore/reader3-webview/3.2.0/docker-compose.yml create mode 100644 appstore/reader3-webview/3.2.0/envs/default.env create mode 100644 appstore/reader3-webview/3.2.0/envs/global.env create mode 100644 appstore/reader3-webview/3.2.0/scripts/init.sh create mode 100644 appstore/reader3-webview/3.2.0/scripts/uninstall.sh create mode 100644 appstore/reader3-webview/3.2.0/scripts/upgrade.sh create mode 100644 appstore/reader3-webview/README.md create mode 100644 appstore/reader3-webview/data.yml create mode 100644 appstore/reader3-webview/logo.png create mode 100644 appstore/reader3/3.2.10/.env create mode 100644 appstore/reader3/3.2.10/data.yml create mode 100644 appstore/reader3/3.2.10/docker-compose.yml create mode 100644 appstore/reader3/3.2.10/envs/default.env create mode 100644 appstore/reader3/3.2.10/envs/global.env create mode 100644 appstore/reader3/3.2.10/scripts/init.sh create mode 100644 appstore/reader3/3.2.10/scripts/uninstall.sh create mode 100644 appstore/reader3/3.2.10/scripts/upgrade.sh create mode 100644 appstore/reader3/README.md create mode 100644 appstore/reader3/data.yml create mode 100644 appstore/reader3/logo.png create mode 100644 appstore/redis/6.2.16/.env create mode 100644 appstore/redis/6.2.16/config/redis.conf create mode 100644 appstore/redis/6.2.16/data.yml create mode 100644 appstore/redis/6.2.16/docker-compose.yml create mode 100644 appstore/redis/6.2.16/envs/default.env create mode 100644 appstore/redis/6.2.16/envs/global.env create mode 100644 appstore/redis/6.2.16/scripts/init.sh create mode 100644 appstore/redis/6.2.16/scripts/uninstall.sh create mode 100644 appstore/redis/6.2.16/scripts/upgrade.sh create mode 100644 appstore/redis/7.4.1/.env create mode 100644 appstore/redis/7.4.1/config/redis.conf create mode 100644 appstore/redis/7.4.1/data.yml create mode 100644 appstore/redis/7.4.1/docker-compose.yml create mode 100644 appstore/redis/7.4.1/envs/default.env create mode 100644 appstore/redis/7.4.1/envs/global.env create mode 100644 appstore/redis/7.4.1/scripts/init.sh create mode 100644 appstore/redis/7.4.1/scripts/uninstall.sh create mode 100644 appstore/redis/7.4.1/scripts/upgrade.sh create mode 100644 appstore/redis/README.md create mode 100644 appstore/redis/data.yml create mode 100644 appstore/redis/logo.png create mode 100644 appstore/rsshub/2024-11-28/.env create mode 100644 appstore/rsshub/2024-11-28/data.yml create mode 100644 appstore/rsshub/2024-11-28/docker-compose.yml create mode 100644 appstore/rsshub/2024-11-28/envs/default.env create mode 100644 appstore/rsshub/2024-11-28/envs/global.env create mode 100644 appstore/rsshub/2024-11-28/scripts/init.sh create mode 100644 appstore/rsshub/2024-11-28/scripts/uninstall.sh create mode 100644 appstore/rsshub/2024-11-28/scripts/upgrade.sh create mode 100644 appstore/rsshub/README.md create mode 100644 appstore/rsshub/data.yml create mode 100644 appstore/rsshub/logo.png create mode 100644 appstore/sentinel/1.8.8/.env create mode 100644 appstore/sentinel/1.8.8/data.yml create mode 100644 appstore/sentinel/1.8.8/docker-compose.yml create mode 100644 appstore/sentinel/1.8.8/envs/default.env create mode 100644 appstore/sentinel/1.8.8/envs/global.env create mode 100644 appstore/sentinel/1.8.8/scripts/init.sh create mode 100644 appstore/sentinel/1.8.8/scripts/uninstall.sh create mode 100644 appstore/sentinel/1.8.8/scripts/upgrade.sh create mode 100644 appstore/sentinel/README.md create mode 100644 appstore/sentinel/data.yml create mode 100644 appstore/sentinel/logo.png create mode 100644 appstore/shiori/1.7.1/.env create mode 100644 appstore/shiori/1.7.1/data.yml create mode 100644 appstore/shiori/1.7.1/docker-compose.yml create mode 100644 appstore/shiori/1.7.1/envs/default.env create mode 100644 appstore/shiori/1.7.1/envs/global.env create mode 100644 appstore/shiori/1.7.1/scripts/init.sh create mode 100644 appstore/shiori/1.7.1/scripts/uninstall.sh create mode 100644 appstore/shiori/1.7.1/scripts/upgrade.sh create mode 100644 appstore/shiori/README.md create mode 100644 appstore/shiori/data.yml create mode 100644 appstore/shiori/logo.png create mode 100644 appstore/siyuan/3.1.13/.env create mode 100644 appstore/siyuan/3.1.13/data.yml create mode 100644 appstore/siyuan/3.1.13/docker-compose.yml create mode 100644 appstore/siyuan/3.1.13/envs/default.env create mode 100644 appstore/siyuan/3.1.13/envs/global.env create mode 100644 appstore/siyuan/3.1.13/scripts/init.sh create mode 100644 appstore/siyuan/3.1.13/scripts/uninstall.sh create mode 100644 appstore/siyuan/3.1.13/scripts/upgrade.sh create mode 100644 appstore/siyuan/README.md create mode 100644 appstore/siyuan/data.yml create mode 100644 appstore/siyuan/logo.png create mode 100644 appstore/slink/1.2.1/.env create mode 100644 appstore/slink/1.2.1/data.yml create mode 100644 appstore/slink/1.2.1/docker-compose.yml create mode 100644 appstore/slink/1.2.1/envs/default.env create mode 100644 appstore/slink/1.2.1/envs/global.env create mode 100644 appstore/slink/1.2.1/scripts/init.sh create mode 100644 appstore/slink/1.2.1/scripts/uninstall.sh create mode 100644 appstore/slink/1.2.1/scripts/upgrade.sh create mode 100644 appstore/slink/README.md create mode 100644 appstore/slink/data.yml create mode 100644 appstore/slink/logo.png create mode 100644 appstore/sonarr/4.0.11/.env create mode 100644 appstore/sonarr/4.0.11/data.yml create mode 100644 appstore/sonarr/4.0.11/docker-compose.yml create mode 100644 appstore/sonarr/4.0.11/envs/default.env create mode 100644 appstore/sonarr/4.0.11/envs/global.env create mode 100644 appstore/sonarr/4.0.11/scripts/init.sh create mode 100644 appstore/sonarr/4.0.11/scripts/uninstall.sh create mode 100644 appstore/sonarr/4.0.11/scripts/upgrade.sh create mode 100644 appstore/sonarr/README.md create mode 100644 appstore/sonarr/data.yml create mode 100644 appstore/sonarr/logo.png create mode 100644 appstore/speedtest-tracker-sqlite/0.24.3/.env create mode 100644 appstore/speedtest-tracker-sqlite/0.24.3/data.yml create mode 100644 appstore/speedtest-tracker-sqlite/0.24.3/docker-compose.yml create mode 100644 appstore/speedtest-tracker-sqlite/0.24.3/envs/default.env create mode 100644 appstore/speedtest-tracker-sqlite/0.24.3/envs/global.env create mode 100644 appstore/speedtest-tracker-sqlite/0.24.3/scripts/init.sh create mode 100644 appstore/speedtest-tracker-sqlite/0.24.3/scripts/uninstall.sh create mode 100644 appstore/speedtest-tracker-sqlite/0.24.3/scripts/upgrade.sh create mode 100644 appstore/speedtest-tracker-sqlite/README.md create mode 100644 appstore/speedtest-tracker-sqlite/data.yml create mode 100644 appstore/speedtest-tracker-sqlite/logo.png create mode 100644 appstore/speedtest-tracker/0.24.3/.env create mode 100644 appstore/speedtest-tracker/0.24.3/data.yml create mode 100644 appstore/speedtest-tracker/0.24.3/docker-compose.yml create mode 100644 appstore/speedtest-tracker/0.24.3/envs/default.env create mode 100644 appstore/speedtest-tracker/0.24.3/envs/global.env create mode 100644 appstore/speedtest-tracker/0.24.3/scripts/init.sh create mode 100644 appstore/speedtest-tracker/0.24.3/scripts/uninstall.sh create mode 100644 appstore/speedtest-tracker/0.24.3/scripts/upgrade.sh create mode 100644 appstore/speedtest-tracker/README.md create mode 100644 appstore/speedtest-tracker/data.yml create mode 100644 appstore/speedtest-tracker/logo.png create mode 100644 appstore/speedtest/5.4.1/.env create mode 100644 appstore/speedtest/5.4.1/data.yml create mode 100644 appstore/speedtest/5.4.1/docker-compose.yml create mode 100644 appstore/speedtest/5.4.1/envs/default.env create mode 100644 appstore/speedtest/5.4.1/envs/global.env create mode 100644 appstore/speedtest/5.4.1/scripts/init.sh create mode 100644 appstore/speedtest/5.4.1/scripts/uninstall.sh create mode 100644 appstore/speedtest/5.4.1/scripts/upgrade.sh create mode 100644 appstore/speedtest/README.md create mode 100644 appstore/speedtest/data.yml create mode 100644 appstore/speedtest/logo.png create mode 100644 appstore/stream-rec-backend/0.7.2/.env create mode 100644 appstore/stream-rec-backend/0.7.2/data.yml create mode 100644 appstore/stream-rec-backend/0.7.2/docker-compose.yml create mode 100644 appstore/stream-rec-backend/0.7.2/envs/default.env create mode 100644 appstore/stream-rec-backend/0.7.2/envs/global.env create mode 100644 appstore/stream-rec-backend/0.7.2/scripts/init.sh create mode 100644 appstore/stream-rec-backend/0.7.2/scripts/uninstall.sh create mode 100644 appstore/stream-rec-backend/0.7.2/scripts/upgrade.sh create mode 100644 appstore/stream-rec-backend/README.md create mode 100644 appstore/stream-rec-backend/data.yml create mode 100644 appstore/stream-rec-backend/logo.png create mode 100644 appstore/stream-rec-frontend/0.7.2/.env create mode 100644 appstore/stream-rec-frontend/0.7.2/data.yml create mode 100644 appstore/stream-rec-frontend/0.7.2/docker-compose.yml create mode 100644 appstore/stream-rec-frontend/0.7.2/envs/default.env create mode 100644 appstore/stream-rec-frontend/0.7.2/envs/global.env create mode 100644 appstore/stream-rec-frontend/0.7.2/scripts/init.sh create mode 100644 appstore/stream-rec-frontend/0.7.2/scripts/uninstall.sh create mode 100644 appstore/stream-rec-frontend/0.7.2/scripts/upgrade.sh create mode 100644 appstore/stream-rec-frontend/README.md create mode 100644 appstore/stream-rec-frontend/data.yml create mode 100644 appstore/stream-rec-frontend/logo.png create mode 100644 appstore/stream-rec/0.7.2/.env create mode 100644 appstore/stream-rec/0.7.2/data.yml create mode 100644 appstore/stream-rec/0.7.2/docker-compose.yml create mode 100644 appstore/stream-rec/0.7.2/envs/default.env create mode 100644 appstore/stream-rec/0.7.2/envs/global.env create mode 100644 appstore/stream-rec/0.7.2/scripts/init.sh create mode 100644 appstore/stream-rec/0.7.2/scripts/uninstall.sh create mode 100644 appstore/stream-rec/0.7.2/scripts/upgrade.sh create mode 100644 appstore/stream-rec/README.md create mode 100644 appstore/stream-rec/data.yml create mode 100644 appstore/stream-rec/logo.png create mode 100644 appstore/sun-panel/1.6.0/.env create mode 100644 appstore/sun-panel/1.6.0/data.yml create mode 100644 appstore/sun-panel/1.6.0/docker-compose.yml create mode 100644 appstore/sun-panel/1.6.0/envs/default.env create mode 100644 appstore/sun-panel/1.6.0/envs/global.env create mode 100644 appstore/sun-panel/1.6.0/scripts/init.sh create mode 100644 appstore/sun-panel/1.6.0/scripts/uninstall.sh create mode 100644 appstore/sun-panel/1.6.0/scripts/upgrade.sh create mode 100644 appstore/sun-panel/README.md create mode 100644 appstore/sun-panel/data.yml create mode 100644 appstore/sun-panel/logo.png create mode 100644 appstore/synapse-admin/0.10.3/.env create mode 100644 appstore/synapse-admin/0.10.3/data.yml create mode 100644 appstore/synapse-admin/0.10.3/docker-compose.yml create mode 100644 appstore/synapse-admin/0.10.3/envs/default.env create mode 100644 appstore/synapse-admin/0.10.3/envs/global.env create mode 100644 appstore/synapse-admin/0.10.3/scripts/init.sh create mode 100644 appstore/synapse-admin/0.10.3/scripts/uninstall.sh create mode 100644 appstore/synapse-admin/0.10.3/scripts/upgrade.sh create mode 100644 appstore/synapse-admin/README.md create mode 100644 appstore/synapse-admin/data.yml create mode 100644 appstore/synapse-admin/logo.png create mode 100644 appstore/synapse/1.120.0/.env create mode 100644 appstore/synapse/1.120.0/data.yml create mode 100644 appstore/synapse/1.120.0/docker-compose.yml create mode 100644 appstore/synapse/1.120.0/envs/default.env create mode 100644 appstore/synapse/1.120.0/envs/global.env create mode 100644 appstore/synapse/1.120.0/scripts/init.sh create mode 100644 appstore/synapse/1.120.0/scripts/uninstall.sh create mode 100644 appstore/synapse/1.120.0/scripts/upgrade.sh create mode 100644 appstore/synapse/README.md create mode 100644 appstore/synapse/data.yml create mode 100644 appstore/synapse/logo.png create mode 100644 appstore/tangsengdaodao/1.5/.env create mode 100644 appstore/tangsengdaodao/1.5/data.yml create mode 100644 appstore/tangsengdaodao/1.5/docker-compose.yml create mode 100644 appstore/tangsengdaodao/1.5/envs/default.env create mode 100644 appstore/tangsengdaodao/1.5/envs/global.env create mode 100644 appstore/tangsengdaodao/1.5/scripts/init.sh create mode 100644 appstore/tangsengdaodao/1.5/scripts/uninstall.sh create mode 100644 appstore/tangsengdaodao/1.5/scripts/upgrade.sh create mode 100644 appstore/tangsengdaodao/README.md create mode 100644 appstore/tangsengdaodao/data.yml create mode 100644 appstore/tangsengdaodao/logo.png create mode 100644 appstore/teemii/0.8.2/.env create mode 100644 appstore/teemii/0.8.2/data.yml create mode 100644 appstore/teemii/0.8.2/docker-compose.yml create mode 100644 appstore/teemii/0.8.2/envs/default.env create mode 100644 appstore/teemii/0.8.2/envs/global.env create mode 100644 appstore/teemii/0.8.2/scripts/init.sh create mode 100644 appstore/teemii/0.8.2/scripts/uninstall.sh create mode 100644 appstore/teemii/0.8.2/scripts/upgrade.sh create mode 100644 appstore/teemii/README.md create mode 100644 appstore/teemii/data.yml create mode 100644 appstore/teemii/logo.png create mode 100644 appstore/telegram-bot-api/8.0/.env create mode 100644 appstore/telegram-bot-api/8.0/data.yml create mode 100644 appstore/telegram-bot-api/8.0/docker-compose.yml create mode 100644 appstore/telegram-bot-api/8.0/envs/default.env create mode 100644 appstore/telegram-bot-api/8.0/envs/global.env create mode 100644 appstore/telegram-bot-api/8.0/scripts/init.sh create mode 100644 appstore/telegram-bot-api/8.0/scripts/uninstall.sh create mode 100644 appstore/telegram-bot-api/8.0/scripts/upgrade.sh create mode 100644 appstore/telegram-bot-api/README.md create mode 100644 appstore/telegram-bot-api/data.yml create mode 100644 appstore/telegram-bot-api/logo.png create mode 100644 appstore/traccar/6.5/.env create mode 100644 appstore/traccar/6.5/conf/traccar.xml create mode 100644 appstore/traccar/6.5/data.yml create mode 100644 appstore/traccar/6.5/docker-compose.yml create mode 100644 appstore/traccar/6.5/envs/default.env create mode 100644 appstore/traccar/6.5/envs/global.env create mode 100644 appstore/traccar/6.5/scripts/init.sh create mode 100644 appstore/traccar/6.5/scripts/uninstall.sh create mode 100644 appstore/traccar/6.5/scripts/upgrade.sh create mode 100644 appstore/traccar/README.md create mode 100644 appstore/traccar/data.yml create mode 100644 appstore/traccar/logo.png create mode 100644 appstore/transmission/4.0.6/.env create mode 100644 appstore/transmission/4.0.6/data.yml create mode 100644 appstore/transmission/4.0.6/docker-compose.yml create mode 100644 appstore/transmission/4.0.6/envs/default.env create mode 100644 appstore/transmission/4.0.6/envs/global.env create mode 100644 appstore/transmission/4.0.6/scripts/init.sh create mode 100644 appstore/transmission/4.0.6/scripts/uninstall.sh create mode 100644 appstore/transmission/4.0.6/scripts/upgrade.sh create mode 100644 appstore/transmission/README.md create mode 100644 appstore/transmission/data.yml create mode 100644 appstore/transmission/logo.png create mode 100644 appstore/umami-mysql/2.14.0/.env create mode 100644 appstore/umami-mysql/2.14.0/data.yml create mode 100644 appstore/umami-mysql/2.14.0/docker-compose.yml create mode 100644 appstore/umami-mysql/2.14.0/envs/default.env create mode 100644 appstore/umami-mysql/2.14.0/envs/global.env create mode 100644 appstore/umami-mysql/2.14.0/scripts/init.sh create mode 100644 appstore/umami-mysql/2.14.0/scripts/uninstall.sh create mode 100644 appstore/umami-mysql/2.14.0/scripts/upgrade.sh create mode 100644 appstore/umami-mysql/README.md create mode 100644 appstore/umami-mysql/data.yml create mode 100644 appstore/umami-mysql/logo.png create mode 100644 appstore/umami/2.14.0/.env create mode 100644 appstore/umami/2.14.0/data.yml create mode 100644 appstore/umami/2.14.0/docker-compose.yml create mode 100644 appstore/umami/2.14.0/envs/default.env create mode 100644 appstore/umami/2.14.0/envs/global.env create mode 100644 appstore/umami/2.14.0/scripts/init.sh create mode 100644 appstore/umami/2.14.0/scripts/uninstall.sh create mode 100644 appstore/umami/2.14.0/scripts/upgrade.sh create mode 100644 appstore/umami/README.md create mode 100644 appstore/umami/data.yml create mode 100644 appstore/umami/logo.png create mode 100644 appstore/uptime-kuma/1.23.15/.env create mode 100644 appstore/uptime-kuma/1.23.15/data.yml create mode 100644 appstore/uptime-kuma/1.23.15/docker-compose.yml create mode 100644 appstore/uptime-kuma/1.23.15/envs/default.env create mode 100644 appstore/uptime-kuma/1.23.15/envs/global.env create mode 100644 appstore/uptime-kuma/1.23.15/scripts/init.sh create mode 100644 appstore/uptime-kuma/1.23.15/scripts/uninstall.sh create mode 100644 appstore/uptime-kuma/1.23.15/scripts/upgrade.sh create mode 100644 appstore/uptime-kuma/2.0.0/.env create mode 100644 appstore/uptime-kuma/2.0.0/data.yml create mode 100644 appstore/uptime-kuma/2.0.0/docker-compose.yml create mode 100644 appstore/uptime-kuma/2.0.0/envs/default.env create mode 100644 appstore/uptime-kuma/2.0.0/envs/global.env create mode 100644 appstore/uptime-kuma/2.0.0/scripts/init.sh create mode 100644 appstore/uptime-kuma/2.0.0/scripts/uninstall.sh create mode 100644 appstore/uptime-kuma/2.0.0/scripts/upgrade.sh create mode 100644 appstore/uptime-kuma/README.md create mode 100644 appstore/uptime-kuma/data.yml create mode 100644 appstore/uptime-kuma/logo.png create mode 100644 appstore/watchyourlan/2.0.4/.env create mode 100644 appstore/watchyourlan/2.0.4/data.yml create mode 100644 appstore/watchyourlan/2.0.4/docker-compose.yml create mode 100644 appstore/watchyourlan/2.0.4/envs/default.env create mode 100644 appstore/watchyourlan/2.0.4/envs/global.env create mode 100644 appstore/watchyourlan/2.0.4/scripts/init.sh create mode 100644 appstore/watchyourlan/2.0.4/scripts/uninstall.sh create mode 100644 appstore/watchyourlan/2.0.4/scripts/upgrade.sh create mode 100644 appstore/watchyourlan/README.md create mode 100644 appstore/watchyourlan/data.yml create mode 100644 appstore/watchyourlan/logo.png create mode 100644 appstore/windows/4.05/.env create mode 100644 appstore/windows/4.05/data.yml create mode 100644 appstore/windows/4.05/docker-compose.yml create mode 100644 appstore/windows/4.05/envs/default.env create mode 100644 appstore/windows/4.05/envs/global.env create mode 100644 appstore/windows/4.05/scripts/init.sh create mode 100644 appstore/windows/4.05/scripts/uninstall.sh create mode 100644 appstore/windows/4.05/scripts/upgrade.sh create mode 100644 appstore/windows/README.md create mode 100644 appstore/windows/data.yml create mode 100644 appstore/windows/logo.png create mode 100644 appstore/wiseflow/0.3.0/.env create mode 100644 appstore/wiseflow/0.3.0/data.yml create mode 100644 appstore/wiseflow/0.3.0/docker-compose.yml create mode 100644 appstore/wiseflow/0.3.0/envs/default.env create mode 100644 appstore/wiseflow/0.3.0/envs/global.env create mode 100644 appstore/wiseflow/0.3.0/scripts/init.sh create mode 100644 appstore/wiseflow/0.3.0/scripts/uninstall.sh create mode 100644 appstore/wiseflow/0.3.0/scripts/upgrade.sh create mode 100644 appstore/wiseflow/README.md create mode 100644 appstore/wiseflow/data.yml create mode 100644 appstore/wiseflow/logo.png create mode 100644 appstore/wukongim/1.2.6/.env create mode 100644 appstore/wukongim/1.2.6/data.yml create mode 100644 appstore/wukongim/1.2.6/docker-compose.yml create mode 100644 appstore/wukongim/1.2.6/envs/default.env create mode 100644 appstore/wukongim/1.2.6/envs/global.env create mode 100644 appstore/wukongim/1.2.6/scripts/init.sh create mode 100644 appstore/wukongim/1.2.6/scripts/uninstall.sh create mode 100644 appstore/wukongim/1.2.6/scripts/upgrade.sh create mode 100644 appstore/wukongim/README.md create mode 100644 appstore/wukongim/data.yml create mode 100644 appstore/wukongim/logo.png create mode 100644 appstore/xunlei-cnk3x/3.20.2/.env create mode 100644 appstore/xunlei-cnk3x/3.20.2/data.yml create mode 100644 appstore/xunlei-cnk3x/3.20.2/docker-compose.yml create mode 100644 appstore/xunlei-cnk3x/3.20.2/envs/default.env create mode 100644 appstore/xunlei-cnk3x/3.20.2/envs/global.env create mode 100644 appstore/xunlei-cnk3x/3.20.2/scripts/init.sh create mode 100644 appstore/xunlei-cnk3x/3.20.2/scripts/uninstall.sh create mode 100644 appstore/xunlei-cnk3x/3.20.2/scripts/upgrade.sh create mode 100644 appstore/xunlei-cnk3x/README.md create mode 100644 appstore/xunlei-cnk3x/data.yml create mode 100644 appstore/xunlei-cnk3x/logo.png create mode 100644 appstore/yarr/2.4.0/.env create mode 100644 appstore/yarr/2.4.0/data.yml create mode 100644 appstore/yarr/2.4.0/docker-compose.yml create mode 100644 appstore/yarr/2.4.0/envs/default.env create mode 100644 appstore/yarr/2.4.0/envs/global.env create mode 100644 appstore/yarr/2.4.0/scripts/init.sh create mode 100644 appstore/yarr/2.4.0/scripts/upgrade.sh create mode 100644 appstore/yarr/README.md create mode 100644 appstore/yarr/data.yml create mode 100644 appstore/yarr/logo.png create mode 100644 appstore/zerotier-planet/1.14.2/.env create mode 100644 appstore/zerotier-planet/1.14.2/data.yml create mode 100644 appstore/zerotier-planet/1.14.2/docker-compose.yml create mode 100644 appstore/zerotier-planet/1.14.2/envs/default.env create mode 100644 appstore/zerotier-planet/1.14.2/envs/global.env create mode 100644 appstore/zerotier-planet/1.14.2/scripts/init.sh create mode 100644 appstore/zerotier-planet/1.14.2/scripts/uninstall.sh create mode 100644 appstore/zerotier-planet/1.14.2/scripts/upgrade.sh create mode 100644 appstore/zerotier-planet/README.md create mode 100644 appstore/zerotier-planet/data.yml create mode 100644 appstore/zerotier-planet/logo.png create mode 100644 appstore/ztncui/1.2.17/.env create mode 100644 appstore/ztncui/1.2.17/data.yml create mode 100644 appstore/ztncui/1.2.17/docker-compose.yml create mode 100644 appstore/ztncui/1.2.17/envs/default.env create mode 100644 appstore/ztncui/1.2.17/envs/global.env create mode 100644 appstore/ztncui/1.2.17/scripts/init.sh create mode 100644 appstore/ztncui/1.2.17/scripts/uninstall.sh create mode 100644 appstore/ztncui/1.2.17/scripts/upgrade.sh create mode 100644 appstore/ztncui/README.md create mode 100644 appstore/ztncui/data.yml create mode 100644 appstore/ztncui/logo.png create mode 100644 dockge/acg-faka/.env create mode 100644 dockge/acg-faka/docker-compose.yml create mode 100644 dockge/acg-faka/envs/default.env create mode 100644 dockge/acg-faka/envs/global.env create mode 100644 dockge/alist-aria2/.env create mode 100644 dockge/alist-aria2/docker-compose.yml create mode 100644 dockge/alist-aria2/envs/default.env create mode 100644 dockge/alist-aria2/envs/global.env create mode 100644 dockge/alist-ffmpeg/.env create mode 100644 dockge/alist-ffmpeg/docker-compose.yml create mode 100644 dockge/alist-ffmpeg/envs/default.env create mode 100644 dockge/alist-ffmpeg/envs/global.env create mode 100644 dockge/alist/.env create mode 100644 dockge/alist/docker-compose.yml create mode 100644 dockge/alist/envs/default.env create mode 100644 dockge/alist/envs/global.env create mode 100644 dockge/ani-rss/.env create mode 100644 dockge/ani-rss/docker-compose.yml create mode 100644 dockge/ani-rss/envs/default.env create mode 100644 dockge/ani-rss/envs/global.env create mode 100644 dockge/artalk/.env create mode 100644 dockge/artalk/docker-compose.yml create mode 100644 dockge/artalk/envs/default.env create mode 100644 dockge/artalk/envs/global.env create mode 100644 dockge/auto-lady/.env create mode 100644 dockge/auto-lady/docker-compose.yml create mode 100644 dockge/auto-lady/envs/default.env create mode 100644 dockge/auto-lady/envs/global.env create mode 100644 dockge/baota/.env create mode 100644 dockge/baota/docker-compose.yml create mode 100644 dockge/baota/envs/default.env create mode 100644 dockge/baota/envs/global.env create mode 100644 dockge/bark/.env create mode 100644 dockge/bark/docker-compose.yml create mode 100644 dockge/bark/envs/default.env create mode 100644 dockge/bark/envs/global.env create mode 100644 dockge/bitmagnet/.env create mode 100644 dockge/bitmagnet/docker-compose.yml create mode 100644 dockge/bitmagnet/envs/default.env create mode 100644 dockge/bitmagnet/envs/global.env create mode 100644 dockge/casdoor/.env create mode 100644 dockge/casdoor/config/init_data.json create mode 100644 dockge/casdoor/docker-compose.yml create mode 100644 dockge/casdoor/envs/casdoor.env create mode 100644 dockge/casdoor/envs/default.env create mode 100644 dockge/casdoor/envs/global.env create mode 100644 dockge/certimate/.env create mode 100644 dockge/certimate/docker-compose.yml create mode 100644 dockge/certimate/envs/default.env create mode 100644 dockge/certimate/envs/global.env create mode 100644 dockge/cookie-cloud/.env create mode 100644 dockge/cookie-cloud/docker-compose.yml create mode 100644 dockge/cookie-cloud/envs/default.env create mode 100644 dockge/cookie-cloud/envs/global.env create mode 100644 dockge/deeplx/.env create mode 100644 dockge/deeplx/docker-compose.yml create mode 100644 dockge/deeplx/envs/default.env create mode 100644 dockge/deeplx/envs/global.env create mode 100644 dockge/dockge/.env create mode 100644 dockge/dockge/docker-compose.yml create mode 100644 dockge/dockge/envs/default.env create mode 100644 dockge/dockge/envs/global.env create mode 100644 dockge/dozzle/.env create mode 100644 dockge/dozzle/docker-compose.yml create mode 100644 dockge/dozzle/envs/default.env create mode 100644 dockge/dozzle/envs/global.env create mode 100644 dockge/dpanel-lite/.env create mode 100644 dockge/dpanel-lite/docker-compose.yml create mode 100644 dockge/dpanel-lite/envs/default.env create mode 100644 dockge/dpanel-lite/envs/global.env create mode 100644 dockge/dpanel/.env create mode 100644 dockge/dpanel/docker-compose.yml create mode 100644 dockge/dpanel/envs/default.env create mode 100644 dockge/dpanel/envs/global.env create mode 100644 dockge/dujiaoka/.env create mode 100644 dockge/dujiaoka/docker-compose.yml create mode 100644 dockge/dujiaoka/envs/default.env create mode 100644 dockge/dujiaoka/envs/global.env create mode 100644 dockge/elastic-elasticsearch/.env create mode 100644 dockge/elastic-elasticsearch/docker-compose.yml create mode 100644 dockge/elastic-elasticsearch/envs/default.env create mode 100644 dockge/elastic-elasticsearch/envs/global.env create mode 100644 dockge/elastic-kibana/.env create mode 100644 dockge/elastic-kibana/docker-compose.yml create mode 100644 dockge/elastic-kibana/envs/default.env create mode 100644 dockge/elastic-kibana/envs/global.env create mode 100644 dockge/element-web/.env create mode 100644 dockge/element-web/conf/config.sample.json create mode 100644 dockge/element-web/docker-compose.yml create mode 100644 dockge/element-web/envs/default.env create mode 100644 dockge/element-web/envs/global.env create mode 100644 dockge/emby-amilys/.env create mode 100644 dockge/emby-amilys/docker-compose.yml create mode 100644 dockge/emby-amilys/envs/default.env create mode 100644 dockge/emby-amilys/envs/global.env create mode 100644 dockge/emby-lovechen/.env create mode 100644 dockge/emby-lovechen/docker-compose.yml create mode 100644 dockge/emby-lovechen/envs/default.env create mode 100644 dockge/emby-lovechen/envs/global.env create mode 100644 dockge/emby/.env create mode 100644 dockge/emby/docker-compose.yml create mode 100644 dockge/emby/envs/default.env create mode 100644 dockge/emby/envs/global.env create mode 100644 dockge/ghost/.env create mode 100644 dockge/ghost/docker-compose.yml create mode 100644 dockge/ghost/envs/default.env create mode 100644 dockge/ghost/envs/global.env create mode 100644 dockge/gitea-runner/.env create mode 100644 dockge/gitea-runner/docker-compose.yml create mode 100644 dockge/gitea-runner/envs/default.env create mode 100644 dockge/gitea-runner/envs/global.env create mode 100644 dockge/gitea/.env create mode 100644 dockge/gitea/config/app.example.ini create mode 100644 dockge/gitea/docker-compose.yml create mode 100644 dockge/gitea/envs/default.env create mode 100644 dockge/gitea/envs/gitea.env create mode 100644 dockge/gitea/envs/global.env create mode 100644 dockge/halo/.env create mode 100644 dockge/halo/docker-compose.yml create mode 100644 dockge/halo/envs/default.env create mode 100644 dockge/halo/envs/global.env create mode 100644 dockge/iframely/.env create mode 100644 dockge/iframely/config/config.local.js create mode 100644 dockge/iframely/docker-compose.yml create mode 100644 dockge/iframely/envs/default.env create mode 100644 dockge/iframely/envs/global.env create mode 100644 dockge/immich-machine-learning/.env create mode 100644 dockge/immich-machine-learning/docker-compose.yml create mode 100644 dockge/immich-machine-learning/envs/default.env create mode 100644 dockge/immich-machine-learning/envs/global.env create mode 100644 dockge/immich-server/.env create mode 100644 dockge/immich-server/docker-compose.yml create mode 100644 dockge/immich-server/envs/default.env create mode 100644 dockge/immich-server/envs/global.env create mode 100644 dockge/immich/.env create mode 100644 dockge/immich/docker-compose.yml create mode 100644 dockge/immich/envs/default.env create mode 100644 dockge/immich/envs/global.env create mode 100644 dockge/iycms/.env create mode 100644 dockge/iycms/docker-compose.yml create mode 100644 dockge/iycms/envs/default.env create mode 100644 dockge/iycms/envs/global.env create mode 100644 dockge/iyuu-plus/.env create mode 100644 dockge/iyuu-plus/docker-compose.yml create mode 100644 dockge/iyuu-plus/envs/default.env create mode 100644 dockge/iyuu-plus/envs/global.env create mode 100644 dockge/jellyfin/.env create mode 100644 dockge/jellyfin/docker-compose.yml create mode 100644 dockge/jellyfin/envs/default.env create mode 100644 dockge/jellyfin/envs/global.env create mode 100644 dockge/jellyfin_10_10_3/.env create mode 100644 dockge/jellyfin_10_10_3/docker-compose.yml create mode 100644 dockge/jellyfin_10_10_3/envs/default.env create mode 100644 dockge/jellyfin_10_10_3/envs/global.env create mode 100644 dockge/jellyseerr/.env create mode 100644 dockge/jellyseerr/docker-compose.yml create mode 100644 dockge/jellyseerr/envs/default.env create mode 100644 dockge/jellyseerr/envs/global.env create mode 100644 dockge/jproxy/.env create mode 100644 dockge/jproxy/docker-compose.yml create mode 100644 dockge/jproxy/envs/default.env create mode 100644 dockge/jproxy/envs/global.env create mode 100644 dockge/kimai/.env create mode 100644 dockge/kimai/docker-compose.yml create mode 100644 dockge/kimai/envs/default.env create mode 100644 dockge/kimai/envs/global.env create mode 100644 dockge/limesurvey/.env create mode 100644 dockge/limesurvey/docker-compose.yml create mode 100644 dockge/limesurvey/envs/default.env create mode 100644 dockge/limesurvey/envs/global.env create mode 100644 dockge/linkding/.env create mode 100644 dockge/linkding/docker-compose.yml create mode 100644 dockge/linkding/envs/default.env create mode 100644 dockge/linkding/envs/global.env create mode 100644 dockge/maccms10/.env create mode 100644 dockge/maccms10/docker-compose.yml create mode 100644 dockge/maccms10/envs/default.env create mode 100644 dockge/maccms10/envs/global.env create mode 100644 dockge/macos/.env create mode 100644 dockge/macos/docker-compose.yml create mode 100644 dockge/macos/envs/default.env create mode 100644 dockge/macos/envs/global.env create mode 100644 dockge/mailserver/.env create mode 100644 dockge/mailserver/docker-compose.yml create mode 100644 dockge/mailserver/envs/default.env create mode 100644 dockge/mailserver/envs/global.env create mode 100644 dockge/mailserver/envs/mailserver.env create mode 100644 dockge/mariadb/.env create mode 100644 dockge/mariadb/config/my.cnf create mode 100644 dockge/mariadb/docker-compose.yml create mode 100644 dockge/mariadb/envs/default.env create mode 100644 dockge/mariadb/envs/global.env create mode 100644 dockge/maxkb/.env create mode 100644 dockge/maxkb/docker-compose.yml create mode 100644 dockge/maxkb/envs/default.env create mode 100644 dockge/maxkb/envs/global.env create mode 100644 dockge/mcy-shop/.env create mode 100644 dockge/mcy-shop/docker-compose.yml create mode 100644 dockge/mcy-shop/envs/default.env create mode 100644 dockge/mcy-shop/envs/global.env create mode 100644 dockge/mediacms/.env create mode 100644 dockge/mediacms/docker-compose.yml create mode 100644 dockge/mediacms/envs/default.env create mode 100644 dockge/mediacms/envs/global.env create mode 100644 dockge/metatube-server/.env create mode 100644 dockge/metatube-server/docker-compose.yml create mode 100644 dockge/metatube-server/envs/default.env create mode 100644 dockge/metatube-server/envs/global.env create mode 100644 dockge/minio/.env create mode 100644 dockge/minio/docker-compose.yml create mode 100644 dockge/minio/envs/default.env create mode 100644 dockge/minio/envs/global.env create mode 100644 dockge/movie-pilot/.env create mode 100644 dockge/movie-pilot/docker-compose.yml create mode 100644 dockge/movie-pilot/envs/default.env create mode 100644 dockge/movie-pilot/envs/global.env create mode 100644 dockge/movie-pilot/envs/movie-pilot.env create mode 100644 dockge/movie-pilot_1_9_17/.env create mode 100644 dockge/movie-pilot_1_9_17/docker-compose.yml create mode 100644 dockge/movie-pilot_1_9_17/envs/default.env create mode 100644 dockge/movie-pilot_1_9_17/envs/global.env create mode 100644 dockge/movie-pilot_1_9_17/envs/movie-pilot.env create mode 100644 dockge/mysql/.env create mode 100644 dockge/mysql/config/my.cnf create mode 100644 dockge/mysql/docker-compose.yml create mode 100644 dockge/mysql/envs/default.env create mode 100644 dockge/mysql/envs/global.env create mode 100644 dockge/mysql_5_7_44/.env create mode 100644 dockge/mysql_5_7_44/config/my.cnf create mode 100644 dockge/mysql_5_7_44/docker-compose.yml create mode 100644 dockge/mysql_5_7_44/envs/default.env create mode 100644 dockge/mysql_5_7_44/envs/global.env create mode 100644 dockge/nacos/.env create mode 100644 dockge/nacos/docker-compose.yml create mode 100644 dockge/nacos/envs/default.env create mode 100644 dockge/nacos/envs/global.env create mode 100644 dockge/nacos/init/mysql-schema.sql create mode 100644 dockge/nexusphp/.env create mode 100644 dockge/nexusphp/docker-compose.yml create mode 100644 dockge/nexusphp/envs/default.env create mode 100644 dockge/nexusphp/envs/global.env create mode 100644 dockge/nexusphp/envs/nexusphp.env create mode 100644 dockge/nezha-dash/.env create mode 100644 dockge/nezha-dash/docker-compose.yml create mode 100644 dockge/nezha-dash/envs/default.env create mode 100644 dockge/nezha-dash/envs/global.env create mode 100644 dockge/nezha/.env create mode 100644 dockge/nezha/data/config-example.yaml create mode 100644 dockge/nezha/docker-compose.yml create mode 100644 dockge/nezha/envs/default.env create mode 100644 dockge/nezha/envs/global.env create mode 100644 dockge/nginx-ui/.env create mode 100644 dockge/nginx-ui/docker-compose.yml create mode 100644 dockge/nginx-ui/envs/default.env create mode 100644 dockge/nginx-ui/envs/global.env create mode 100644 dockge/nocodb/.env create mode 100644 dockge/nocodb/docker-compose.yml create mode 100644 dockge/nocodb/envs/default.env create mode 100644 dockge/nocodb/envs/global.env create mode 100644 dockge/onedev/.env create mode 100644 dockge/onedev/docker-compose.yml create mode 100644 dockge/onedev/envs/default.env create mode 100644 dockge/onedev/envs/global.env create mode 100644 dockge/onedev/envs/onedev.env create mode 100644 dockge/openfire/.env create mode 100644 dockge/openfire/docker-compose.yml create mode 100644 dockge/openfire/envs/default.env create mode 100644 dockge/openfire/envs/global.env create mode 100644 dockge/outline/.env create mode 100644 dockge/outline/docker-compose.yml create mode 100644 dockge/outline/envs/default.env create mode 100644 dockge/outline/envs/global.env create mode 100644 dockge/outline/envs/outline.env create mode 100644 dockge/page-spy-web/.env create mode 100644 dockge/page-spy-web/docker-compose.yml create mode 100644 dockge/page-spy-web/envs/default.env create mode 100644 dockge/page-spy-web/envs/global.env create mode 100644 dockge/percona/.env create mode 100644 dockge/percona/config/my.cnf create mode 100644 dockge/percona/docker-compose.yml create mode 100644 dockge/percona/envs/default.env create mode 100644 dockge/percona/envs/global.env create mode 100644 dockge/photoprism/.env create mode 100644 dockge/photoprism/docker-compose.yml create mode 100644 dockge/photoprism/envs/default.env create mode 100644 dockge/photoprism/envs/global.env create mode 100644 dockge/photoprism/envs/photoprism.env create mode 100644 dockge/pingvin-share/.env create mode 100644 dockge/pingvin-share/docker-compose.yml create mode 100644 dockge/pingvin-share/envs/default.env create mode 100644 dockge/pingvin-share/envs/global.env create mode 100644 dockge/pixman/.env create mode 100644 dockge/pixman/docker-compose.yml create mode 100644 dockge/pixman/envs/default.env create mode 100644 dockge/pixman/envs/global.env create mode 100644 dockge/pixman/m3u/Adult.m3u create mode 100644 dockge/pixman/m3u/CCTV.m3u create mode 100644 dockge/pixman/m3u/CNTV.m3u create mode 100644 dockge/pixman/m3u/IPTV.m3u create mode 100644 dockge/postgresql/.env create mode 100644 dockge/postgresql/docker-compose.yml create mode 100644 dockge/postgresql/envs/default.env create mode 100644 dockge/postgresql/envs/global.env create mode 100644 dockge/postgresql_16_6-alpine/.env create mode 100644 dockge/postgresql_16_6-alpine/docker-compose.yml create mode 100644 dockge/postgresql_16_6-alpine/envs/default.env create mode 100644 dockge/postgresql_16_6-alpine/envs/global.env create mode 100644 dockge/postgresql_16_6/.env create mode 100644 dockge/postgresql_16_6/docker-compose.yml create mode 100644 dockge/postgresql_16_6/envs/default.env create mode 100644 dockge/postgresql_16_6/envs/global.env create mode 100644 dockge/postgresql_17_2-alpine/.env create mode 100644 dockge/postgresql_17_2-alpine/docker-compose.yml create mode 100644 dockge/postgresql_17_2-alpine/envs/default.env create mode 100644 dockge/postgresql_17_2-alpine/envs/global.env create mode 100644 dockge/postgresql_17_2/.env create mode 100644 dockge/postgresql_17_2/docker-compose.yml create mode 100644 dockge/postgresql_17_2/envs/default.env create mode 100644 dockge/postgresql_17_2/envs/global.env create mode 100644 dockge/postgresql_pg14-alpine/.env create mode 100644 dockge/postgresql_pg14-alpine/docker-compose.yml create mode 100644 dockge/postgresql_pg14-alpine/envs/default.env create mode 100644 dockge/postgresql_pg14-alpine/envs/global.env create mode 100644 dockge/postgresql_pg14-vectors/.env create mode 100644 dockge/postgresql_pg14-vectors/docker-compose.yml create mode 100644 dockge/postgresql_pg14-vectors/envs/default.env create mode 100644 dockge/postgresql_pg14-vectors/envs/global.env create mode 100644 dockge/postgresql_pg14/.env create mode 100644 dockge/postgresql_pg14/docker-compose.yml create mode 100644 dockge/postgresql_pg14/envs/default.env create mode 100644 dockge/postgresql_pg14/envs/global.env create mode 100644 dockge/postgresql_pg15-alpine/.env create mode 100644 dockge/postgresql_pg15-alpine/docker-compose.yml create mode 100644 dockge/postgresql_pg15-alpine/envs/default.env create mode 100644 dockge/postgresql_pg15-alpine/envs/global.env create mode 100644 dockge/postgresql_pg15/.env create mode 100644 dockge/postgresql_pg15/docker-compose.yml create mode 100644 dockge/postgresql_pg15/envs/default.env create mode 100644 dockge/postgresql_pg15/envs/global.env create mode 100644 dockge/postgresql_pg16-alpine/.env create mode 100644 dockge/postgresql_pg16-alpine/docker-compose.yml create mode 100644 dockge/postgresql_pg16-alpine/envs/default.env create mode 100644 dockge/postgresql_pg16-alpine/envs/global.env create mode 100644 dockge/postgresql_pg16-vectors/.env create mode 100644 dockge/postgresql_pg16-vectors/docker-compose.yml create mode 100644 dockge/postgresql_pg16-vectors/envs/default.env create mode 100644 dockge/postgresql_pg16-vectors/envs/global.env create mode 100644 dockge/postgresql_pg16/.env create mode 100644 dockge/postgresql_pg16/docker-compose.yml create mode 100644 dockge/postgresql_pg16/envs/default.env create mode 100644 dockge/postgresql_pg16/envs/global.env create mode 100644 dockge/prowlarr/.env create mode 100644 dockge/prowlarr/docker-compose.yml create mode 100644 dockge/prowlarr/envs/default.env create mode 100644 dockge/prowlarr/envs/global.env create mode 100644 dockge/puff/.env create mode 100644 dockge/puff/docker-compose.yml create mode 100644 dockge/puff/envs/default.env create mode 100644 dockge/puff/envs/global.env create mode 100644 dockge/qbittorrent/.env create mode 100644 dockge/qbittorrent/docker-compose.yml create mode 100644 dockge/qbittorrent/envs/default.env create mode 100644 dockge/qbittorrent/envs/global.env create mode 100644 dockge/qbittorrent_4_6_7/.env create mode 100644 dockge/qbittorrent_4_6_7/docker-compose.yml create mode 100644 dockge/qbittorrent_4_6_7/envs/default.env create mode 100644 dockge/qbittorrent_4_6_7/envs/global.env create mode 100644 dockge/qinglong/.env create mode 100644 dockge/qinglong/docker-compose.yml create mode 100644 dockge/qinglong/envs/default.env create mode 100644 dockge/qinglong/envs/global.env create mode 100644 dockge/radarr/.env create mode 100644 dockge/radarr/docker-compose.yml create mode 100644 dockge/radarr/envs/default.env create mode 100644 dockge/radarr/envs/global.env create mode 100644 dockge/reader3-webview/.env create mode 100644 dockge/reader3-webview/docker-compose.yml create mode 100644 dockge/reader3-webview/envs/default.env create mode 100644 dockge/reader3-webview/envs/global.env create mode 100644 dockge/reader3/.env create mode 100644 dockge/reader3/docker-compose.yml create mode 100644 dockge/reader3/envs/default.env create mode 100644 dockge/reader3/envs/global.env create mode 100644 dockge/redis/.env create mode 100644 dockge/redis/config/redis.conf create mode 100644 dockge/redis/docker-compose.yml create mode 100644 dockge/redis/envs/default.env create mode 100644 dockge/redis/envs/global.env create mode 100644 dockge/redis_6_2_16/.env create mode 100644 dockge/redis_6_2_16/config/redis.conf create mode 100644 dockge/redis_6_2_16/docker-compose.yml create mode 100644 dockge/redis_6_2_16/envs/default.env create mode 100644 dockge/redis_6_2_16/envs/global.env create mode 100644 dockge/rsshub/.env create mode 100644 dockge/rsshub/docker-compose.yml create mode 100644 dockge/rsshub/envs/default.env create mode 100644 dockge/rsshub/envs/global.env create mode 100644 dockge/sentinel/.env create mode 100644 dockge/sentinel/docker-compose.yml create mode 100644 dockge/sentinel/envs/default.env create mode 100644 dockge/sentinel/envs/global.env create mode 100644 dockge/shiori/.env create mode 100644 dockge/shiori/docker-compose.yml create mode 100644 dockge/shiori/envs/default.env create mode 100644 dockge/shiori/envs/global.env create mode 100644 dockge/siyuan/.env create mode 100644 dockge/siyuan/docker-compose.yml create mode 100644 dockge/siyuan/envs/default.env create mode 100644 dockge/siyuan/envs/global.env create mode 100644 dockge/slink/.env create mode 100644 dockge/slink/docker-compose.yml create mode 100644 dockge/slink/envs/default.env create mode 100644 dockge/slink/envs/global.env create mode 100644 dockge/sonarr/.env create mode 100644 dockge/sonarr/docker-compose.yml create mode 100644 dockge/sonarr/envs/default.env create mode 100644 dockge/sonarr/envs/global.env create mode 100644 dockge/speedtest-tracker-sqlite/.env create mode 100644 dockge/speedtest-tracker-sqlite/docker-compose.yml create mode 100644 dockge/speedtest-tracker-sqlite/envs/default.env create mode 100644 dockge/speedtest-tracker-sqlite/envs/global.env create mode 100644 dockge/speedtest-tracker/.env create mode 100644 dockge/speedtest-tracker/docker-compose.yml create mode 100644 dockge/speedtest-tracker/envs/default.env create mode 100644 dockge/speedtest-tracker/envs/global.env create mode 100644 dockge/speedtest/.env create mode 100644 dockge/speedtest/docker-compose.yml create mode 100644 dockge/speedtest/envs/default.env create mode 100644 dockge/speedtest/envs/global.env create mode 100644 dockge/stream-rec-backend/.env create mode 100644 dockge/stream-rec-backend/docker-compose.yml create mode 100644 dockge/stream-rec-backend/envs/default.env create mode 100644 dockge/stream-rec-backend/envs/global.env create mode 100644 dockge/stream-rec-frontend/.env create mode 100644 dockge/stream-rec-frontend/docker-compose.yml create mode 100644 dockge/stream-rec-frontend/envs/default.env create mode 100644 dockge/stream-rec-frontend/envs/global.env create mode 100644 dockge/stream-rec/.env create mode 100644 dockge/stream-rec/docker-compose.yml create mode 100644 dockge/stream-rec/envs/default.env create mode 100644 dockge/stream-rec/envs/global.env create mode 100644 dockge/sun-panel/.env create mode 100644 dockge/sun-panel/docker-compose.yml create mode 100644 dockge/sun-panel/envs/default.env create mode 100644 dockge/sun-panel/envs/global.env create mode 100644 dockge/synapse-admin/.env create mode 100644 dockge/synapse-admin/docker-compose.yml create mode 100644 dockge/synapse-admin/envs/default.env create mode 100644 dockge/synapse-admin/envs/global.env create mode 100644 dockge/synapse/.env create mode 100644 dockge/synapse/docker-compose.yml create mode 100644 dockge/synapse/envs/default.env create mode 100644 dockge/synapse/envs/global.env create mode 100644 dockge/tangsengdaodao/.env create mode 100644 dockge/tangsengdaodao/docker-compose.yml create mode 100644 dockge/tangsengdaodao/envs/default.env create mode 100644 dockge/tangsengdaodao/envs/global.env create mode 100644 dockge/teemii/.env create mode 100644 dockge/teemii/docker-compose.yml create mode 100644 dockge/teemii/envs/default.env create mode 100644 dockge/teemii/envs/global.env create mode 100644 dockge/telegram-bot-api/.env create mode 100644 dockge/telegram-bot-api/docker-compose.yml create mode 100644 dockge/telegram-bot-api/envs/default.env create mode 100644 dockge/telegram-bot-api/envs/global.env create mode 100644 dockge/traccar/.env create mode 100644 dockge/traccar/conf/traccar.xml create mode 100644 dockge/traccar/docker-compose.yml create mode 100644 dockge/traccar/envs/default.env create mode 100644 dockge/traccar/envs/global.env create mode 100644 dockge/transmission/.env create mode 100644 dockge/transmission/docker-compose.yml create mode 100644 dockge/transmission/envs/default.env create mode 100644 dockge/transmission/envs/global.env create mode 100644 dockge/umami-mysql/.env create mode 100644 dockge/umami-mysql/docker-compose.yml create mode 100644 dockge/umami-mysql/envs/default.env create mode 100644 dockge/umami-mysql/envs/global.env create mode 100644 dockge/umami/.env create mode 100644 dockge/umami/docker-compose.yml create mode 100644 dockge/umami/envs/default.env create mode 100644 dockge/umami/envs/global.env create mode 100644 dockge/uptime-kuma/.env create mode 100644 dockge/uptime-kuma/docker-compose.yml create mode 100644 dockge/uptime-kuma/envs/default.env create mode 100644 dockge/uptime-kuma/envs/global.env create mode 100644 dockge/uptime-kuma_1_23_15/.env create mode 100644 dockge/uptime-kuma_1_23_15/docker-compose.yml create mode 100644 dockge/uptime-kuma_1_23_15/envs/default.env create mode 100644 dockge/uptime-kuma_1_23_15/envs/global.env create mode 100644 dockge/watchyourlan/.env create mode 100644 dockge/watchyourlan/docker-compose.yml create mode 100644 dockge/watchyourlan/envs/default.env create mode 100644 dockge/watchyourlan/envs/global.env create mode 100644 dockge/windows/.env create mode 100644 dockge/windows/docker-compose.yml create mode 100644 dockge/windows/envs/default.env create mode 100644 dockge/windows/envs/global.env create mode 100644 dockge/wiseflow/.env create mode 100644 dockge/wiseflow/docker-compose.yml create mode 100644 dockge/wiseflow/envs/default.env create mode 100644 dockge/wiseflow/envs/global.env create mode 100644 dockge/wukongim/.env create mode 100644 dockge/wukongim/docker-compose.yml create mode 100644 dockge/wukongim/envs/default.env create mode 100644 dockge/wukongim/envs/global.env create mode 100644 dockge/xunlei-cnk3x/.env create mode 100644 dockge/xunlei-cnk3x/docker-compose.yml create mode 100644 dockge/xunlei-cnk3x/envs/default.env create mode 100644 dockge/xunlei-cnk3x/envs/global.env create mode 100644 dockge/yarr/.env create mode 100644 dockge/yarr/docker-compose.yml create mode 100644 dockge/yarr/envs/default.env create mode 100644 dockge/yarr/envs/global.env create mode 100644 dockge/zerotier-planet/.env create mode 100644 dockge/zerotier-planet/docker-compose.yml create mode 100644 dockge/zerotier-planet/envs/default.env create mode 100644 dockge/zerotier-planet/envs/global.env create mode 100644 dockge/ztncui/.env create mode 100644 dockge/ztncui/docker-compose.yml create mode 100644 dockge/ztncui/envs/default.env create mode 100644 dockge/ztncui/envs/global.env diff --git a/appstore/acg-faka/1.3.8/.env b/appstore/acg-faka/1.3.8/.env new file mode 100644 index 000000000..5d6bd942b --- /dev/null +++ b/appstore/acg-faka/1.3.8/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +ACG_FAKA_ROOT_PATH=/home/acg-faka + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + diff --git a/appstore/acg-faka/1.3.8/data.yml b/appstore/acg-faka/1.3.8/data.yml new file mode 100644 index 000000000..efdeb2f90 --- /dev/null +++ b/appstore/acg-faka/1.3.8/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + formFields: + - default: "/home/acg-faka" + edit: true + envKey: ACG_FAKA_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/acg-faka/1.3.8/docker-compose.yml b/appstore/acg-faka/1.3.8/docker-compose.yml new file mode 100644 index 000000000..323cf174f --- /dev/null +++ b/appstore/acg-faka/1.3.8/docker-compose.yml @@ -0,0 +1,19 @@ +networks: + 1panel-network: + external: true +services: + acg-faka: + container_name: acg-faka + env_file: + - ./envs/global.env + - .env + image: qyg2297248353/acg-faka:v1.3.8 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + volumes: + - ${ACG_FAKA_ROOT_PATH}/data:/var/www/html diff --git a/appstore/acg-faka/1.3.8/envs/default.env b/appstore/acg-faka/1.3.8/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/acg-faka/1.3.8/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/acg-faka/1.3.8/envs/global.env b/appstore/acg-faka/1.3.8/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/acg-faka/1.3.8/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/acg-faka/1.3.8/scripts/init.sh b/appstore/acg-faka/1.3.8/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/acg-faka/1.3.8/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/acg-faka/1.3.8/scripts/uninstall.sh b/appstore/acg-faka/1.3.8/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/acg-faka/1.3.8/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/acg-faka/1.3.8/scripts/upgrade.sh b/appstore/acg-faka/1.3.8/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/acg-faka/1.3.8/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/acg-faka/README.md b/appstore/acg-faka/README.md new file mode 100644 index 000000000..343480a64 --- /dev/null +++ b/appstore/acg-faka/README.md @@ -0,0 +1,77 @@ +# 异次元店铺系统V3 + +二次元发卡系统 + +![异次元店铺系统](https://file.lifebus.top/imgs/acg_faka_cover.png) + +异次元店铺系统乃荔枝店铺系统3.0完全从0代码的重构版本,原生php开发,数据库底层使用Eloquent +ORM,模板渲染使用Smarty3.1以及PHP原生渲染,会话保持全程使用session。 + +![](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) + +## 特性 + ++ 支付系统,拥有强悍的插件扩展能力,现目今已经支持全网任意平台,任意支付渠道。 ++ 云更新,如果系统升级新版本,你无需进行繁琐操作,只需要在你的店铺后台就可以无缝完成升级。 ++ 商品销售,支持商品配图、会员价、游客价、邮件通知、卡密预选(用户可以预选自己想购买的那个账号或者卡号)、API对接、强制登录购买、强悍的自定义控件功能、限时秒杀、批发优惠、优惠卷、等众多功能。 ++ 分站系统,前台用户可以开通分站,分站可以独立运行,也可以卖主站商品,有点类似商业店铺了。 ++ 会员系统,会员/商户融为一体,支持会员等级,以及商户等级完全自定义,以及商品可自定义会员等级对应价格。 ++ 推广/代理系统,拥有三级分销返佣功能,注册账号即实现自动发展下级。 ++ 共享店铺系统,可以在后台直接对接别人的店铺,通过扣除余额来进行无感知进货。 ++ 应用商店,拥有众多插件以及模板,让你的店铺变得格外强大。 ++ 界面美观,完美支持PC和手机,真正的内外二次元文化。 ++ 强悍的扩展能力,你可以通过本程序在几分钟之内快速的实现你任意想实现的在线购物功能,例子如下: + + 游戏方面,物品购买即时到玩家背包 + + 商业软件余额充值 + + 商业软件自动授权 + + 论坛/社区VIP自动开通 + + 只要你想得到,没有做不到。 + +## 环境说明 + ++ PHP 8.0+ (推荐使用PHP8.0) ++ MySQL 5.7+ (推荐使用MySQL8.0) + +请自行安装 MySQL 并创建数据库,配置用户名和密码。 + +## 安装说明 + +> 首次启动将会检查环境,如果环境不满足要求将会提示错误信息。 +> +> 第二步将会检查数据库连接,如果数据库连接失败将会提示错误信息。 +> +> 第三步将会进行程序安装。 + +### 数据库填写 + +数据库主机端口非 3306 时,请按照以下格式填写: +`127.0.0.1:3306` + +## 使用说明 + +> 管理员后台地址:`/admin.php` + +### 支付配置 + +进入`支付管理`,在`支付插件`中点击`获取更多插件`,搜索 `支付宝` 等关键词,进行安装,然后进入支付配置,填写支付宝的相关配置,保存即可。 + +进入`支付管理`,在`支付接口` 中点击`添加支付接口`,选择支付插件,填写相关配置,保存即可。默认安装会存在一些不可用支付接口配置,删除即可,不影响使用。 + +余额支付接口是系统默认的支付接口,不可删除,如果你的店铺需要余额支付,请确保余额支付接口是启用状态。 + +## 版本计划 + +| 版本 | 状态 | 积极支持截止时间 | 安全维护截止时间 | 发布或预计发布时间 | +|-----|------|------------|------------|------------| +| 4.0 | 公测中 | - | - | 2024-10-18 | +| 3.0 | 安全支持 | 2024-08-20 | 长期 | 2022-06-20 | +| 2.0 | 停止维护 | 2020-07-21 | 2020-12-31 | 2020-07-21 | +| 1.0 | 停止维护 | 2020-07-17 | 2020-12-31 | 2020-07-17 | + +- 积极支持将包含常规迭代周期的 BUG 修复、安全问题修复、功能迭代和功能新增; +- 安全维护仅包含安全问题的修复; +- 停止维护状态的版本将不会再进行任何的代码变更,请尽快根据升级指南升级到最新的版本以便得到更好的支持; + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/acg-faka/data.yml b/appstore/acg-faka/data.yml new file mode 100644 index 000000000..cb212e31b --- /dev/null +++ b/appstore/acg-faka/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: acg-faka + name: 异次元店铺系统V3 + tags: + - WebSite + - Tool + - Local + shortDescZh: 二次元发卡系统 + shortDescEn: Secondary Card Issuing System + type: website + crossVersionUpdate: true + limit: 0 + website: https://faka.wiki/ + github: https://github.com/lizhipay/acg-faka/ + document: https://faka.wiki/ diff --git a/appstore/acg-faka/logo.png b/appstore/acg-faka/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c3579acbcab457a7c920123b05823a7c29804439 GIT binary patch literal 7947 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 literal 0 HcmV?d00001 diff --git a/appstore/alist-aria2/3.40.0/.env b/appstore/alist-aria2/3.40.0/.env new file mode 100644 index 000000000..6f75a8f45 --- /dev/null +++ b/appstore/alist-aria2/3.40.0/.env @@ -0,0 +1,30 @@ +# 数据持久化路径 [必填] +ALIST_ROOT_PATH=/home/alist + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=5244 + +# 加密密钥 +JWT_SECRET= + +# 站点 URL +SITE_URL= + +# 登录过期时间 (小时) [必填] +TOKEN_EXPIRES_IN=48 + +# 延时启动 (秒) [必填] +DELAYED_START=0 + +# 最大连接数 [必填] +max_connections=0 + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/appstore/alist-aria2/3.40.0/data.yml b/appstore/alist-aria2/3.40.0/data.yml new file mode 100644 index 000000000..0f4fc7a24 --- /dev/null +++ b/appstore/alist-aria2/3.40.0/data.yml @@ -0,0 +1,74 @@ +additionalProperties: + formFields: + - default: "/home/alist" + edit: true + envKey: ALIST_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 5244 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: JWT_SECRET + labelZh: 加密密钥 + labelEn: Encryption key + required: false + type: password + - default: "" + edit: true + envKey: SITE_URL + labelZh: 站点 URL + labelEn: Site URL + required: false + rule: paramExtUrl + type: text + - default: 48 + edit: true + envKey: TOKEN_EXPIRES_IN + labelZh: 登录过期时间 (小时) + labelEn: Login expiration time (hours) + required: true + type: number + - default: 0 + edit: true + envKey: DELAYED_START + labelZh: 延时启动 (秒) + labelEn: Delayed start (seconds) + required: true + type: number + - default: 0 + edit: true + envKey: max_connections + labelZh: 最大连接数 + labelEn: Maximum connections + required: true + type: number + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_1 + labelEn: Custom mount directory 1 + labelZh: 自定义挂载目录 1 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_2 + labelEn: Custom mount directory 2 + labelZh: 自定义挂载目录 2 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_3 + labelEn: Custom mount directory 3 + labelZh: 自定义挂载目录 3 + required: false + type: text diff --git a/appstore/alist-aria2/3.40.0/docker-compose.yml b/appstore/alist-aria2/3.40.0/docker-compose.yml new file mode 100644 index 000000000..16f4f6347 --- /dev/null +++ b/appstore/alist-aria2/3.40.0/docker-compose.yml @@ -0,0 +1,27 @@ +networks: + 1panel-network: + external: true +services: + alist-aria2: + container_name: alist-aria2 + env_file: + - ./envs/global.env + - .env + environment: + - PUID=0 + - PGID=0 + - UMASK=022 + - FORCE=false + image: xhofe/alist-aria2:v3.40.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5244 + restart: always + volumes: + - ${ALIST_ROOT_PATH}/data:/opt/alist/data + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/appstore/alist-aria2/3.40.0/envs/default.env b/appstore/alist-aria2/3.40.0/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/alist-aria2/3.40.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/alist-aria2/3.40.0/envs/global.env b/appstore/alist-aria2/3.40.0/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/alist-aria2/3.40.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/alist-aria2/3.40.0/scripts/init.sh b/appstore/alist-aria2/3.40.0/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/alist-aria2/3.40.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/alist-aria2/3.40.0/scripts/uninstall.sh b/appstore/alist-aria2/3.40.0/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/alist-aria2/3.40.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/alist-aria2/3.40.0/scripts/upgrade.sh b/appstore/alist-aria2/3.40.0/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/alist-aria2/3.40.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/alist-aria2/README.md b/appstore/alist-aria2/README.md new file mode 100644 index 000000000..3bc465a17 --- /dev/null +++ b/appstore/alist-aria2/README.md @@ -0,0 +1,90 @@ +# AList + +一个支持多种存储的文件列表程序 + +![AList](https://file.lifebus.top/imgs/alist_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) + +## 特性 + ++ 使用简单 + + AList 从一开始就设计为易于安装,并且可以在所有平台上使用。 + ++ 多种存储 + + AList 支持多个存储提供商,包括本地存储、阿里云盘、OneDrive、Google Drive 等,且易于拓展。 + ++ 支持 WebDAV + + AList 支持所有 WebDAV 存储,这是一种用于访问文件的标准。 + ++ 黑暗模式 + + 自由切换明暗模式 + ++ 受保护的路由 + + 为特定路径添加密码保护和身份验证 + ++ 文件预览 + + 支持视频、音频、文档、PDF、图片预览等,甚至支持 ipa 安装 + ++ 打包下载/批量下载 + + 使用浏览器的 stream api 支持打包下载,无需使用服务器 / 使用Aria2进行批量下载支持文件夹 + ++ 单点登录 + + 使用单点登录快速登录AList + ++ 自动注册AList帐号 + + 使用单点登录自动注册为AList帐号快速注册 + ++ 离线下载 + + 将种子内容离线下载到指定的目录內,需要苛刻的网络环境 + ++ 保险箱加密/解密 文件 + + 任何人都可以安全地将加密数据存储在远程存储提供商上。数据存储在保险箱中,提供商只能看到保险箱,看不到您的数据。 + ++ 更多新功能 + + 包括文本编辑器、README/HTML 渲染、文件永久链接、Cloudflare Workers 代理等 + +## 安装说明 + +当前版本预装 `aria2` 用于下载 + +> 默认用户名:`admin` +> +> 默认密码:首次启动,可通过日志查询,或重置密码 + +### 重置密码 + ++ 随机生成一个密码 + +```shell +alist admin random +``` + ++ 设置指定密码 + +```shell +alist admin set {PASSWORD} +``` + +### 反向代理 + +> Nginx 配置示例 + +```conf +location / { + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Host $host:$server_port; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Range $http_range; + proxy_set_header If-Range $http_if_range; + proxy_redirect off; + proxy_pass http://127.0.0.1:5244; + # 文件最大上传大小 20GB + client_max_body_size 20000m; +} +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/alist-aria2/data.yml b/appstore/alist-aria2/data.yml new file mode 100644 index 000000000..2663218b2 --- /dev/null +++ b/appstore/alist-aria2/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: alist-aria2 + name: Alist Aira2插件版 + tags: + - WebSite + - Storage + - Local + shortDescZh: 一个支持多种存储的文件列表程序 + shortDescEn: A file list program that supports multiple storage methods + type: website + crossVersionUpdate: true + limit: 0 + website: https://alist.nn.ci/ + github: https://github.com/alist-org/alist/ + document: https://alist.nn.ci/guide/ diff --git a/appstore/alist-aria2/logo.png b/appstore/alist-aria2/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..443d69eec4a11cd866b7afee62c34dfa481b6b48 GIT binary patch literal 14831 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 .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/alist-ffmpeg/3.40.0/scripts/uninstall.sh b/appstore/alist-ffmpeg/3.40.0/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/alist-ffmpeg/3.40.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/alist-ffmpeg/3.40.0/scripts/upgrade.sh b/appstore/alist-ffmpeg/3.40.0/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/alist-ffmpeg/3.40.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/alist-ffmpeg/README.md b/appstore/alist-ffmpeg/README.md new file mode 100644 index 000000000..4d71c7043 --- /dev/null +++ b/appstore/alist-ffmpeg/README.md @@ -0,0 +1,90 @@ +# AList + +一个支持多种存储的文件列表程序 + +![AList](https://file.lifebus.top/imgs/alist_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) + +## 特性 + ++ 使用简单 + + AList 从一开始就设计为易于安装,并且可以在所有平台上使用。 + ++ 多种存储 + + AList 支持多个存储提供商,包括本地存储、阿里云盘、OneDrive、Google Drive 等,且易于拓展。 + ++ 支持 WebDAV + + AList 支持所有 WebDAV 存储,这是一种用于访问文件的标准。 + ++ 黑暗模式 + + 自由切换明暗模式 + ++ 受保护的路由 + + 为特定路径添加密码保护和身份验证 + ++ 文件预览 + + 支持视频、音频、文档、PDF、图片预览等,甚至支持 ipa 安装 + ++ 打包下载/批量下载 + + 使用浏览器的 stream api 支持打包下载,无需使用服务器 / 使用Aria2进行批量下载支持文件夹 + ++ 单点登录 + + 使用单点登录快速登录AList + ++ 自动注册AList帐号 + + 使用单点登录自动注册为AList帐号快速注册 + ++ 离线下载 + + 将种子内容离线下载到指定的目录內,需要苛刻的网络环境 + ++ 保险箱加密/解密 文件 + + 任何人都可以安全地将加密数据存储在远程存储提供商上。数据存储在保险箱中,提供商只能看到保险箱,看不到您的数据。 + ++ 更多新功能 + + 包括文本编辑器、README/HTML 渲染、文件永久链接、Cloudflare Workers 代理等 + +## 安装说明 + +当前版本预装 `ffmpeg` 用于封面截取 + +> 默认用户名:`admin` +> +> 默认密码:首次启动,可通过日志查询,或重置密码 + +### 重置密码 + ++ 随机生成一个密码 + +```shell +alist admin random +``` + ++ 设置指定密码 + +```shell +alist admin set {PASSWORD} +``` + +### 反向代理 + +> Nginx 配置示例 + +```conf +location / { + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Host $host:$server_port; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Range $http_range; + proxy_set_header If-Range $http_if_range; + proxy_redirect off; + proxy_pass http://127.0.0.1:5244; + # 文件最大上传大小 20GB + client_max_body_size 20000m; +} +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/alist-ffmpeg/data.yml b/appstore/alist-ffmpeg/data.yml new file mode 100644 index 000000000..6dc93d8f1 --- /dev/null +++ b/appstore/alist-ffmpeg/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: alist-ffmpeg + name: Alist FFMpeg插件版 + tags: + - WebSite + - Storage + - Local + shortDescZh: 一个支持多种存储的文件列表程序 + shortDescEn: A file list program that supports multiple storage methods + type: website + crossVersionUpdate: true + limit: 0 + website: https://alist.nn.ci/ + github: https://github.com/alist-org/alist/ + document: https://alist.nn.ci/guide/ diff --git a/appstore/alist-ffmpeg/logo.png b/appstore/alist-ffmpeg/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..443d69eec4a11cd866b7afee62c34dfa481b6b48 GIT binary patch literal 14831 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 .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/alist/3.40.0/scripts/uninstall.sh b/appstore/alist/3.40.0/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/alist/3.40.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/alist/3.40.0/scripts/upgrade.sh b/appstore/alist/3.40.0/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/alist/3.40.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/alist/README.md b/appstore/alist/README.md new file mode 100644 index 000000000..723b35fff --- /dev/null +++ b/appstore/alist/README.md @@ -0,0 +1,88 @@ +# AList + +一个支持多种存储的文件列表程序 + +![AList](https://file.lifebus.top/imgs/alist_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) + +## 特性 + ++ 使用简单 + + AList 从一开始就设计为易于安装,并且可以在所有平台上使用。 + ++ 多种存储 + + AList 支持多个存储提供商,包括本地存储、阿里云盘、OneDrive、Google Drive 等,且易于拓展。 + ++ 支持 WebDAV + + AList 支持所有 WebDAV 存储,这是一种用于访问文件的标准。 + ++ 黑暗模式 + + 自由切换明暗模式 + ++ 受保护的路由 + + 为特定路径添加密码保护和身份验证 + ++ 文件预览 + + 支持视频、音频、文档、PDF、图片预览等,甚至支持 ipa 安装 + ++ 打包下载/批量下载 + + 使用浏览器的 stream api 支持打包下载,无需使用服务器 / 使用Aria2进行批量下载支持文件夹 + ++ 单点登录 + + 使用单点登录快速登录AList + ++ 自动注册AList帐号 + + 使用单点登录自动注册为AList帐号快速注册 + ++ 离线下载 + + 将种子内容离线下载到指定的目录內,需要苛刻的网络环境 + ++ 保险箱加密/解密 文件 + + 任何人都可以安全地将加密数据存储在远程存储提供商上。数据存储在保险箱中,提供商只能看到保险箱,看不到您的数据。 + ++ 更多新功能 + + 包括文本编辑器、README/HTML 渲染、文件永久链接、Cloudflare Workers 代理等 + +## 安装说明 + +> 默认用户名:`admin` +> +> 默认密码:首次启动,可通过日志查询,或重置密码 + +### 重置密码 + ++ 随机生成一个密码 + +```shell +alist admin random +``` + ++ 设置指定密码 + +```shell +alist admin set {PASSWORD} +``` + +### 反向代理 + +> Nginx 配置示例 + +```conf +location / { + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Host $host:$server_port; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Range $http_range; + proxy_set_header If-Range $http_if_range; + proxy_redirect off; + proxy_pass http://127.0.0.1:5244; + # 文件最大上传大小 20GB + client_max_body_size 20000m; +} +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/alist/data.yml b/appstore/alist/data.yml new file mode 100644 index 000000000..335133e35 --- /dev/null +++ b/appstore/alist/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: alist + name: Alist + tags: + - WebSite + - Storage + - Local + shortDescZh: 一个支持多种存储的文件列表程序 + shortDescEn: A file list program that supports multiple storage methods + type: website + crossVersionUpdate: true + limit: 0 + website: https://alist.nn.ci/ + github: https://github.com/alist-org/alist/ + document: https://alist.nn.ci/guide/ diff --git a/appstore/alist/logo.png b/appstore/alist/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..443d69eec4a11cd866b7afee62c34dfa481b6b48 GIT binary patch literal 14831 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 .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/ani-rss/1.1.202/scripts/uninstall.sh b/appstore/ani-rss/1.1.202/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/ani-rss/1.1.202/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/ani-rss/1.1.202/scripts/upgrade.sh b/appstore/ani-rss/1.1.202/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/ani-rss/1.1.202/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/ani-rss/README.md b/appstore/ani-rss/README.md new file mode 100644 index 000000000..7d4495874 --- /dev/null +++ b/appstore/ani-rss/README.md @@ -0,0 +1,17 @@ +# ANI-RSS + +自动追番、订阅、下载 蜜柑RSS动漫 + +![ANI-RSS](https://file.lifebus.top/imgs/ani_orss_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) + +## 安装说明 + +> 默认用户名:`admin` +> +> 默认密码:`admin` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/ani-rss/data.yml b/appstore/ani-rss/data.yml new file mode 100644 index 000000000..449c2863c --- /dev/null +++ b/appstore/ani-rss/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: ani-rss + name: ANI-RSS + tags: + - WebSite + - Tool + - Local + shortDescZh: 自动追番、订阅、下载 蜜柑RSS动漫 + shortDescEn: Automatically subscribe to and download Mikan RSS anime + type: website + crossVersionUpdate: true + limit: 0 + website: https://docs.wushuo.top/ + github: https://github.com/wushuo894/ani-rss/ + document: https://docs.wushuo.top/ diff --git a/appstore/ani-rss/logo.png b/appstore/ani-rss/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..89e27175bf0d6fd586b66cb8d3a84f41b55f5822 GIT binary patch literal 81124 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∨H;crd+<6T>R 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 + +> 默认用户名:`admin` +> +> 默认密码:`admin` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/dpanel-lite/data.yml b/appstore/dpanel-lite/data.yml new file mode 100644 index 000000000..7e5d40ea9 --- /dev/null +++ b/appstore/dpanel-lite/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: dpanel-lite + name: DPanel Lite + tags: + - WebSite + - Tool + - Local + shortDescZh: Docker可视化管理面板 + shortDescEn: Docker visual management panel + type: website + crossVersionUpdate: true + limit: 0 + website: https://dpanel.cc/ + github: https://github.com/donknap/dpanel/ + document: https://dpanel.cc/ diff --git a/appstore/dpanel-lite/logo.png b/appstore/dpanel-lite/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ac30ad1063180bd6492eb50b153c0c82191805ac GIT binary patch literal 52633 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 literal 0 HcmV?d00001 diff --git a/appstore/dpanel/1.3.0/.env b/appstore/dpanel/1.3.0/.env new file mode 100644 index 000000000..90204b3ca --- /dev/null +++ b/appstore/dpanel/1.3.0/.env @@ -0,0 +1,18 @@ +# 数据持久化路径 [必填] +DPANEL_ROOT_PATH=/home/dpanel + +# WebUI 端口 [必填] +PANEL_APP_PORT_ADMIN=8080 + +# HTTP 服务端口 [必填] +PANEL_APP_PORT_HTTP=80 + +# HTTPS 服务端口 [必填] +PANEL_APP_PORT_HTTPS=443 + +# 管理员 用户名 [必填] +INSTALL_USERNAME=admin + +# 管理员 密码 [必填] +INSTALL_PASSWORD=admin + diff --git a/appstore/dpanel/1.3.0/data.yml b/appstore/dpanel/1.3.0/data.yml new file mode 100644 index 000000000..01bfbe8a1 --- /dev/null +++ b/appstore/dpanel/1.3.0/data.yml @@ -0,0 +1,47 @@ +additionalProperties: + formFields: + - default: "/home/dpanel" + edit: true + envKey: DPANEL_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_ADMIN + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 80 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: HTTP 服务端口 + labelEn: HTTP service port + required: true + rule: paramPort + type: number + - default: 443 + edit: true + envKey: PANEL_APP_PORT_HTTPS + labelZh: HTTPS 服务端口 + labelEn: HTTPS service port + required: true + rule: paramPort + type: number + - default: "admin" + edit: true + envKey: INSTALL_USERNAME + labelZh: 管理员 用户名 + labelEn: Admin Username + required: true + type: text + - default: "admin" + edit: true + envKey: INSTALL_PASSWORD + labelZh: 管理员 密码 + labelEn: Admin Password + required: true + type: text diff --git a/appstore/dpanel/1.3.0/docker-compose.yml b/appstore/dpanel/1.3.0/docker-compose.yml new file mode 100644 index 000000000..dd03bd36f --- /dev/null +++ b/appstore/dpanel/1.3.0/docker-compose.yml @@ -0,0 +1,35 @@ +networks: + 1panel-network: + external: true +services: + dpanel: + container_name: dpanel + env_file: + - ./envs/global.env + - .env + environment: + - APP_NAME=${CONTAINER_NAME} + image: dpanel/dpanel:1.3.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_ADMIN}:8080 + - ${PANEL_APP_PORT_HTTP}:80 + - ${PANEL_APP_PORT_HTTPS}:443 + restart: always + volumes: + - ${DPANEL_ROOT_PATH}/data:/dpanel + - ${DPANEL_ROOT_PATH}/compose:/dpanel/compose + - /var/run/docker.sock:/var/run/docker.sock + dpanel-plugin-explorer: + command: + - sh + - -c + - tail -f /dev/null + container_name: dpanel-plugin-explorer + image: alpine:latest + pid: host + privileged: true + restart: unless-stopped diff --git a/appstore/dpanel/1.3.0/envs/default.env b/appstore/dpanel/1.3.0/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/dpanel/1.3.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/dpanel/1.3.0/envs/global.env b/appstore/dpanel/1.3.0/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/dpanel/1.3.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/dpanel/1.3.0/scripts/init.sh b/appstore/dpanel/1.3.0/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/dpanel/1.3.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/dpanel/1.3.0/scripts/uninstall.sh b/appstore/dpanel/1.3.0/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/dpanel/1.3.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/dpanel/1.3.0/scripts/upgrade.sh b/appstore/dpanel/1.3.0/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/dpanel/1.3.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/dpanel/README.md b/appstore/dpanel/README.md new file mode 100644 index 000000000..1901dd686 --- /dev/null +++ b/appstore/dpanel/README.md @@ -0,0 +1,31 @@ +# DPanel + +Docker可视化管理面板 + +![Dockge](https://file.lifebus.top/imgs/dpanel_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) + +## 简介 + +Docker 可视化面板系统,提供完善的 docker 管理功能。 + +## 安装说明 + +
+
+ ⚠️ +
+ 警告
+ 该应用申请使用 `特权模式`, 将允许应用在容器内部执行特权操作,如挂载宿主机目录、访问宿主机设备等。 +
+
+
+ +> 默认用户名:`admin` +> +> 默认密码:`admin` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/dpanel/data.yml b/appstore/dpanel/data.yml new file mode 100644 index 000000000..cd2dcd3c9 --- /dev/null +++ b/appstore/dpanel/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: dpanel + name: DPanel + tags: + - WebSite + - Tool + - Local + shortDescZh: Docker可视化管理面板 + shortDescEn: Docker visual management panel + type: website + crossVersionUpdate: true + limit: 0 + website: https://dpanel.cc/ + github: https://github.com/donknap/dpanel/ + document: https://dpanel.cc/ diff --git a/appstore/dpanel/logo.png b/appstore/dpanel/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ac30ad1063180bd6492eb50b153c0c82191805ac GIT binary patch literal 52633 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 literal 0 HcmV?d00001 diff --git a/appstore/dujiaoka/2.0.9/.env b/appstore/dujiaoka/2.0.9/.env new file mode 100644 index 000000000..e39221881 --- /dev/null +++ b/appstore/dujiaoka/2.0.9/.env @@ -0,0 +1,30 @@ +# 数据持久化路径 [必填] +DUJIAOKA_ROOT_PATH=/home/dujiaoka + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# API 端口 [必填] +PANEL_APP_PORT_API=9000 + +# 网站名称 [必填] +APP_NAME=独角数卡 + +# 应用密钥 [必填] +APP_KEY=base64:sKDhhXG+bHhlnH8hAVX2MbETkYABNhWNXALo0FU8WH0= + +# 网站域名 [必填] +APP_URL=http://127.0.0.1:8080 + +# 后台路径 [必填] +ADMIN_ROUTE_PREFIX=/admin + +# 异步消息队列模式 [必填] +QUEUE_CONNECTION=redis + +# 缓存驱动 [必填] +CACHE_DRIVER=redis + +# 启用后台 HTTPS [必填] +ADMIN_HTTPS=false + diff --git a/appstore/dujiaoka/2.0.9/data.yml b/appstore/dujiaoka/2.0.9/data.yml new file mode 100644 index 000000000..7e2f2915a --- /dev/null +++ b/appstore/dujiaoka/2.0.9/data.yml @@ -0,0 +1,89 @@ +additionalProperties: + formFields: + - default: "/home/dujiaoka" + edit: true + envKey: DUJIAOKA_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 + - default: 9000 + edit: true + envKey: PANEL_APP_PORT_API + labelZh: API 端口 + labelEn: API port + required: true + rule: paramPort + type: number + - default: "独角数卡" + edit: true + envKey: APP_NAME + labelZh: 网站名称 + labelEn: Website name + required: true + type: text + - default: "base64:sKDhhXG+bHhlnH8hAVX2MbETkYABNhWNXALo0FU8WH0=" + edit: true + envKey: APP_KEY + labelZh: 应用密钥 + labelEn: Application key + required: true + type: text + - default: "http://127.0.0.1:8080" + edit: true + envKey: APP_URL + labelZh: 网站域名 + labelEn: Website domain + required: true + type: text + - default: "/admin" + edit: true + envKey: ADMIN_ROUTE_PREFIX + labelZh: 后台路径 + labelEn: Admin path + required: true + type: text + - default: "redis" + edit: true + envKey: QUEUE_CONNECTION + labelZh: 异步消息队列模式 + labelEn: Asynchronous message queue mode + required: true + type: select + values: + - label: 异步模式 (Redis) + value: "redis" + - label: 同步模式 + value: "sync" + - default: "redis" + edit: true + envKey: CACHE_DRIVER + labelZh: 缓存驱动 + labelEn: Cache driver + required: true + type: select + values: + - label: Redis 缓存 + value: "redis" + - label: 文件缓存 + value: "file" + - default: "false" + edit: true + envKey: ADMIN_HTTPS + labelZh: 启用后台 HTTPS + labelEn: Enable admin HTTPS + required: true + type: select + values: + - label: 启用 + value: "true" + - label: 禁用 + value: "false" diff --git a/appstore/dujiaoka/2.0.9/docker-compose.yml b/appstore/dujiaoka/2.0.9/docker-compose.yml new file mode 100644 index 000000000..a42b6fe15 --- /dev/null +++ b/appstore/dujiaoka/2.0.9/docker-compose.yml @@ -0,0 +1,31 @@ +networks: + 1panel-network: + external: true +services: + dujiaoka: + container_name: dujiaoka + env_file: + - ./envs/global.env + - .env + environment: + - WEB_DOCUMENT_ROOT=/app/public + - DUJIAO_ADMIN_LANGUAGE=zh_CN + - BROADCAST_DRIVER=log + - SESSION_DRIVER=file + - SESSION_LIFETIME=120 + - LOG_CHANNEL=stack + - APP_DEBUG=false + - APP_ENV=local + - DB_CONNECTION=mysql + image: qyg2297248353/dujiaoka:v2.0.9 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + - ${PANEL_APP_PORT_API}:9000 + restart: always + tty: true + volumes: + - ${DUJIAOKA_ROOT_PATH}/app:/app diff --git a/appstore/dujiaoka/2.0.9/envs/default.env b/appstore/dujiaoka/2.0.9/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/dujiaoka/2.0.9/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/dujiaoka/2.0.9/envs/global.env b/appstore/dujiaoka/2.0.9/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/dujiaoka/2.0.9/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/dujiaoka/2.0.9/scripts/init.sh b/appstore/dujiaoka/2.0.9/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/dujiaoka/2.0.9/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/dujiaoka/2.0.9/scripts/uninstall.sh b/appstore/dujiaoka/2.0.9/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/dujiaoka/2.0.9/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/dujiaoka/2.0.9/scripts/upgrade.sh b/appstore/dujiaoka/2.0.9/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/dujiaoka/2.0.9/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/dujiaoka/README.md b/appstore/dujiaoka/README.md new file mode 100644 index 000000000..9538c9fd1 --- /dev/null +++ b/appstore/dujiaoka/README.md @@ -0,0 +1,48 @@ +# 独角数卡 + +🦄独角数卡(自动售货系统)-开源站长自动化售货解决方案、高效、稳定、快速!🚀🚀🎉🎉 + +![异次元店铺系统](https://file.lifebus.top/imgs/dujiaoka_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) + +## 接口集成 + ++ 支付宝当面付 ++ 支付宝PC支付 ++ 支付宝手机支付 ++ payjs微信扫码. ++ Paysapi(支付宝/微信). ++ 码支付(QQ/支付宝/微信) ++ 微信企业扫码支付 ++ Paypal支付(默认美元) ++ V免签支付 ++ 全网易支付支持(通用彩虹版) ++ stripe + +## 环境说明 + ++ MySQL 5.7+ ++ Redis 支持(可选) + +## 安装说明 + +> 后台默认路径 `/admin` +> +> 默认管理员账号 admin +> +> 默认管理员密码 admin + +### `应用密钥` 配置 + +该密钥由固定头部`base64:`加上`32位字符串的Base64编码`组成,例如:`base64:xxxxx`。 + +使用 `openssl` 生成密钥: + +```bash +openssl rand -base64 32 +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/dujiaoka/data.yml b/appstore/dujiaoka/data.yml new file mode 100644 index 000000000..2af5fb680 --- /dev/null +++ b/appstore/dujiaoka/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: dujiaoka + name: 独角数卡 + tags: + - WebSite + - Tool + - Local + shortDescZh: 独角数卡(自动售货系统)-开源站长自动化售货解决方案、高效、稳定、快速 + shortDescEn: Dujiaoka (Automatic Vending System) - Open source webmaster automatic vending solution, efficient, stable, fast + type: website + crossVersionUpdate: true + limit: 0 + website: https://github.com/assimon/dujiaoka/ + github: https://github.com/assimon/dujiaoka/ + document: https://github.com/assimon/dujiaoka/ diff --git a/appstore/dujiaoka/logo.png b/appstore/dujiaoka/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..15ef52ae006c037881fedf4a2c882dfdfdcebf7e GIT binary patch literal 10149 zcmeHt`8Qi#{H`K~m{ruQhH4V?JX0Y>)R2MJOjS)U&8tyrC_-psXc5(#gP7?QV^O3N zikMrKiniv`bTHFi@4f5(1K(foJ?osc&)Mg!v(A3@^E~_W*=OHzak3QvN&(r}*aYnD zY*1`$?8m3!Pl|!WPf18hNz2H}$)8qGR8l^p zauy7Ms;a4LXliNe=<4Yk7#bOyn3|beSe~lzZY3rq<5N-zY3aA`5Hm8f zvhUu@$;~6>-!FLZu&}7Oq_nJ@Tv1s?sjjK5t8Zv*YJT+i$pUOy+1Ql$?QN_u5|SHzyh&M$pDkJ6jf1u&Y3~cZIeZv$6A7*(+1-%kezQ^Pk)m(9ON zj{F+=wb!e~Py3(lnrHOaw68EBvh}plda6+for#{E7VO*YHrR>pR(hA{ZuqOdo>lfO zc~p}T^Wd-ei07ZTNiq_DC$G!_|BR9AvY4tH*Y+AS6GeS2TCTC>GgdQVI2Rwua=)n6 ziBPTd(A5#hzvS23mbsK?z)Jb{aR(W^11kC2~~RI^e@K7uVe!evFE7^adr@xxw1gdwK%D)$I~8SrUJ{ z{(kj2bbv#M{cbiJl%O(^5z;q7M~(mEu^pkm>%0DNk$RO=Pb`L@eQ93AVkR&m)lIfm z;K*#?ftWYHrRkp1>(9o)%eP*K#sUxP=S5$u%<&d>JbZGn1l~nrSDZ6H6w!x-XP+$N zcAb9SZlRJJ1#zhBLg951r;;9B$^39WE+XB@hvI$hA|VkY`y&0u5qnlK{9w8@#d)$6 zcTccZApA-=nL|)0MP4ty@piTZd$^fXkXb1|qb2r9rr=G^&S1%E>-z>t)7d4m)d5#w zr-UZ7pF1b_#CAEK9Zpu!`MFw5EF#zS_|o0^%I}EaCX1nTXDnR^H+zcyQV2JFExi0; zmBTH{ulrU)XXzmXYjPfStY|fDicZVGeWEI_R1B&=U&;0@PtPLpU8EOku3PcxZw}OW z`Xq^mqACtMGO`_&No+9dP8yKg{+ls^6Bj9p=r8ljI?v6uBE{rtx7x zF@VaX@7dYaB*NkbgPN<~*#(nD0ElNl=Gjm7Q~eO4qK?M|q1NmUs2HM_T*8AF#DMWh zN=9Mw>bqTnqKK6WSL!l7C2Fj)Sm#T5`hu9m9i@<;9P01KIPNHI)eBIAzLyxEYuX@v zAaR+`jjSj}{c97VNyk6cwiAA6_^sUBw0V?M*vqbtOn*6%8NprA@ibNZ-JlKo+m0~J z4R=c&z+b%_ltX#OjwHkIcKy&*kH__(&rO?Ot*Oh){tAbQ2{h6jT#Cl6tGH_lol^2+ z_>^UZ=E4h_)#mfRg_yolOUSj5;4f^IaT4r(aY|HXvhe5Xt#^^L&sOvfZGX;?_O%5% zYhlSxgiX$tiN~Y(evAeBq_*08+D!ZVi-#hpmu@iY;wSvF@W_U*wIs>NXisSt{lmlb zaAc2UDztBu$IdvNW04|G@)3BnLLR^GUiK-O9qbt4EePqkA z(*C-wAKa^|;4N2Cy-1--Rlal0AKg42R{*+l%`U5Ne6W1N^=HU|G&{j&a`Vnucq*|l zBe*a556k9t)W=}w&0$y8{COAXoV3SY>R7^wGh};_`iwdG)b;x8dFwcXECj6#r&c{# zLLc%tzXKH$FgnL)(aak?bxif`M!C{d%OM}zIw20agLdVCDW>I;Jzp!1kRfH^W)pW` zfS+l%gbEE4SfPjmℜ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 literal 0 HcmV?d00001 diff --git a/appstore/elastic-elasticsearch/8.16.1/.env b/appstore/elastic-elasticsearch/8.16.1/.env new file mode 100644 index 000000000..f7e98d7e7 --- /dev/null +++ b/appstore/elastic-elasticsearch/8.16.1/.env @@ -0,0 +1,24 @@ +# 数据持久化路径 [必填] +ELASTICSEARCH_ROOT_PATH=/home/elasticsearch + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTPS=9200 + +# 集群端口 [必填] +PANEL_APP_PORT_CLUSTER=9300 + +# Elasticsearch 密码 (elastic) [必填] +ELASTIC_PASSWORD= + +# Kibana 密码 (kibana_system) +KIBANA_PASSWORD= + +# 集群名称 [必填] +ES_SETTING_CLUSTER_NAME=elasticsearch + +# 节点名称 [必填] +ES_SETTING_NODE_NAME=es-node + +# Java 启动参数 (可选) +ES_JAVA_OPTS=-Xms1g -Xmx1g + diff --git a/appstore/elastic-elasticsearch/8.16.1/data.yml b/appstore/elastic-elasticsearch/8.16.1/data.yml new file mode 100644 index 000000000..b627b241e --- /dev/null +++ b/appstore/elastic-elasticsearch/8.16.1/data.yml @@ -0,0 +1,60 @@ +additionalProperties: + formFields: + - default: "/home/elasticsearch" + edit: true + envKey: ELASTICSEARCH_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 9200 + edit: true + envKey: PANEL_APP_PORT_HTTPS + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 9300 + edit: true + envKey: PANEL_APP_PORT_CLUSTER + labelZh: 集群端口 + labelEn: Cluster port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: ELASTIC_PASSWORD + labelZh: Elasticsearch 密码 (elastic) + labelEn: Elasticsearch password (elastic) + required: true + type: password + - default: "" + edit: true + envKey: KIBANA_PASSWORD + labelZh: Kibana 密码 (kibana_system) + labelEn: Kibana password (kibana_system) + required: false + type: password + - default: "elasticsearch" + edit: true + envKey: ES_SETTING_CLUSTER_NAME + labelZh: 集群名称 + labelEn: Cluster name + required: true + type: text + - default: "es-node" + edit: true + envKey: ES_SETTING_NODE_NAME + labelZh: 节点名称 + labelEn: Node name + required: true + type: text + - default: "-Xms1g -Xmx1g" + edit: true + envKey: ES_JAVA_OPTS + labelZh: Java 启动参数 (可选) + labelEn: Java startup parameters (optional) + required: false + type: text diff --git a/appstore/elastic-elasticsearch/8.16.1/docker-compose.yml b/appstore/elastic-elasticsearch/8.16.1/docker-compose.yml new file mode 100644 index 000000000..5c4b46be8 --- /dev/null +++ b/appstore/elastic-elasticsearch/8.16.1/docker-compose.yml @@ -0,0 +1,34 @@ +networks: + 1panel-network: + external: true +services: + elasticsearch: + container_name: elastic-elasticsearch + env_file: + - ./envs/global.env + - .env + environment: + - LICENSE=basic + - ES_SETTING_BOOTSTRAP_MEMORY__LOCK=true + - ES_SETTING_PATH_REPO=/usr/share/elasticsearch/backup + image: elasticsearch:8.16.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTPS}:9200 + - ${PANEL_APP_PORT_CLUSTER}:9300 + restart: always + tty: true + ulimits: + memlock: + hard: -1 + soft: -1 + nofile: + hard: 65536 + soft: 65536 + volumes: + - ${ELASTICSEARCH_ROOT_PATH}/data:/usr/share/elasticsearch/data + - ${ELASTICSEARCH_ROOT_PATH}/backup:/usr/share/elasticsearch/backup + - ${ELASTICSEARCH_ROOT_PATH}/plugins:/usr/share/elasticsearch/plugins diff --git a/appstore/elastic-elasticsearch/8.16.1/envs/default.env b/appstore/elastic-elasticsearch/8.16.1/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/elastic-elasticsearch/8.16.1/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/elastic-elasticsearch/8.16.1/envs/global.env b/appstore/elastic-elasticsearch/8.16.1/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/elastic-elasticsearch/8.16.1/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/elastic-elasticsearch/8.16.1/scripts/init.sh b/appstore/elastic-elasticsearch/8.16.1/scripts/init.sh new file mode 100644 index 000000000..33a7b7f49 --- /dev/null +++ b/appstore/elastic-elasticsearch/8.16.1/scripts/init.sh @@ -0,0 +1,23 @@ +#!/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 + + mkdir -p $ELASTICSEARCH_ROOT_PATH + mkdir -p "$ELASTICSEARCH_ROOT_PATH/data" + mkdir -p "$ELASTICSEARCH_ROOT_PATH/backup" + mkdir -p "$ELASTICSEARCH_ROOT_PATH/plugins" + + chown -R 1000:1000 $ELASTICSEARCH_ROOT_PATH + + echo "Check Finish." +else + echo "Error: .env file not found." +fi diff --git a/appstore/elastic-elasticsearch/8.16.1/scripts/uninstall.sh b/appstore/elastic-elasticsearch/8.16.1/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/elastic-elasticsearch/8.16.1/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/elastic-elasticsearch/8.16.1/scripts/upgrade.sh b/appstore/elastic-elasticsearch/8.16.1/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/elastic-elasticsearch/8.16.1/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/elastic-elasticsearch/README.md b/appstore/elastic-elasticsearch/README.md new file mode 100644 index 000000000..9fdbd936d --- /dev/null +++ b/appstore/elastic-elasticsearch/README.md @@ -0,0 +1,105 @@ +# Elasticsearch + +搜索并分析您的数据 + + + +Elasticsearch 是 Elastic Stack 核心的分布式搜索和分析引擎。 Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 +Elasticsearch 中。 +Kibana 使您能够以交互方式探索、可视化和分享对数据的见解,并管理和监控堆栈。 Elasticsearch 是索引、搜索和分析魔法发生的地方。 + +![](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) + +## 安装说明 + +当前应用为主节点,仅首次部署有效。集群节点请使用 `Elasticsearch 节点` 应用。 + +### 宿主机配置 + ++ `vm.max_map_count` 配置 + +Elasticsearch 需要设置 `vm.max_map_count` 为至少 `262144`。可以通过以下命令设置: + +```sh +grep vm.max_map_count /etc/sysctl.conf + +# 如果输出为空,表示没有设置,需要手动添加 +vm.max_map_count=262144 +``` + +添加配置 + +```sh +# 临时生效 +sysctl -w vm.max_map_count=262144 + +# 永久生效 +echo "vm.max_map_count=262144" >>/etc/sysctl.conf +sysctl -p +``` + +### 集群主节点安装 + +> `集群名称` 配置 + +用于标识集群的名称。默认为 `elasticsearch-cluster`。 + +> `节点名称` 配置 + +用于标识节点的名称。默认为 `elasticsearch-node`。 + +> `Elasticsearch 密码 (elastic)` 配置 + +内置用户 `elastic` 的密码。默认情况下,密码是随机生成的。 + +> `Kibana 密码 (kibana_system)` 配置 + +内置用户 `kibana_system` 的密码。默认情况下,密码是随机生成的。 + +用于保护内置用户 `kibana_system` 的密码。默认情况下,密码是随机生成的。 + +> `Java 启动参数 (可选)` 配置 + +Java 启动参数。默认为空。 + +推荐参数:`-Xms1g -Xmx1g` + +小内存推荐参数:`-Xms512m -Xmx512m` + +## 快捷操作 + +> 重置密码 + +```sh +/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic +``` + +> 创建 `节点` 注册令牌 + +注册令牌的有效期为30分钟。 + +```sh +/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node +``` + +> 创建 `kibana` 注册令牌 + +注册令牌的有效期为30分钟。 + +```sh +/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana +``` + +> 导出证书 + +<容器名称> 为容器名称或容器 ID,可以通过 `docker ps` 命令查看。 + +导出 `http_ca.crt` 证书到当前目录 + +```sh +docker cp <容器名称>:/usr/share/elasticsearch/config/certs/http_ca.crt . +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/elastic-elasticsearch/data.yml b/appstore/elastic-elasticsearch/data.yml new file mode 100644 index 000000000..755ea581d --- /dev/null +++ b/appstore/elastic-elasticsearch/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: elastic-elasticsearch + name: Elasticsearch + tags: + - Database + - Middleware + - Local + shortDescZh: 分布式、RESTful 风格的搜索和数据分析引擎 + shortDescEn: Distributed, RESTful-style search and data analysis engine + type: runtime + crossVersionUpdate: true + limit: 0 + website: https://www.elastic.co/ + github: https://github.com/elastic/elasticsearch/ + document: https://www.elastic.co/docs/ diff --git a/appstore/elastic-elasticsearch/logo.png b/appstore/elastic-elasticsearch/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..06b4a258912f0e08619757289b55daa498873e4e GIT binary patch literal 52594 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'QDSl;vG z06+38=o~wdFL1=+G!ocOKAW&qS*C-msn*03z4?^*9qrezCaM z#yn%et)JFMCa{F_!isNQHzg^)g_=NV2CPNs?eklV_-@I@V|Krmm|DSiKM=!)+RXlbR8hw26!%aDRq# zwvY(1tuEoAH2VzH^ItQpmtS&Xh?|hk!!m$KRwGiS0?&*WwDi;8fbC7u{Kqdqz%|Bh`^Z0JS8j=j&mNUy3Dd6zWkbb zm`HCx6keM$!Z8dj^;hIuJ~qm_j-aez6L)eSv#0`x&3MUMC4BP}X9a5xvHYf+tk1px z#NgvlyvOkM-v#&RbH`|T;T5p6FbU`fnAmc|Ou|r>ALi7_^ABW*ire}{N!5(D#@R$A_My zsbEFqswoVd5)iyw#*E+*Fa|+HSs6i%_TZfCK;7M2@@+>RZ1$Aih_6}S%3vr^e9&tyAFtGZfD!n$L9j{$~aQ$Z|d zBGj;gdjN|(ZOz(rH|@XlmDAfUAI$^E4Cn@V)&s* zub}%bu&(A7hJg5kv8kn5hVQ@2Y0oKGBz*m3M5k{e13V1gc`1@3o8=O7A@vN&M=RvW zD{1G*rRFd;iL^KKtpYe?$<4c@$uK{ZY!Hn`;Lk=HQMVC@GtLV|n|Ye3c;qEXrYUV~ z@xGCygt6u46ImC%WkBM166;5Mz)5O;cfGY)<@^U(8LsMpL}W4KQUc%4@sJxzBgOoB5Zl-nPL2w}KwWc&8eCG0?w?CD~ArW~h!RHIU& zgX+K}!)SCCJ*@HsrYRx~xQZ+h1zS4^d0(RBE?%lFH?(iN`vF8SKyQiX?|l^g6PBT| zszqW0q1yd{`X%GLufF`ydTcT>D~vQ6%X& zGaP0PbAQ^0J@+{+?p-&-w>!o2XFz5ekU_7iK{D3Ytoc*rB59;NB8tG7$pbeb@zqb} z60ZXej|ePex+=>ba;#X@%kfRG+0w#^tpZ0tU&y4Kho? z(*|wA=dK#j1~_p~%g|QP8%dytr}S}MT{lybWuHCP!{HmHVdh+01v2e9lg%%%Qk`{3 zE!+`^w+4SBd-_F7B9atWbvXk>D5d~tt#u{n_yq6Dq9=qgQb5_czc%wz0tt=6`*P>h z>L<9b;?gsr+vfA1wP6f@$GNq|_wj(H58vOyI~>U&#VB5XN(+Y^zne~A4EGzH;xWm< zVxp1K&++pxoIF#DU-uLz2MUq*qV6AAN;jK&yCBhMcc?rHNDR)m>`U>@_7G~r`xU(GT7+3b}VhHv@4 z1J^(nyLz6jNsVD&zTJss2G}O?nhUt9Za16xn}VUw-TK{`8Byjmtu$AT<+zI%x;bHA zet66O2oz*EK8IIa_7A*5Rc_xHqE8RQVXLVZ#W1=bzL;lYOqP&2I_p79tw%+8&%GEv z8-YB(5NQu^a?%&R982L%%~aBS5YZi5dklc*b^^qqO8&DJjL9WQ6dd3X!}nu3CASd- zieAbH*TN4NW(1kj@t+{y7dsQ#GtAXvp_f@0)zM`IqMmOrA4sD#Ki=&S z+sfZe&N8qaY02!I-=Wf1SH}C6+`*S~(S0$Ka=!>5A)%;A8Jn<{V zN8-8xR2GuqqViAz0|eDDFPf)c3V_H4p9}Fbiu|1;NBa_D$f{e!aprD2#q5O{w%qob z#B7|Q!XZYV20>KuIN=}`vG42=r8Jn|)t&;U%V}bOeWqlASwA_X53wM8HbhN)U4Z^XxWPI*)K{`?ZZ*|r}S2Qs{ zHxi{measg?3$puCp$N_sC)|O;BO`8NPl0$*`3udn_AVvK;|d2mbEFcl2bZIf0<6GJ z(M*aq_joY4;YuU&6Il)~8Y6MEX)7~Lq^@P0k-Q%FA;l%O|IzdiC*FY8?l+U*WN5!}-7UCw=Bt+S%W3->%Y zQWCAspi_|2R)RJu_?>%WYGuFT@_JqkO*=ZU9&kER4W$ke8n%O;KM&S)5}14m6n_s* zKP}YBc_3W0HTwCV#D-065kQG*k4r#an^V6f`^4y82k_(yh#V+(c;6U!&R|&c{Z>%r zdAc!<$sy^q(6w2-I&$iVE@Px>8 zP^3W3VEBdPGr5l9lV-1TUKRj^n!T$=QADhEBHp^ocz=EvtB#=sOry2`7}a+g<3RL8 z8TYJF7-b`c#L+1&6=r=W^4^%1Sua*16uf0q2X&+uQ1<9ySxOT|t7xziA1S|a=YK6xsv9rFH zqVXRbXwJC3___K4WII9f?!~RRPD(nTg$-6rAQu@ECzwIU+5(D{ct$@Jid8c8-V3>! z2@uGzu?sy%vc*}IU*tErF()vQ>DnC|KJZeG+y&50VZzD3+6_`m_KqAvqefh)fM!OH z^)m7W{sZY3$fuv#sCAehkgXHc0w*u!7_CMD@p3Qk{NYDv>2zkr#nmu@_)-_BRj3ci zgtV!_WQ98W&qy7!*H3%Z#Lj(pknh`tDvzJ{f18fw{Nr#G6ugENlWyU(cY4!3?>`9q z3{oJjafv?YXle`lT`?7IsggvXQ43c5<;pA?Z)S34=mP{Na_4Rt4m`*Hy9r6;BSnQ2 zZ=n<-hD2CR-RHyve};A%rA}4p;Vyo=Q&iErM#&<@1GkvB-vmaV{L4 zU^!F50j;kD87iXvf(0r#@H=xW%q+GKUwD+3HBsRNzZds^CVtf=yj7UeskPB?O3S1b zbnJ!{eSB^(E7Xw%;)m$#YXfFXh|<-a@DuMIIyY-Mva83Bx`7oDg~`O-b<^ zpT&SG>JL6N*SY)CkJ)+QLlgg)N@IT6-!Zf5UOxAwji6X{OtXkMIt(fBMrnVRH6c(# zB(8j3Ie+kMv)Z4V`{b|fOlwuwf4jVHpYJCCRJ?2uKBuueCKbaWWa$2PZ+ZcWCoZp% zbxn-x_I?$c@Vkl11?uDuxQQ-*UVB?Ue`Uc2(qOB&xJ!pp7zu?Rpkk*CFwp}55FbK9 zaQ6D6Yn*TWS-)znhSz2B-{z`v_EoIddW$FX59O=0JUKcbbI!1eZc?qTOiYOknif}z z?GwRpbm{* zyb%F>zOwJJl=W7CCC1-Qob=>{+{JpXg10!uir|Z)5tUYi z_DVApy7U+s<62`$4y-iVuIAfQEi6pIC&!eaYY>M9*L9yH!Bp|sKTGrlezu*_9n;eh z$&q82>B4chc5u@d-MytfH(;-CaOtS2&+8f^D4a7{jv=_lG-Yynu3mhLpFIsp{!^AQ zNv$-w@WgG+KP&EEh|6<}Q%2AC9S9Y(IT0C^kjWPulhVf_mWglnEa;j7RV`-69*zkihSmr|ZTUCA|g-*eqi;Nrtg2do%LVjo{ z%a^t_t*Cp)F)n9?C7Uj_8Vhaud`!((qVWEWl74gBanJM#+}y1<^H+%ZP;Q_)B20HE z&zl>t)-2SnVHgOQfiYX2gw&utJrN8?bliE6zdPzH8El#x1$+u73ZxY$+|Pk1i^?tm zz^z}N@}6%xF#LOJ>}8}hjgTGa^p2IQ#>>alZ0V5Kb9}culsPm(yvc6Pl>9D6Or*eY zQX6WUX3|Uuo(^S~N1eUTeU&&cTM&ycxHH#jjKoZT{ki*F*~M& zq2|AQ!eluUzAud0brb$R&Mrm14R8)?_A}&L3EoZB(#ve(r)P0ROu#D;TUdIyiM!s{ z&e5+iJ!EX-?{L4%{)$lAv`E15*qLBqm_64&--@r5%s8&=%+`)A{;L5;HMjUr|8jT^ z?W&xMw9Yxnr>Tk#Ud#mcxS(kS?9t4sTs7zZg}j>?(tAdYIW5Y+^G&c~Qa5+=nho^25r@>*XZ+q^{4VK)f>VC5Id2F<7rcgHWK2Z9?^YTAk zf?fk~_zye2(M_;4v9*OH!VN5?fXY{&d2bzz))ZM>d9qbGo5x@hoZtI%|D^18)dhf1 zKVB1h!Y7}~3atUF{4{O)6feRp;&Je!1nG9l=H{6LPjJLG$JUc(2*SMoV*vgi{B8m= z>PbSLsBDW$+pa$oog$q9nikv*eOgKF-uXfk1rxh7t>0FSAD`99$SX6kqu7B-Ijq(l z!a<*=zhlJI-hiYIQs4xOIwtDw4$3&vo=d;n{1^<9+_&-X5jmQ_Pp zdPyxCO$92#oRKfHr=Yw+qGHQZ4ANj@I9jdsQ`xpJ-qTL0srDkqaJ}{#m8%H39 zD`|YvAU7v+onV~cUZvc3c;gSGoewHB*sH$5t4=!Zi=W%97t?^zO9u$*0Hj%e`lS8{ z%Y&sZkPPa2&{FR*wO%`d3D{_;0ol=z2(WmSS1NWFliywcLj32kIBfalU+t=L9MI|o zQCSAyP33uhvPxla2|tjO#vHy-ad%hpz6_fA4EY0K?L+mdgNIU*36sx$)(6kff6*cP zRY^gC)==!K^0~%Vol>$3lq|R3fO!?CDl7II+*;-}K7&p?EEE&>M)wMTod{kPxYc7= zn)mJ1vkw_ z=N^?u!OmxN&@z7Ypr>-C8Zc|`rNU1a0M7rb;(ja?{=#$j?<)13uL*G-2tZ0}0>D~w zp1gosEvq=y<2JVx=ul<5-6&=79bo%{V!$Gi+^EvC)B#eZ z@!q*!EN6B%@5jwEdzj*!av5}@{F%|kRG{&zy*;o)s)rGN+80Cez#0Oi!AN=1^tz)* zW5Dq=OV@9IuPpYDej&=V&u=ogmBhzgIFWUm`_bWUTs`5Nn*IXe%@&fCt0iNxeV}Cz ztQqdv8JU*)`5xA@Xd~TMZtqf$S_vP^gX0Tpvo9S%uD72AlX*lHJ1tU(6Iv;}40<OeW_E8l;MC2NPCQ}6 zu+i-p(~<-q++JX0XxX^_ByX>^MG{F3bv;>sdaUVe%o#Rssq@~tIZY2?#7c~kY4 z9(+EbKf8VO!7}TPAN!tly6fD=yf!9^X<(IxK12Kb5VHKzUNFcNjS{QU&m$fcXl zV*5_JF#}bBJM>&HHs$v$a|5Sb!V*ys)#E={ZkJ+rr{`Y7KraV&`P$XO{Qrh5!&4a| zjgOh+#d5t5T|FjI(>DVGhRv}uqVdCuj3K4WFU0U2n9UJT(Bb*=AZ+q!yR0JI;PD6A zs|ybr)dIOSzZuo2+JzXFrtNFQ{Wz_s;&Q9yO7Mgu8rlR;sGzN24S4nU;AKjfNh>G@ zZ~y3%$!>eC+xvt}9+j!hEHv*_uDhnba9P%O8Se2v0o+~z!){(i``ok4qqlxPK=Fdp zUjvPv^%5o32j@F&nqs8woh3>utq)>e^Qr9ZZSb^z7k20ieTQ?$j zQL+a&ip^YRQ^4$4B3}D9U-(ee`^8MB+4eTKFFIQ`>7gc}AT+v3Q3Z))b)BFfDbYdC z$f)Ygyc8}06fa8pJ?a;*pKCmPs;+MrNEygLVE5^`NN=DJs5)B)@xl)j>52fPt_y(= zCweq)AA4Q%-P^Hcx5!8-*!N$=i=k(gQn!3VzwJOa>YyJs*V*MBlkdWOW}P?h6khdS zXR)!m281jBCdVCqFxa!K4&?L4~SaQ41*;WUOx2;^D0}PghRlr=Q@rMOV&cXJ=}81)C)yI7Izx_<@gM7@rJEr&Tt zBOI4~Tp^Kj0f+YR$3}&riNGD>3x5hH`_Z1eX$;q^t~rF1TVh#3@EUrSoiawaiCdOI z$Kpjm)qnj}S)Ov*!tLUww^sw48`E~*@P`(Dcz@13|JvrEtX|PlVv}}t1aU-FpvEda zK#ebtsoj%s7pju({adnUU7Xe;(Lpk8l_vq;rD$3>xKd^V9quHhfiAcEIj?N+I5V(L zEML<(y#?6^2Q8U~il;vQaQf8^-0hx4dN$P3>FNBc7Yl+{3-0Ss9u$Xwp_IwM=Z zzX8O6rb}SfQ~BMu`0Gl!NA`Emv?X4ECZy=kvnb~pfvE6%T) z-;d~p_OBWf^SjmvAjXkeTeJm?Z;0XyuoAY*(Nc5Q>&ZDt*YEl9J~3Cnka)tgmZ<1z z(a-`8@zA)`!Xf1Sqs>U5_64L9T(&2O8GXBdRrZq0(q z#JxDdk!M){g|*|EJ{9aBgo`~(i*R#}FtWw+U^qZE8;03@zqwXA@*aFo()z1gp;vSO zp9HXziL|-!`VomjeVvk-s0YCOZ>w_0gc8pdj?CmOodJ5tNTPdD&AK?L*4O@YYj8B@ zpFn^hXv-vm5j4-j-u@dg1GgLi*_m>-p%kQlSh$XnpH^+MTHUslyJ3iPw%%*zhMpNB27Lx~Iv)z__GE##HYeN$Kn>WLYEk zfRg8F3gCY%s)Mk5CC#X_HWWl(KNKzp8Co*i*=2~MpW+|S9u2FG1E(3O3jR9{K*ul+ zgu{ZEz2fnWGjBl*?V%K|n7W$pUdi(&Abl{@q(U#2UAV-3FwNDZ+{v{TB>8K~mr9{r z%Dgz|s)X+6**Av)wBHqYYntxa{uHC70lSh~=y34EUf4gH5Tdbq^Eb24qt)nc{O|CF6c_yUV_X8ipDS*UNd!c4j#+rDVZ z>*4xW{6E+PmQR2CyQxA5wO7|UXU0%AasZsq54T3xowCEs)GWK7rb77bJ>uO~6T21N zJt8+4`K;oz;&)mjeLhQVm( zTXw7eq*z){h^RUnSl(ED6L{=me{;GS4o|a2Pdc9LEfNOQ<^Uv6>0L#MSI#R>phf>6 zTaT}KUjZi~x5#ISF07>;28D%dmq^FmaO3JAvD!`pJJ5k@7un1`$Fj=eAxM2d>0TGN zWFE0qe`GOzn9cwv4^!oznvL*wL>Xi>bb))cg6>d4rJ;H5hnDAvg|)&tmmJC?zE~qL zy&?si3}kc#KnvF28Fv!AaNh2{BBs3cE9MKXA(hV(Uh=EeCwvYz1$iU(6S-Ng? zh#44OO~i)vgqw%W=E>{rn#l-=)>_vmC{KU-LcpGrF7Kk+m3N8M}F|Un1>X{V;<8Zm7T|+%J+ZM3JD{qvm!F zs8+1Uuc&@|?3>)`u|m6e*g*B&DNR;PC?4S?xRW-MxLT-PN&Z-T zPT{?hn_pXx1FNw(IuR-T9(25J3_cMCe!-E8dW2G181#EkR(#g1B|nT&M-w9MIYR~8`l0-z&@pqg1jY` z1a&kmKbt#Stp4Wv2vuH)1H?OZoLXR<=@t9#^@xKsM$gv@9~@h8OWn-sWTv~#_XRoy z23h(2%t9{oe@q1Y!6g(m@;oxTBcNZ{1Z~E=K^uC7HI&Q#y9l6)9ricSC4EmU6Uj@6 z(Dx7eKJ`&H@+e50Fb20k+k>k0(U=>I1i2rjC?V!P%6`pm>MBvgY<>|TfN{J(m-2Z~ zYuSnb^G+f`zEPIW$PAub=+W)N{qN->pE(z{1J?;(O=-ktC?`^=`0`IH^ zbp^VN$>&PQerEM`n9kBABi)#N!b-zyx$6Ty(OW?&4kJKnfg&m6k^7wsQF8(Qq9C0D z9ItU{)+$))=LU1x8av^BorHrUh@XFl@_+*=_9dVD8T82lnJ<^_TsYjx*9UMFc^uI} zXtPecb3p`S1C*P1?L8N@neP{)ChM1&SnCZ0nFJb=0x!qPm9zSTTr-r5)Px+VWN<>0 zWXmt9+Zy%re85htPSq(8SbE&ZaJT8;P#k*>{R?cgWe!13@P?XVKhC^UuM8-WSv4qY zIY^g=5V5bZgiX_$s8?a2CEe--04e6ebU^e5>^zMHpBc*!H z8+MqW*t%Z8U!{FGlJ7m|pE$c9SD+B~9?3Z)t^`;Y#e(dMX(Z;2xY-@lbY}Ef0 z_a53X1f6JGZbybZ=c@#72e#6%PQWxCV|$LfUhYchM|ZnBIK70_JbT8%{#Ln0J&x;9 z0f?*xiY&mu+~kR=jS?2AeWWxyi#l2O=fCg=XJ!L#bA_mMP$D2<-5eqml|?{FtFs}CUqAm*Z zpcBBP!F5KeNnDeP$bkuylcdZ9{a-L4iB|>F4Ju)Lx11z$1swg4Uj>y5#QXQnY)QfQ+9tk_0U%WhmSnGFVu1zN2|p z-?O7pR3S1!B$wK&#H-hpAQmqOy7J#iJlxVxv z|DXYFlD2c_SGO{pb7EMe50KIVC|Kdn*QHcUO5N%HkEM=I*TLmVcrWmL1`{}-h7Q$8 z%~E;1*(iM(6z9{6-JKJl{EC5t3CwMTqV4+xq;XfuE|_Ley8({AaNQ#P?K!(!FRi1l zVo!p*{S+fLBO*EQn3l#AQ82d(%{M`vfq$B`NzW>)9C>Wn{X-0K2?QI{u(bcig{0Hy zNsfpPKl9P8+Dhb1!P)I3vvWXM1U(!6p3-=c?b;;OL7L{kpfv&nZ)TKUEq99Gj7<;$ zDPStxj&WZ(ajF1uPVry05;Vye2DXB)@-cf~j+^2IIRz+{Q)K3DM5B+}{;oh0 z3U3`l*Z8fuHJZx>t)zph25}sS9PZil_f(kp=?dBe2!GdO8;f9)*CEaayYf(3DXy{| z01vQzf&TEfyD8O8pmoGJ6CljIRpkgFb}X21cPY@Sy7p3G=qyx-kIiS><)!cTa#DQva(JjT5C1MkyVEAHRSR_j{X8X5x}*JgCX+%&*4^K zt*HB-D*mdujoBG{B9z@6!6Yo1#sYSS6kq`;KdBIL6c*3#ng+_9YrSLu+GB@$MM|%}6EiZy7OrM)l1l}KCQ2y0=MeE^>-@L;_oiU< zef9-=&~g9J=pZr4&T$Ot+*Y*>7(T^oJJP%gPjzONEIL`NMZEytLkMC{$}irC(P{2| z3(-wWeU;uni&!Ps-?+Q!UH|FnS}hNl`s4v9&CqA~EZ5)yMnk3FR()pb@S4X&hUR*P zAXZ8@TaYFZ);!U9i`DLd`e|sCa`2%9U%i735n^PCU6oO=RyzD4*{luNO7uN1^|Utz z8FFc6>tB1~BIsZtrNMADTPnYd62HccrvcmCr(L07hvE4lBfAtxa)jf_R6CmAMNp&< zJ`SF^v8D1Ijb6E@74jZbXz*~;uy}6GkBg95ZyPYyG1sBnu7d{xnLMF51`vNTbbNW1 z13#BNJLODR0cSyu`|#R7xl{J**bAhaY%i@HqbhAs$0XUTJ1 zv}z1fD3F$6wp(sgX_a1k`5VxXDKpr_EnCJQy0&Lt0)pdy8*NgK#-r9?YS)rS3U-0h zv(8C?t0)?5rv-oqGs!C=C1v)C-G}J|P+j8XEJjZ{RfeEPoL*gj3SCTk{Qv#(lt5=8 zr6qa776KKm8xoQj9ome!4@Ha*biZJd8P8pVfb5jx75wiDrNzy6oWGtqf>)+nGfyU# zQJBq6+N;4b?M&g{+9}-juYhKN*Uhq5^JGlRAPsJK#?%X&q*FaUWykcB8y1ZCkGL(7acZTnz-@ah_KmFPsO#!OlxLa#~2VZMid)+h6Y5Z7_ zC^_jS>~$-BG@@K|P82-IxCqFe&4q7kJO|#2NxL{1c^psw^T=*sL_Y)dPI{3aY)fBp z3(SdC!OSKbrf?4|HXr?|U#WbM%cxulZOS<8k?K}!WhP+(^}P&=={@LL7=n1Fhfm*P zNir-4kMR^R3oL*+c8Ix-p6@w2GoPsa4aoHfWfuA0l4cU?kmM7}1Hf}D^Dr4Ls*B*S zyEK)@c>|ivaXeXt(c45ep_`0l%2$nYIkL@x`V&964;iq=7p3+9#556#A=ox_2DY+V z^OCIcuTQ9EJ_+)=JtVzvis&xI|Pi{-EoH<#ex4%z>w7V5(vJ^ZK(K&0HMvt}RnGOZisRadncF*1lxhqHISn4chc9B?<2gdh5ZWT1 z^m0SA9PLc&PtJqZHX=s5GZ`Q9oyHeF7Jiq@la(USkPSJ855UM zJNvGP-~aot_Mg5*GCjIq1YK7=uN2_mNZO94*UJ?)dtY_LQ zvmDw~`K0p=W4=~c6g5-*@zTb4qu7@3DgVW%Z{f6Rj1H_NQ!o&GCL_}nx&rv`q<;sSTKh%84ES67TIhpdxq zMBJM}1ZH|h+w%vgo&Dc0H2FUc{D0(tNwUTO&5&9ylZWa7s^fL-!+5s&lb%A$ zQ>D;fD%cz4PoRm6E;W;{c~WU)K2j?7?zCKJ(|i}mAn_*9 zdbSKr_4O16(kHB1FQ~cxjd){tUXe}Gm{2QOa#dD?zbgg-&*VC(4xiSD?&X@6x>QB( zbsH4_JG&Y`NU*h6OtwM1mC;Dyv%=m!s_D@}t$umX02(;HQm~pc30qsks|$Rcx~*$Z zP+V&lpg@7F`b3?0^F`AGc$ul-odXmYlk!W82!9x1Vb6&0$nWK`cVAzPw}N|ofsbiA z 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 literal 0 HcmV?d00001 diff --git a/appstore/elastic-kibana/8.16.1/.env b/appstore/elastic-kibana/8.16.1/.env new file mode 100644 index 000000000..7436b5df1 --- /dev/null +++ b/appstore/elastic-kibana/8.16.1/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +KIBANA_ROOT_PATH=/home/kibana + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=5601 + +# Elasticsearch 地址 [必填] +elasticsearch_hosts=https://127.0.0.1:9200 + diff --git a/appstore/elastic-kibana/8.16.1/data.yml b/appstore/elastic-kibana/8.16.1/data.yml new file mode 100644 index 000000000..4a6a5dd1f --- /dev/null +++ b/appstore/elastic-kibana/8.16.1/data.yml @@ -0,0 +1,24 @@ +additionalProperties: + formFields: + - default: "/home/kibana" + edit: true + envKey: KIBANA_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 5601 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "https://127.0.0.1:9200" + edit: true + envKey: elasticsearch_hosts + labelZh: Elasticsearch 地址 + labelEn: Elasticsearch address + required: true + type: text diff --git a/appstore/elastic-kibana/8.16.1/docker-compose.yml b/appstore/elastic-kibana/8.16.1/docker-compose.yml new file mode 100644 index 000000000..33d33d8b8 --- /dev/null +++ b/appstore/elastic-kibana/8.16.1/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true +services: + kibana: + container_name: elastic-kibana + env_file: + - ./envs/global.env + - .env + environment: + - SERVER_NAME="kibana" + - SERVER_HOST="0.0.0.0" + - SERVER_PORT=5601 + - I18N_LOCALE="zh-CN" + - SERVER_SHUTDOWNTIMEOUT="5s" + - MONITORING_UI_CONTAINER_ELASTICSEARCH_ENABLED=true + image: kibana:8.16.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5601 + restart: always + volumes: + - ${KIBANA_ROOT_PATH}/data:/usr/share/kibana/data diff --git a/appstore/elastic-kibana/8.16.1/envs/default.env b/appstore/elastic-kibana/8.16.1/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/elastic-kibana/8.16.1/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/elastic-kibana/8.16.1/envs/global.env b/appstore/elastic-kibana/8.16.1/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/elastic-kibana/8.16.1/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/elastic-kibana/8.16.1/scripts/init.sh b/appstore/elastic-kibana/8.16.1/scripts/init.sh new file mode 100644 index 000000000..f68fbe6d5 --- /dev/null +++ b/appstore/elastic-kibana/8.16.1/scripts/init.sh @@ -0,0 +1,22 @@ +#!/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 + + mkdir -p $KIBANA_ROOT_PATH + mkdir -p "$KIBANA_ROOT_PATH/data" + + chown -R 1000:1000 $KIBANA_ROOT_PATH + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/elastic-kibana/8.16.1/scripts/uninstall.sh b/appstore/elastic-kibana/8.16.1/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/elastic-kibana/8.16.1/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/elastic-kibana/8.16.1/scripts/upgrade.sh b/appstore/elastic-kibana/8.16.1/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/elastic-kibana/8.16.1/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/elastic-kibana/README.md b/appstore/elastic-kibana/README.md new file mode 100644 index 000000000..b54d239e5 --- /dev/null +++ b/appstore/elastic-kibana/README.md @@ -0,0 +1,58 @@ +# Kibana + +Kibana 是一个用户界面,可让您可视化 Elasticsearch 数据并导航 Elastic Stack。通过本教程了解可视化数据的基础知识。 + +![Kibana](https://file.lifebus.top/imgs/kibana_cover.png) + +Kibana 适合管理员、分析师和业务用户。作为管理员,您的角色是管理 Elastic Stack,从创建部署到将 Elasticsearch 数据导入 +Kibana,然后管理数据。 +作为分析师,您希望发现数据中的见解、在仪表板上可视化您的数据并分享您的发现。作为业务用户,您希望查看现有仪表板并深入了解详细信息。 + +Kibana 适用于所有类型的数据。您的数据可以是结构化或非结构化文本、数字数据、时间序列数据、地理空间数据、日志、指标、安全事件等。无论您的数据是什么,Kibana +都可以帮助您发现模式和关系并可视化结果。 + +![](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) + +## 特性 + ++ 搜索、观察和保护您的数据 + +从发现文档到分析日志再到查找安全漏洞,Kibana 是您访问这些功能及其他功能的门户。 + ++ 分析您的数据 + +搜索隐藏的见解,可视化您在图表、仪表、地图、图形等中发现的内容,并将它们组合在仪表板中。 + ++ 管理、监控和保护 Elastic Stack + +管理您的数据、监控 Elastic Stack 集群的运行状况并控制哪些用户可以访问哪些功能。 + +## 安装说明 + +> 首次安装 日志中获得初始化界面的地址,访问该地址进行初始化配置。 +> +> http://127.0.0.1:5601/?code=xxxxxx + +### 注册令牌 + +可通过以下方式获取注册令牌: + +在 `ElasticSearch` 容器中执行以下命令: + +```sh +cd /usr/share/elasticsearch/bin +./elasticsearch-create-enrollment-token -s kibana + +# 或 +/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana +``` + +### 登录账户 + +> 默认账户: `elastic` +> +> 密码: 自行查看 ElasticSearch 参数配置 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/elastic-kibana/data.yml b/appstore/elastic-kibana/data.yml new file mode 100644 index 000000000..f523cbf66 --- /dev/null +++ b/appstore/elastic-kibana/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: elastic-kibana + name: Kibana + tags: + - WebSite + - Middleware + - Tool + - Local + shortDescZh: 基于浏览器的 Elasticsearch 分析和搜索仪表盘 + shortDescEn: Browser-based Elasticsearch analytics and search dashboard + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.elastic.co/ + github: https://github.com/elastic/kibana/ + document: https://www.elastic.co/docs/ diff --git a/appstore/elastic-kibana/logo.png b/appstore/elastic-kibana/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..116cb930f44cbab3e92e6168be1f224c5db7eec3 GIT binary patch literal 36919 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 literal 0 HcmV?d00001 diff --git a/appstore/element-web/1.11.86/.env b/appstore/element-web/1.11.86/.env new file mode 100644 index 000000000..beaf15dd8 --- /dev/null +++ b/appstore/element-web/1.11.86/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +ELEMENT_WEB_ROOT_PATH=/home/element-web + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 服务域名 +SYNAPSE_SERVER_NAME=riot.example.com + diff --git a/appstore/element-web/1.11.86/conf/config.sample.json b/appstore/element-web/1.11.86/conf/config.sample.json new file mode 100644 index 000000000..af170bfe5 --- /dev/null +++ b/appstore/element-web/1.11.86/conf/config.sample.json @@ -0,0 +1,53 @@ +{ + "default_server_config": { + "m.homeserver": { + "base_url": "https://matrix-client.matrix.org", + "server_name": "matrix.org" + }, + "m.identity_server": { + "base_url": "https://vector.im" + } + }, + "disable_custom_urls": false, + "disable_guests": false, + "disable_login_language_selector": false, + "disable_3pid_login": false, + "force_verification": false, + "brand": "Element", + "integrations_ui_url": "https://scalar.vector.im/", + "integrations_rest_url": "https://scalar.vector.im/api", + "integrations_widgets_urls": [ + "https://scalar.vector.im/_matrix/integrations/v1", + "https://scalar.vector.im/api", + "https://scalar-staging.vector.im/_matrix/integrations/v1", + "https://scalar-staging.vector.im/api", + "https://scalar-staging.riot.im/scalar/api" + ], + "default_widget_container_height": 280, + "default_country_code": "GB", + "show_labs_settings": false, + "features": {}, + "default_federate": true, + "default_theme": "light", + "room_directory": { + "servers": [ + "matrix.org" + ] + }, + "enable_presence_by_hs_url": { + "https://matrix.org": false, + "https://matrix-client.matrix.org": false + }, + "setting_defaults": { + "breadcrumbs": true + }, + "jitsi": { + "preferred_domain": "meet.element.io" + }, + "element_call": { + "url": "https://call.element.io", + "participant_limit": 8, + "brand": "Element Call" + }, + "map_style_url": "https://api.maptiler.com/maps/streets/style.json?key=fU3vlMsMn4Jb6dnEIFsx" +} diff --git a/appstore/element-web/1.11.86/data.yml b/appstore/element-web/1.11.86/data.yml new file mode 100644 index 000000000..3c027bb11 --- /dev/null +++ b/appstore/element-web/1.11.86/data.yml @@ -0,0 +1,24 @@ +additionalProperties: + formFields: + - default: "/home/element-web" + edit: true + envKey: ELEMENT_WEB_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 + - default: "riot.example.com" + edit: true + envKey: SYNAPSE_SERVER_NAME + labelZh: 服务域名 + labelEn: Domain Name + required: false + type: text diff --git a/appstore/element-web/1.11.86/docker-compose.yml b/appstore/element-web/1.11.86/docker-compose.yml new file mode 100644 index 000000000..875f9035a --- /dev/null +++ b/appstore/element-web/1.11.86/docker-compose.yml @@ -0,0 +1,19 @@ +networks: + 1panel-network: + external: true +services: + element-web: + container_name: element-web + env_file: + - ./envs/global.env + - .env + image: vectorim/element-web:v1.11.86 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + volumes: + - ${ELEMENT_WEB_ROOT_PATH}/config/config.json:/app/config.json diff --git a/appstore/element-web/1.11.86/envs/default.env b/appstore/element-web/1.11.86/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/element-web/1.11.86/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/element-web/1.11.86/envs/global.env b/appstore/element-web/1.11.86/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/element-web/1.11.86/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/element-web/1.11.86/scripts/init.sh b/appstore/element-web/1.11.86/scripts/init.sh new file mode 100644 index 000000000..65e20abfc --- /dev/null +++ b/appstore/element-web/1.11.86/scripts/init.sh @@ -0,0 +1,29 @@ +#!/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 + + # setup-2 copy config file + mkdir -p "$ELEMENT_WEB_ROOT_PATH" + mkdir -p "$ELEMENT_WEB_ROOT_PATH/config" + cp ./conf/config.sample.json "$ELEMENT_WEB_ROOT_PATH/config/config.json" + + if [ -n "$SYNAPSE_SERVER_NAME" ]; then + cp ./conf/config.sample.json "$ELEMENT_WEB_ROOT_PATH/config/config.$SYNAPSE_SERVER_NAME.json" + fi + + # setup-3 set permission + chmod -R 777 "$ELEMENT_WEB_ROOT_PATH" + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/element-web/1.11.86/scripts/uninstall.sh b/appstore/element-web/1.11.86/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/element-web/1.11.86/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/element-web/1.11.86/scripts/upgrade.sh b/appstore/element-web/1.11.86/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/element-web/1.11.86/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/element-web/README.md b/appstore/element-web/README.md new file mode 100644 index 000000000..909ac7b5f --- /dev/null +++ b/appstore/element-web/README.md @@ -0,0 +1,38 @@ +# Element Web + +一个用于Web的光泽Matrix协作客户端 + +![Element Web](https://file.lifebus.top/imgs/element_web_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) + +## 简介 + +Element (formerly known as Vector and Riot) 是一个基于 Matrix JS SDK 构建的 Matrix 网络客户端。 + +## 反向代理 + +> Nginx +> +> 在无特殊需求的情况下,您需要添加如下参数 + +- `X-Frame-Options: SAMEORIGIN` 标头,用于防止 Element Web 被嵌入框架,以保护免受点击劫持攻击。 +- `Content-Security-Policy` 标头,添加 `frame-ancestors 'self'` 指令,作为 X-Frame-Options + 的现代替代方案(建议同时包含两者,因为并非所有浏览器都支持该指令。 +- `X-Content-Type-Options: nosniff` 标头,用于禁用 MIME 类型嗅探。 +- `X-XSS-Protection: 1; mode=block;` 标头,为旧版浏览器提供基础的 XSS 保护。 + +```nginx +add_header X-Frame-Options SAMEORIGIN; +add_header X-Content-Type-Options nosniff; +add_header X-XSS-Protection "1; mode=block"; +add_header Content-Security-Policy "frame-ancestors 'self'"; +``` + +### 移动客户端 + +[![Download on the App Store](http://www.tananaev.com/badges/app-store.svg)](https://apps.apple.com/us/app/element-messenger/id1083446067) [![Get it on Google Play](http://www.tananaev.com/badges/google-play.svg)](https://play.google.com/store/apps/details?id=im.vector.app) [![Get it on F-Droid](http://www.tananaev.com/badges/f-droid.svg)](https://f-droid.org/packages/im.vector.app/) + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/element-web/data.yml b/appstore/element-web/data.yml new file mode 100644 index 000000000..25220fc38 --- /dev/null +++ b/appstore/element-web/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: element-web + name: Element Web + tags: + - WebSite + - Local + shortDescZh: 一个用于Web的光泽Matrix协作客户端 + shortDescEn: A glossy Matrix collaboration client for the web. + type: website + crossVersionUpdate: true + limit: 0 + website: https://element.io/ + github: https://github.com/element-hq/element-web/ + document: https://element.io/user-guide/ diff --git a/appstore/element-web/logo.png b/appstore/element-web/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8a92cb42ae256ddc835d210826512fdf6f9916ce GIT binary patch literal 82981 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¥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 literal 0 HcmV?d00001 diff --git a/appstore/emby-amilys/4.8.9.0/.env b/appstore/emby-amilys/4.8.9.0/.env new file mode 100644 index 000000000..109930710 --- /dev/null +++ b/appstore/emby-amilys/4.8.9.0/.env @@ -0,0 +1,21 @@ +# 网络模式 [必填] +NETWORK_MODE=host + +# 网页端口 HTTP [必填] +PANEL_APP_PORT_HTTP=8096 + +# 数据持久化路径 [必填] +EMBY_ROOT_PATH=/home/emby + +# HTTP(s) 网络代理 +HTTP_SSL_PROXY= + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/appstore/emby-amilys/4.8.9.0/data.yml b/appstore/emby-amilys/4.8.9.0/data.yml new file mode 100644 index 000000000..433186327 --- /dev/null +++ b/appstore/emby-amilys/4.8.9.0/data.yml @@ -0,0 +1,61 @@ +additionalProperties: + formFields: + - default: "host" + edit: true + envKey: NETWORK_MODE + labelEn: Drive path + labelZh: 网络模式 + required: true + type: select + values: + - label: 主机网络模式 + value: "host" + - label: 桥接网络模式 + value: "bridge" + - label: 无网络模式 + value: "none" + - label: 1panel-network + value: "1panel-network" + - default: 8096 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: WebUI Port + labelZh: 网页端口 HTTP + required: true + rule: paramPort + type: number + - default: "/home/emby" + edit: true + envKey: EMBY_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "" + edit: true + envKey: HTTP_SSL_PROXY + labelZh: HTTP(s) 网络代理 + labelEn: HTTP(s) Proxy + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_1 + labelEn: Custom mount directory 1 + labelZh: 自定义挂载目录 1 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_2 + labelEn: Custom mount directory 2 + labelZh: 自定义挂载目录 2 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_3 + labelEn: Custom mount directory 3 + labelZh: 自定义挂载目录 3 + required: false + type: text diff --git a/appstore/emby-amilys/4.8.9.0/docker-compose.yml b/appstore/emby-amilys/4.8.9.0/docker-compose.yml new file mode 100644 index 000000000..9b50ecab5 --- /dev/null +++ b/appstore/emby-amilys/4.8.9.0/docker-compose.yml @@ -0,0 +1,30 @@ +networks: + 1panel-network: + external: true +services: + emby: + container_name: emby-amilys + devices: + - /dev/dri:/dev/dri + environment: + - UID=0 + - GID=0 + - GIDLIST=0 + - HTTP_PROXY=${HTTP_PROXY:-} + - HTTPS_PROXY=${HTTP_PROXY:-} + - NO_PROXY=localhost,127.0.0.1,::1 + image: amilys/embyserver:4.8.9.0 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:8096 + restart: always + volumes: + - /etc/timezone:/etc/timezone + - /etc/localtime:/etc/localtime + - ${EMBY_ROOT_PATH}/config:/config + - ${EMBY_ROOT_PATH}/mnt:/mnt + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/appstore/emby-amilys/4.8.9.0/envs/default.env b/appstore/emby-amilys/4.8.9.0/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/emby-amilys/4.8.9.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/emby-amilys/4.8.9.0/envs/global.env b/appstore/emby-amilys/4.8.9.0/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/emby-amilys/4.8.9.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/emby-amilys/4.8.9.0/scripts/init.sh b/appstore/emby-amilys/4.8.9.0/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/emby-amilys/4.8.9.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/emby-amilys/4.8.9.0/scripts/uninstall.sh b/appstore/emby-amilys/4.8.9.0/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/emby-amilys/4.8.9.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/emby-amilys/4.8.9.0/scripts/upgrade.sh b/appstore/emby-amilys/4.8.9.0/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/emby-amilys/4.8.9.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/emby-amilys/README.md b/appstore/emby-amilys/README.md new file mode 100644 index 000000000..0544496d1 --- /dev/null +++ b/appstore/emby-amilys/README.md @@ -0,0 +1,81 @@ +# Emby + +Emby是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备。 + +![Emby](https://file.lifebus.top/imgs/emby_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) + +## 简介 + +Emby(原名Media Browser)是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备。 + +Emby服务器端支持Microsoft Windows、Linux、MacOS、FreeBSD,客户端支持HTML5网页,Android和IOS等移动操作系统,Roku、Amazon Fire +TV、Chromecast和Apple TV等流媒体设备,LG智能电视和三星智能电视等智能电视,以及PlayStation3、PlayStation4、Xbox 360和Xbox +One等游戏机。 + +Emby原本是大部分源代码是开源的,带有部分闭源工具,但是自从3.5.3版本开始变为闭源软件,Jellyfin为Emby开源分支基础上发展来的。 + +## 安装说明 + +### 开启 `投屏服务(DLNA)` 与 `网络唤醒服务(WOL)` 功能 + +开启后,可以在局域网内的设备上投屏观看视频。 需要选择主机网络(host)模式。 + +### 硬件驱动挂载 + +默认仅挂载: `/dev/dri`,如果您的设备不存在硬件驱动,请使用删除完整 `devices` 配置。 + +可以通过 `ls /dev/` 查看存在的设备驱动。 + +```yml +devices: + - /dev/dri:/dev/dri + # - /dev/nvidia0:/dev/nvidia0 + # - /dev/nvidiactl:/dev/nvidiactl + # - /dev/nvidia-modeset:/dev/nvidia-modeset + # - /dev/nvidia-nvswitchctl:/dev/nvidia-nvswitchctl + # - /dev/nvidia-uvm:/dev/nvidia-uvm + # - /dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools + # - /dev/video11:/dev/video11 +``` + +如果您的设备存在其他硬件驱动,可以选择挂载。删除 `# ` 号即可。格式为:`宿主机路径:容器路径`。 + +格式请与 `- /dev/dri:/dev/dri` 保持一致。 + +## 特别版说明 + +### 插件支持 + +#### emby-erx Emby 增强/美化 插件 + +> 开启请在 `{持久化目录}/config/config/ext.sh` 添加媒体库ID + +![emby-erx 插件](https://file.lifebus.top/imgs/emby_erx_plugin.png) + +#### dd-danmaku Emby 弹幕库插件 + +> 开启请在 `{持久化目录}/config/config/ext.sh` 中设置 + +![dd-danmaku 插件](https://file.lifebus.top/imgs/emby_dd_danmaku_plugin.png) + +#### embyExternalUrl Emby 调用外部播放器 + +> 开启请在 `{持久化目录}/config/config/ext.sh` 中设置 + +![embyExternalUrl 插件](https://file.lifebus.top/imgs/emby_external_url_plugin.png) + +### 使用说明 + +#### 激活 Emby Premiere + +密钥:`疯狂星期四V我50` + +#### 电视直播 + +添加直播源后,再手动刷新一下指南数据 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/emby-amilys/data.yml b/appstore/emby-amilys/data.yml new file mode 100644 index 000000000..0d1b8a213 --- /dev/null +++ b/appstore/emby-amilys/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: emby-amilys + name: Emby Amilys版 + tags: + - Media + - Local + shortDescZh: 主从式架构的媒体服务器软件 + shortDescEn: A media server software with master-slave architecture + type: website + crossVersionUpdate: true + limit: 0 + website: https://hub.docker.com/r/lovechen/embyserver + github: https://hub.docker.com/r/lovechen/embyserver + document: https://hub.docker.com/r/lovechen/embyserver diff --git a/appstore/emby-amilys/logo.png b/appstore/emby-amilys/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a9d4967871ebd6f3c31bfc58b113225fb1ecac12 GIT binary patch literal 5482 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 .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/emby-lovechen/4.8.0.21/scripts/uninstall.sh b/appstore/emby-lovechen/4.8.0.21/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/emby-lovechen/4.8.0.21/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/emby-lovechen/4.8.0.21/scripts/upgrade.sh b/appstore/emby-lovechen/4.8.0.21/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/emby-lovechen/4.8.0.21/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/emby-lovechen/README.md b/appstore/emby-lovechen/README.md new file mode 100644 index 000000000..36b51eef7 --- /dev/null +++ b/appstore/emby-lovechen/README.md @@ -0,0 +1,64 @@ +# Emby + +_Emby Media Server 特别版 | AMD64/ARM32/ARM64_ + +**愿你生而自由。** + +Emby是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备。 + +![Emby](https://file.lifebus.top/imgs/emby_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) + +## 简介 + +Emby(原名Media Browser)是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备。 + +Emby服务器端支持Microsoft Windows、Linux、MacOS、FreeBSD,客户端支持HTML5网页,Android和IOS等移动操作系统,Roku、Amazon Fire +TV、Chromecast和Apple TV等流媒体设备,LG智能电视和三星智能电视等智能电视,以及PlayStation3、PlayStation4、Xbox 360和Xbox +One等游戏机。 + +Emby原本是大部分源代码是开源的,带有部分闭源工具,但是自从3.5.3版本开始变为闭源软件,Jellyfin为Emby开源分支基础上发展来的。 + +## 安装说明 + +### 开启 `投屏服务(DLNA)` 与 `网络唤醒服务(WOL)` 功能 + +开启后,可以在局域网内的设备上投屏观看视频。 需要选择主机网络(host)模式。 + +### 硬件驱动挂载 + +默认仅挂载: `/dev/dri`,如果您的设备不存在硬件驱动,请使用删除完整 `devices` 配置。 + +可以通过 `ls /dev/` 查看存在的设备驱动。 + +```yml +devices: + - /dev/dri:/dev/dri + # - /dev/nvidia0:/dev/nvidia0 + # - /dev/nvidiactl:/dev/nvidiactl + # - /dev/nvidia-modeset:/dev/nvidia-modeset + # - /dev/nvidia-nvswitchctl:/dev/nvidia-nvswitchctl + # - /dev/nvidia-uvm:/dev/nvidia-uvm + # - /dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools + # - /dev/video11:/dev/video11 +``` + +如果您的设备存在其他硬件驱动,可以选择挂载。删除 `# ` 号即可。格式为:`宿主机路径:容器路径`。 + +格式请与 `- /dev/dri:/dev/dri` 保持一致。 + +## 特别版说明 + +额外修改: + ++ 完全离线不需要服务器验证 ++ 搜索相关 ++ 支持单字搜索 ++ 支持模糊搜索 ++ 可直接搜索剧季标题 ++ 去除自动更新 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/emby-lovechen/data.yml b/appstore/emby-lovechen/data.yml new file mode 100644 index 000000000..e066aa375 --- /dev/null +++ b/appstore/emby-lovechen/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: emby-lovechen + name: Emby Lovechen版 + tags: + - Media + - Local + shortDescZh: 主从式架构的媒体服务器软件 + shortDescEn: A media server software with master-slave architecture + type: website + crossVersionUpdate: true + limit: 0 + website: https://hub.docker.com/r/lovechen/embyserver + github: https://hub.docker.com/r/lovechen/embyserver + document: https://hub.docker.com/r/lovechen/embyserver diff --git a/appstore/emby-lovechen/logo.png b/appstore/emby-lovechen/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a9d4967871ebd6f3c31bfc58b113225fb1ecac12 GIT binary patch literal 5482 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 .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/emby/4.8.10.0/scripts/uninstall.sh b/appstore/emby/4.8.10.0/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/emby/4.8.10.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/emby/4.8.10.0/scripts/upgrade.sh b/appstore/emby/4.8.10.0/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/emby/4.8.10.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/emby/README.md b/appstore/emby/README.md new file mode 100644 index 000000000..ed727a72e --- /dev/null +++ b/appstore/emby/README.md @@ -0,0 +1,49 @@ +# Emby + +Emby是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备。 + +![Emby](https://file.lifebus.top/imgs/emby_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) + +## 简介 + +Emby(原名Media Browser)是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备。 + +Emby服务器端支持Microsoft Windows、Linux、MacOS、FreeBSD,客户端支持HTML5网页,Android和IOS等移动操作系统,Roku、Amazon Fire +TV、Chromecast和Apple TV等流媒体设备,LG智能电视和三星智能电视等智能电视,以及PlayStation3、PlayStation4、Xbox 360和Xbox +One等游戏机。 + +Emby原本是大部分源代码是开源的,带有部分闭源工具,但是自从3.5.3版本开始变为闭源软件,Jellyfin为Emby开源分支基础上发展来的。 + +## 安装说明 + +### 开启 `投屏服务(DLNA)` 与 `网络唤醒服务(WOL)` 功能 + +开启后,可以在局域网内的设备上投屏观看视频。 需要选择主机网络(host)模式。 + +### 硬件驱动挂载 + +默认仅挂载: `/dev/dri`,如果您的设备不存在硬件驱动,请使用删除完整 `devices` 配置。 + +可以通过 `ls /dev/` 查看存在的设备驱动。 + +```yml +devices: + - /dev/dri:/dev/dri + # - /dev/nvidia0:/dev/nvidia0 + # - /dev/nvidiactl:/dev/nvidiactl + # - /dev/nvidia-modeset:/dev/nvidia-modeset + # - /dev/nvidia-nvswitchctl:/dev/nvidia-nvswitchctl + # - /dev/nvidia-uvm:/dev/nvidia-uvm + # - /dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools + # - /dev/video11:/dev/video11 +``` + +如果您的设备存在其他硬件驱动,可以选择挂载。删除 `# ` 号即可。格式为:`宿主机路径:容器路径`。 + +格式请与 `- /dev/dri:/dev/dri` 保持一致。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/emby/data.yml b/appstore/emby/data.yml new file mode 100644 index 000000000..eb6d4128a --- /dev/null +++ b/appstore/emby/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: emby + name: Emby + tags: + - WebSite + - Media + - Local + shortDescZh: 主从式架构的媒体服务器软件 + shortDescEn: A media server software with master-slave architecture + type: website + crossVersionUpdate: true + limit: 0 + website: https://emby.media/ + github: https://github.com/MediaBrowser/Emby/ + document: https://emby.media/blog/ diff --git a/appstore/emby/logo.png b/appstore/emby/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a9d4967871ebd6f3c31bfc58b113225fb1ecac12 GIT binary patch literal 5482 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 .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/ghost/5.101.4/scripts/uninstall.sh b/appstore/ghost/5.101.4/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/ghost/5.101.4/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/ghost/5.101.4/scripts/upgrade.sh b/appstore/ghost/5.101.4/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/ghost/5.101.4/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/ghost/README.md b/appstore/ghost/README.md new file mode 100644 index 000000000..5c736e3d8 --- /dev/null +++ b/appstore/ghost/README.md @@ -0,0 +1,139 @@ +# Gost + +用于现代出版、会员制、订阅和通讯的独立技术 + +![Gost](https://file.lifebus.top/imgs/gost_cover.png) + +Ghost 是一个基于现代 Node.js 技术堆栈构建的开源专业发布平台,专为需要强大功能、灵活性和性能的团队而设计。 + +![](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) + +## 特性 + ++ 独立结构 + +Ghost 的结构是一个非营利组织,以确保它永远不会合法地被出售,并且将始终保持独立,根据用户的需求构建产品,而不是寻求💰回报的投资者的突发奇想。 + ++ 可持续发展的业务 + +虽然我们发布的软件是免费的,但我们还为其销售高级托管托管,这为非营利组织提供了可持续的商业模式,并使其能够 100% 自筹资金。 + ++ 分布式团队 + +拥有可持续的业务使我们能够聘请开源贡献者全职从事 Ghost 工作,而且我们完全远程完成这项工作。 Ghost 核心团队完全分布在他们选择的任何地方。 + ++ 默认透明 + +我们透明地分享我们的收入并公开我们的代码,以便任何人都可以验证我们所做的事情以及我们如何做。没有斗篷或匕首。 + ++ 无条件开源 + +我们所有的项目都是在宽松的开源MIT 许可证下发布的,因此即使公司失败,我们的代码仍然可以被世界上任何人不受限制地使用和继承。 + +🚀 内置会员资格和订阅 + +Ghost 不仅可以为匿名访问者创建内容,还可以让您将受众转变为企业,并为会员注册和付费订阅商务提供原生支持。它是唯一一个默认内置会员资格并深度集成的平台。 + +🚀 开发者友好的API + +Ghost 的核心是一个自消耗的 RESTful JSON API,具有解耦的管理客户端和前端。我们提供了很多工具来让网站尽快运行,但最终它只是 +JSON ™️,所以如果您想完全无头使用 Ghost 并编写自己的前端或后端……您可以! + +🚀 丰富编辑器 + +Ghost 拥有每个作家都想要的丰富编辑器,但在幕后它提供的功能远远超出您的预期。 +所有内容都以基于 JSON 的标准化文档存储格式(称为 Lexical)存储,其中包括对称为 Cards 的可扩展富媒体对象的支持。 + +简单来说,您可以将其视为在 Medium 编辑器中集成 Slack,存储合理且可通过 API 完全访问。 + +🚀 自定义网站结构 + +Ghost 中的路由完全可以根据您的需要进行配置。开箱即用的 Ghost 附带了标准的反向时间顺序帖子源,带有干净的永久链接和基本页面,但这很容易更改。 + +无论您需要一个带有/en/和/de/基本 URL 的完整多语言站点,还是想要为/europe/uk/london/等分层数据构建特定的目录结构 — Ghost +的路由层可以任意数量进行操作实现您的用例的方法。 + +🚀 角色和权限 + +从一开始就使用内置的合理用户角色和权限来设置您的站点。 + ++ 贡献者:可以登录并撰写帖子,但不能发布。 ++ 作者:可以创建和发布新的帖子和标签。 ++ 编辑:可以邀请、管理和编辑作者和贡献者。 ++ 管理员:拥有编辑所有数据和设置的完全权限。 ++ 所有者:无法删除的管理员+有权访问账单详细信息。 + +🚀 自定义主题 + +Ghost 附带了一个简单的 Handlebars.js +前端主题层,该层使用起来非常简单,而且功能强大得令人惊讶。许多人坚持使用默认主题(现场演示/源代码),它提供了干净的杂志设计 - +但这可以修改或完全替换。 + +🚀 应用程序和集成 + +因为 Ghost 是完全开源的,构建为 JSON API,具有 Webhooks,并且让您可以完全控制前端:它本质上与所有东西集成。有些事情比其他事情更容易,但几乎任何事情都可以通过一点努力来实现。 +或者是一个比 1803 年更近的比喻。 + +🚀 搜索引擎优化 + +Ghost 配备了世界一流的 SEO 以及确保您的内容快速一致地显示在搜索索引中所需的一切。 + ++ 无需插件 + +Ghost 将所有基本技术 SEO 优化直接内置于核心中,无需依赖第三方插件。得益于 Node.js,它还具有远远优越的速度和页面加载性能。 + ++ 自动谷歌 XML 站点地图 + +Ghost 将自动生成并链接到完整的 Google 站点地图,包括您网站上的每个页面,以确保搜索引擎能够为每个 URL 建立索引。 + ++ 自动结构化数据+JSON-LD + +Ghost 生成有关页面的基于JSON-LD 的结构化元数据,这样您就不必依赖标记中混乱的微格式来提供语义上下文。即使您更改主题或前端,您的 +SEO 仍然完好无损。 +Ghost 还为 Facebook OpenGraph 和 Twitter Card 添加了自动代码。 + ++ 规范标签 + +Ghost 会自动为每个帖子和页面生成正确的rel="canonical"标签,以便搜索引擎始终优先考虑一个真正的链接。 + +## 安装说明 + +> 后台管理地址:`http://127.0.0.1:2368/ghost` +> +> 首次进入后台管理,会提示创建管理员账号,然后登录即可。 + +## 使用说明 + +### 语言设置 + +没有更好的解决办法,即使设置 `zh` 也不会生效。 + +### 邮件配置 + +Ghost 默认使用 Mailgun 作为邮件服务,但是由于其已经移除 `免费套餐`, 我们将配置 `smtp` 作为邮件服务商。 + +如果存在发信失败,请查看日志,可能是邮件服务商的问题。 + +如果发信人与配置不一致,识别到 `域名` 作为发信人,即使配置了发信人, 也会被忽略。 + +可以通过 `设置` >> `门户设置` >> `账户设置` 修改 `Support email address` 为配置的发信人。 + +## 反向代理 + +> Nginx + +```nginx +location / { + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $http_host; + proxy_pass http://127.0.0.1:2368; +} + +client_max_body_size 50m; +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/ghost/data.yml b/appstore/ghost/data.yml new file mode 100644 index 000000000..0b91d3add --- /dev/null +++ b/appstore/ghost/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: ghost + name: Ghost + tags: + - WebSite + - Local + shortDescZh: 用于现代出版、会员制、订阅和通讯的人博客系统 + shortDescEn: Human blogging systems for modern publishing, memberships, subscriptions and newsletters + type: website + crossVersionUpdate: true + limit: 0 + website: https://ghost.org/ + github: https://github.com/TryGhost/Ghost/ + document: https://ghost.org/docs/ diff --git a/appstore/ghost/logo.png b/appstore/ghost/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..efe7f2243a30e0f67ba3aabed275ba3adbd5cd67 GIT binary patch literal 339175 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 YitqE+~M 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

cAZLj0{Xt$>jh~gVfCE; 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 z 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

^rlMp$0cjb+&xA7kI6UxNkxft&jSe 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 V=h0!+i5t)WRYi?gRq~eM{|7PU0ZRY? literal 0 HcmV?d00001 diff --git a/appstore/gitea-runner/0.2.11/.env b/appstore/gitea-runner/0.2.11/.env new file mode 100644 index 000000000..e435b785c --- /dev/null +++ b/appstore/gitea-runner/0.2.11/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +GITEA_RUNNER_ROOT_PATH=/home/gitea + +# Gitea 实例 URL [必填] +GITEA_INSTANCE_URL= + +# 注册令牌 [必填] +GITEA_RUNNER_REGISTRATION_TOKEN= + +# Runner 名称 [必填] +GITEA_RUNNER_NAME= + +# Runner 标签 [必填] +GITEA_RUNNER_LABELS= + diff --git a/appstore/gitea-runner/0.2.11/data.yml b/appstore/gitea-runner/0.2.11/data.yml new file mode 100644 index 000000000..5beea6482 --- /dev/null +++ b/appstore/gitea-runner/0.2.11/data.yml @@ -0,0 +1,37 @@ +additionalProperties: + formFields: + - default: "/home/gitea" + edit: true + envKey: GITEA_RUNNER_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "" + edit: true + envKey: GITEA_INSTANCE_URL + labelZh: Gitea 实例 URL + labelEn: Gitea instance URL + required: true + type: text + - default: "" + edit: true + envKey: GITEA_RUNNER_REGISTRATION_TOKEN + labelZh: 注册令牌 + labelEn: Registration token + required: true + type: text + - default: "" + edit: true + envKey: GITEA_RUNNER_NAME + labelZh: Runner 名称 + labelEn: Runner name + required: true + type: text + - default: "" + edit: true + envKey: GITEA_RUNNER_LABELS + labelZh: Runner 标签 + labelEn: Runner labels + required: true + type: text diff --git a/appstore/gitea-runner/0.2.11/docker-compose.yml b/appstore/gitea-runner/0.2.11/docker-compose.yml new file mode 100644 index 000000000..cc71e196f --- /dev/null +++ b/appstore/gitea-runner/0.2.11/docker-compose.yml @@ -0,0 +1,21 @@ +networks: + 1panel-network: + external: true +services: + gitea: + container_name: gitea-runner + env_file: + - ./envs/global.env + - .env + image: gitea/act_runner:0.2.11 + labels: + createdBy: Apps + networks: + - 1panel-network + privileged: true + restart: always + volumes: + - ${GITEA_RUNNER_ROOT_PATH}/data:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + - /var/run/docker.sock:/var/run/docker.sock diff --git a/appstore/gitea-runner/0.2.11/envs/default.env b/appstore/gitea-runner/0.2.11/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/gitea-runner/0.2.11/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/gitea-runner/0.2.11/envs/global.env b/appstore/gitea-runner/0.2.11/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/gitea-runner/0.2.11/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/gitea-runner/0.2.11/scripts/init.sh b/appstore/gitea-runner/0.2.11/scripts/init.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/gitea-runner/0.2.11/scripts/init.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/gitea-runner/0.2.11/scripts/uninstall.sh b/appstore/gitea-runner/0.2.11/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/gitea-runner/0.2.11/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/gitea-runner/0.2.11/scripts/upgrade.sh b/appstore/gitea-runner/0.2.11/scripts/upgrade.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/gitea-runner/0.2.11/scripts/upgrade.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/gitea-runner/README.md b/appstore/gitea-runner/README.md new file mode 100644 index 000000000..2895fc687 --- /dev/null +++ b/appstore/gitea-runner/README.md @@ -0,0 +1,87 @@ +# Gitea + +Gitea 是一个轻量级的 DevOps 平台软件。 + +![Gitea](https://file.lifebus.top/imgs/gitea_cover_show.png) + +Gitea 是一个轻量级的 DevOps 平台软件。从开发计划到产品成型的整个软件生命周期,他都能够高效而轻松的帮助团队和开发者。包括 +Git 托管、代码审查、团队协作、软件包注册和 CI/CD。它与 GitHub、Bitbucket 和 GitLab 等比较类似。 Gitea 最初是从 Gogs +分支而来,几乎所有代码都已更改。 + +![](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) + +## 安装说明 + +
+
+ ⚠️ +
+ 警告
+ 该应用申请使用 `特权模式`, 将允许应用在容器内部执行特权操作,如挂载宿主机目录、访问宿主机设备等。 +
+
+
+ +这是Gitea Actions的Runner,用于在Gitea Actions中执行任务。 + +## 特性 + ++ 代码托管 + +Gitea⽀持创建和管理仓库、浏览提交历史和代码⽂件、审查和合并代码提交、管理协作者、管理分⽀等。它还⽀持许多常见的Git特性,⽐如标签、Cherry-pick、hook、集成协作⼯具等。 + ++ 轻量级和快速 + +Gitea 的设计目标之一就是轻量级和快速响应。它不像一些大型的代码托管平台那样臃肿,因此在性能方面表现出色,适用于资源有限的服务器环境。由于其轻量级设计,Gitea +在资源消耗方面相对较低,可以在资源有限的环境下运行良好。 + ++ 易于部署和维护 + +轻松地部署在各种服务器上,不需要复杂的配置和依赖。这使得个人开发者或小团队可以方便地设置和管理自己的 Git 服务。 + ++ 安全性 + +Gitea 注重安全性,提供了用户权限管理、访问控制列表等功能,可以确保代码和数据的安全性。 + ++ 代码评审 + +代码评审同时支持 Pull Request workflow 和 AGit workflow。评审⼈可以在线浏览代码,并提交评审意见或问题。 提交者可以接收到评审意见,并在线回 +复或修改代码。代码评审可以帮助用户和企业提⾼代码质量。 + ++ CI/CD + +Gitea Actions⽀持 CI/CD 功能,该功能兼容 GitHub Actions,⽤⼾可以采用熟悉的YAML格式编写workflows,也可以重⽤⼤量的已有的 Actions +插件。Actions 插件支持从任意的 Git 网站中下载。 + +项目管理:Gitea 通过看板和⼯单来跟踪⼀个项⽬的需求,功能和bug。⼯单⽀持分支,标签、⾥程碑、 指派、时间跟踪、到期时间、依赖关系等功能。 + ++ 制品库 + +Gitea支持超过 20 种不同种类的公有或私有软件包管理,包括:Cargo, Chef, Composer, Conan, Conda, Container, Helm, Maven, npm, +NuGet, Pub, PyPI, RubyGems, Vagrant等 + ++ 开源社区支持 + +Gitea 是一个基于 MIT 许可证的开源项目,Gitea 拥有一个活跃的开源社区,能够持续地进行开发和改进,同时也积极接受社区贡献,保持了平台的更新和创新。 + ++ 多语言支持 + +Gitea 提供多种语言界面,适应全球范围内的用户,促进了国际化和本地化。 + +## 反向代理 + +> Nginx + +```nginx +location / { + proxy_pass http://localhost:3000; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; +} +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/gitea-runner/data.yml b/appstore/gitea-runner/data.yml new file mode 100644 index 000000000..520f88070 --- /dev/null +++ b/appstore/gitea-runner/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: gitea-runner + name: Gitea Runner + tags: + - WebSite + - DevOps + - Storage + - Local + shortDescZh: 新一代的代码托管平台 + shortDescEn: The next generation of code hosting platform + type: website + crossVersionUpdate: true + limit: 0 + website: https://gitea.io/ + github: https://github.com/go-gitea/gitea/ + document: https://docs.gitea.io/ diff --git a/appstore/gitea-runner/logo.png b/appstore/gitea-runner/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..82732ec61f1b57dc98bb0b2deaf31767c015784c GIT binary patch literal 8022 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 AasU7T literal 0 HcmV?d00001 diff --git a/appstore/gitea/1.22.4/.env b/appstore/gitea/1.22.4/.env new file mode 100644 index 000000000..6d36d0ee1 --- /dev/null +++ b/appstore/gitea/1.22.4/.env @@ -0,0 +1,90 @@ +# 数据库 服务 (前置检查) [必填] +PANEL_DB_TYPE=postgresql + +# 数据持久化路径 [必填] +GITEA_ROOT_PATH=/home/gitea + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3000 + +# SSH 端口 [必填] +PANEL_APP_PORT_SSH=22 + +# 数据库 类型 [必填] +DB_TYPE=postgresql + +# 数据库 主机地址 +DB_HOSTNAME=127.0.0.1 + +# 数据库 端口 +DB_PORT=5432 + +# 数据库 用户名 +DB_USER=gitea + +# 数据库 密码 +DB_PASSWD= + +# 数据库 名称 +DB_NAME=gitea + +# 应用名称 [必填] +APP_NAME=Gitea + +# HTTP 克隆域名 [必填] +DOMAIN=localhost + +# SSH 克隆域名 [必填] +SSH_DOMAIN=localhost + +# SSH 克隆显示端口 [必填] +SSH_PORT=22 + +# 公共 URL (覆盖级) +ROOT_URL= + +# 启用 Git LFS 支持 [必填] +LFS_START_SERVER=false + +# 禁用注册 [必填] +DISABLE_REGISTRATION=false + +# 强制登录 [必填] +REQUIRE_SIGNIN_VIEW=false + +# 禁止访问安装页面 [必填] +INSTALL_LOCK=false + +# 全局加密密钥 +SECRET_KEY= + +# 启用代理 (全局 + Webhook) [必填] +PROXY_ENABLED=false + +# 代理服务器地址 (全局 + Webhook) +PROXY_URL= + +# 代理网址 (全局 + Webhook) +PROXY_HOSTS=** + +# 启用邮件服务 [必填] +MAILER_ENABLED=false + +# 邮件服务器地址 +MAILER_SMTP_ADDR= + +# 邮件服务器端口 +MAILER_SMTP_PORT=465 + +# 邮件服务用户名 +MAILER_USER= + +# 邮件服务密码 +MAILER_PASSWD= + +# 邮件服务发件人 +MAILER_FROM= + +# 邮件服务主题前缀 +MAILER_SUBJECT_PREFIX=[Gitea] + diff --git a/appstore/gitea/1.22.4/config/app.example.ini b/appstore/gitea/1.22.4/config/app.example.ini new file mode 100644 index 000000000..c29d2e5be --- /dev/null +++ b/appstore/gitea/1.22.4/config/app.example.ini @@ -0,0 +1,2706 @@ +; This file lists the default values used by Gitea +;; Copy required sections to your own app.ini (default is custom/conf/app.ini) +;; and modify as needed. +;; Do not copy the whole file as-is, as it contains some invalid sections for illustrative purposes. +;; If you don't know what a setting is you should not set it. +;; +;; see https://docs.gitea.com/administration/config-cheat-sheet for additional documentation. + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Default Configuration (non-`app.ini` configuration) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; These values are environment-dependent but form the basis of a lot of values. They will be +;; reported as part of the default configuration when running `gitea help` or on start-up. The order they are emitted there is slightly different but we will list them here in the order they are set-up. +;; +;; - _`AppPath`_: This is the absolute path of the running gitea binary. +;; - _`AppWorkPath`_: This refers to "working path" of the `gitea` binary. It is determined by using the first set thing in the following hierarchy: +;; - The "WORK_PATH" option in "app.ini" file +;; - The `--work-path` flag passed to the binary +;; - The environment variable `$GITEA_WORK_DIR` +;; - A built-in value set at build time (see building from source) +;; - Otherwise it defaults to the directory of the _`AppPath`_ +;; - If any of the above are relative paths then they are made absolute against the directory of the _`AppPath`_ +;; - _`CustomPath`_: This is the base directory for custom templates and other options. It is determined by using the first set thing in the following hierarchy: +;; - The `--custom-path` flag passed to the binary +;; - The environment variable `$GITEA_CUSTOM` +;; - A built-in value set at build time (see building from source) +;; - Otherwise it defaults to _`AppWorkPath`_`/custom` +;; - If any of the above are relative paths then they are made absolute against the directory of the _`AppWorkPath`_ +;; - _`CustomConf`_: This is the path to the `app.ini` file. +;; - The `--config` flag passed to the binary +;; - A built-in value set at build time (see building from source) +;; - Otherwise it defaults to _`CustomPath`_`/conf/app.ini` +;; - If any of the above are relative paths then they are made absolute against the directory of the _`CustomPath`_ +;; +;; In addition there is _`StaticRootPath`_ which can be set as a built-in at build time, but will otherwise default to _`AppWorkPath`_ + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; General Settings +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; App name that shows in every page title +APP_NAME = ; Gitea: Git with a cup of tea +;; +;; RUN_USER will automatically detect the current user - but you can set it here change it if you run locally +RUN_USER = ; git +;; +;; Application run mode, affects performance and debugging: "dev" or "prod", default is "prod" +;; Mode "dev" makes Gitea easier to develop and debug, values other than "dev" are treated as "prod" which is for production use. +;RUN_MODE = prod +;; +;; The working directory, see the comment of AppWorkPath above +;WORK_PATH = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[server] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; The protocol the server listens on. One of 'http', 'https', 'http+unix', 'fcgi' or 'fcgi+unix'. Defaults to 'http' +;; Note: Value must be lowercase. +;PROTOCOL = http +;; +;; Expect PROXY protocol headers on connections +;USE_PROXY_PROTOCOL = false +;; +;; Use PROXY protocol in TLS Bridging mode +;PROXY_PROTOCOL_TLS_BRIDGING = false +;; +; Timeout to wait for PROXY protocol header (set to 0 to have no timeout) +;PROXY_PROTOCOL_HEADER_TIMEOUT=5s +;; +; Accept PROXY protocol headers with UNKNOWN type +;PROXY_PROTOCOL_ACCEPT_UNKNOWN=false +;; +;; Set the domain for the server +;DOMAIN = localhost +;; +;; Overwrite the automatically generated public URL. Necessary for proxies and docker. +;ROOT_URL = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s/ +;; +;; For development purpose only. It makes Gitea handle sub-path ("/sub-path/owner/repo/...") directly when debugging without a reverse proxy. +;; DO NOT USE IT IN PRODUCTION!!! +;USE_SUB_URL_PATH = false +;; +;; when STATIC_URL_PREFIX is empty it will follow ROOT_URL +;STATIC_URL_PREFIX = +;; +;; The address to listen on. Either a IPv4/IPv6 address or the path to a unix socket. +;; If PROTOCOL is set to `http+unix` or `fcgi+unix`, this should be the name of the Unix socket file to use. +;; Relative paths will be made absolute against the _`AppWorkPath`_. +;HTTP_ADDR = 0.0.0.0 +;; +;; The port to listen on. Leave empty when using a unix socket. +;HTTP_PORT = 3000 +;; +;; If REDIRECT_OTHER_PORT is true, and PROTOCOL is set to https an http server +;; will be started on PORT_TO_REDIRECT and it will redirect plain, non-secure http requests to the main +;; ROOT_URL. Defaults are false for REDIRECT_OTHER_PORT and 80 for +;; PORT_TO_REDIRECT. +;REDIRECT_OTHER_PORT = false +;PORT_TO_REDIRECT = 80 +;; +;; expect PROXY protocol header on connections to https redirector. +;REDIRECTOR_USE_PROXY_PROTOCOL = %(USE_PROXY_PROTOCOL)s +;; Minimum and maximum supported TLS versions +;SSL_MIN_VERSION=TLSv1.2 +;SSL_MAX_VERSION= +;; +;; SSL Curve Preferences +;SSL_CURVE_PREFERENCES=X25519,P256 +;; +;; SSL Cipher Suites +;SSL_CIPHER_SUITES=; Will default to "ecdhe_ecdsa_with_aes_256_gcm_sha384,ecdhe_rsa_with_aes_256_gcm_sha384,ecdhe_ecdsa_with_aes_128_gcm_sha256,ecdhe_rsa_with_aes_128_gcm_sha256,ecdhe_ecdsa_with_chacha20_poly1305,ecdhe_rsa_with_chacha20_poly1305" if aes is supported by hardware, otherwise chacha will be first. +;; +;; Timeout for any write to the connection. (Set to -1 to disable all timeouts.) +;PER_WRITE_TIMEOUT = 30s +;; +;; Timeout per Kb written to connections. +;PER_WRITE_PER_KB_TIMEOUT = 30s +;; +;; Permission for unix socket +;UNIX_SOCKET_PERMISSION = 666 +;; +;; Local (DMZ) URL for Gitea workers (such as SSH update) accessing web service. In +;; most cases you do not need to change the default value. Alter it only if +;; your SSH server node is not the same as HTTP node. For different protocol, the default +;; values are different. If `PROTOCOL` is `http+unix`, the default value is `http://unix/`. +;; If `PROTOCOL` is `fcgi` or `fcgi+unix`, the default value is `%(PROTOCOL)s://%(HTTP_ADDR)s:%(HTTP_PORT)s/`. +;; If listen on `0.0.0.0`, the default value is `%(PROTOCOL)s://localhost:%(HTTP_PORT)s/`, Otherwise the default +;; value is `%(PROTOCOL)s://%(HTTP_ADDR)s:%(HTTP_PORT)s/`. +;LOCAL_ROOT_URL = %(PROTOCOL)s://%(HTTP_ADDR)s:%(HTTP_PORT)s/ +;; +;; When making local connections pass the PROXY protocol header. +;LOCAL_USE_PROXY_PROTOCOL = %(USE_PROXY_PROTOCOL)s +;; +;; Disable SSH feature when not available +;DISABLE_SSH = false +;; +;; Whether to use the builtin SSH server or not. +;START_SSH_SERVER = false +;; +;; Expect PROXY protocol header on connections to the built-in SSH server +;SSH_SERVER_USE_PROXY_PROTOCOL = false +;; +;; Username to use for the builtin SSH server. If blank, then it is the value of RUN_USER. +;BUILTIN_SSH_SERVER_USER = %(RUN_USER)s +;; +;; Domain name to be exposed in clone URL +;SSH_DOMAIN = %(DOMAIN)s +;; +;; SSH username displayed in clone URLs. +;SSH_USER = %(BUILTIN_SSH_SERVER_USER)s +;; +;; The network interface the builtin SSH server should listen on +;SSH_LISTEN_HOST = +;; +;; Port number to be exposed in clone URL +;SSH_PORT = 22 +;; +;; The port number the builtin SSH server should listen on +;SSH_LISTEN_PORT = %(SSH_PORT)s +;; +;; Root path of SSH directory, default is '~/.ssh', but you have to use '/home/git/.ssh'. +;SSH_ROOT_PATH = +;; +;; Gitea will create a authorized_keys file by default when it is not using the internal ssh server +;; If you intend to use the AuthorizedKeysCommand functionality then you should turn this off. +;SSH_CREATE_AUTHORIZED_KEYS_FILE = true +;; +;; Gitea will create a authorized_principals file by default when it is not using the internal ssh server +;; If you intend to use the AuthorizedPrincipalsCommand functionality then you should turn this off. +;SSH_CREATE_AUTHORIZED_PRINCIPALS_FILE = true +;; +;; For the built-in SSH server, choose the ciphers to support for SSH connections, +;; for system SSH this setting has no effect +;SSH_SERVER_CIPHERS = chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com +;; +;; For the built-in SSH server, choose the key exchange algorithms to support for SSH connections, +;; for system SSH this setting has no effect +;SSH_SERVER_KEY_EXCHANGES = curve25519-sha256, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1 +;; +;; For the built-in SSH server, choose the MACs to support for SSH connections, +;; for system SSH this setting has no effect +;SSH_SERVER_MACS = hmac-sha2-256-etm@openssh.com, hmac-sha2-256, hmac-sha1 +;; +;; For the built-in SSH server, choose the keypair to offer as the host key +;; The private key should be at SSH_SERVER_HOST_KEY and the public SSH_SERVER_HOST_KEY.pub +;; relative paths are made absolute relative to the %(APP_DATA_PATH)s +;SSH_SERVER_HOST_KEYS=ssh/gitea.rsa, ssh/gogs.rsa +;; +;; Directory to create temporary files in when testing public keys using ssh-keygen, +;; default is the system temporary directory. +;SSH_KEY_TEST_PATH = +;; +;; Use `ssh-keygen` to parse public SSH keys. The value is passed to the shell. By default, Gitea does the parsing itself. +;SSH_KEYGEN_PATH = +;; +;; Enable SSH Authorized Key Backup when rewriting all keys, default is false +;SSH_AUTHORIZED_KEYS_BACKUP = false +;; +;; Determines which principals to allow +;; - empty: if SSH_TRUSTED_USER_CA_KEYS is empty this will default to off, otherwise will default to email, username. +;; - off: Do not allow authorized principals +;; - email: the principal must match the user's email +;; - username: the principal must match the user's username +;; - anything: there will be no checking on the content of the principal +;SSH_AUTHORIZED_PRINCIPALS_ALLOW = email, username +;; +;; Enable SSH Authorized Principals Backup when rewriting all keys, default is true +;SSH_AUTHORIZED_PRINCIPALS_BACKUP = true +;; +;; Specifies the public keys of certificate authorities that are trusted to sign user certificates for authentication. +;; Multiple keys should be comma separated. +;; E.g."ssh- ". or "ssh- , ssh- ". +;; For more information see "TrustedUserCAKeys" in the sshd config manpages. +;SSH_TRUSTED_USER_CA_KEYS = +;; Absolute path of the `TrustedUserCaKeys` file gitea will manage. +;; Default this `RUN_USER`/.ssh/gitea-trusted-user-ca-keys.pem +;; If you're running your own ssh server and you want to use the gitea managed file you'll also need to modify your +;; sshd_config to point to this file. The official docker image will automatically work without further configuration. +;SSH_TRUSTED_USER_CA_KEYS_FILENAME = +;; +;; Enable exposure of SSH clone URL to anonymous visitors, default is false +;SSH_EXPOSE_ANONYMOUS = false +;; +;; Timeout for any write to ssh connections. (Set to -1 to disable all timeouts.) +;; Will default to the PER_WRITE_TIMEOUT. +;SSH_PER_WRITE_TIMEOUT = 30s +;; +;; Timeout per Kb written to ssh connections. +;; Will default to the PER_WRITE_PER_KB_TIMEOUT. +;SSH_PER_WRITE_PER_KB_TIMEOUT = 30s +;; +;; Indicate whether to check minimum key size with corresponding type +;MINIMUM_KEY_SIZE_CHECK = false +;; +;; Disable CDN even in "prod" mode +;OFFLINE_MODE = true +;; +;; TLS Settings: Either ACME or manual +;; (Other common TLS configuration are found before) +;ENABLE_ACME = false +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; ACME automatic TLS settings +;; +;; ACME directory URL (e.g. LetsEncrypt's staging/testing URL: https://acme-staging-v02.api.letsencrypt.org/directory) +;; Leave empty to default to LetsEncrypt's (production) URL +;ACME_URL = +;; +;; Explicitly accept the ACME's TOS. The specific TOS cannot be retrieved at the moment. +;ACME_ACCEPTTOS = false +;; +;; If the ACME CA is not in your system's CA trust chain, it can be manually added here +;ACME_CA_ROOT = +;; +;; Email used for the ACME registration service +;; Can be left blank to initialize at first run and use the cached value +;ACME_EMAIL = +;; +;; ACME live directory (not to be confused with ACME directory URL: ACME_URL) +;; (Refer to caddy's ACME manager https://github.com/caddyserver/certmagic) +;ACME_DIRECTORY = https +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Manual TLS settings: (Only applicable if ENABLE_ACME=false) +;; +;; Generate steps: +;; $ ./gitea cert -ca=true -duration=8760h0m0s -host=myhost.example.com +;; +;; Or from a .pfx file exported from the Windows certificate store (do +;; not forget to export the private key): +;; $ openssl pkcs12 -in cert.pfx -out cert.pem -nokeys +;; $ openssl pkcs12 -in cert.pfx -out key.pem -nocerts -nodes +;; Paths are relative to CUSTOM_PATH +;CERT_FILE = https/cert.pem +;KEY_FILE = https/key.pem +;; +;; Root directory containing templates and static files. +;; default is the path where Gitea is executed +;STATIC_ROOT_PATH = ; Will default to the built-in value _`StaticRootPath`_ +;; +;; Default path for App data +;APP_DATA_PATH = data ; relative paths will be made absolute with _`AppWorkPath`_ +;; +;; Enable gzip compression for runtime-generated content, static resources excluded +;ENABLE_GZIP = false +;; +;; Application profiling (memory and cpu) +;; For "web" command it listens on localhost:6060 +;; For "serve" command it dumps to disk at PPROF_DATA_PATH as (cpuprofile|memprofile)__ +;ENABLE_PPROF = false +;; +;; PPROF_DATA_PATH, use an absolute path when you start gitea as service +;PPROF_DATA_PATH = data/tmp/pprof ; Path is relative to _`AppWorkPath`_ +;; +;; Landing page, can be "home", "explore", "organizations", "login", or any URL such as "/org/repo" or even "https://anotherwebsite.com" +;; The "login" choice is not a security measure but just a UI flow change, use REQUIRE_SIGNIN_VIEW to force users to log in. +;LANDING_PAGE = home +;; +;; Enables git-lfs support. true or false, default is false. +;LFS_START_SERVER = false +;; +;; +;; LFS authentication secret, change this yourself +;LFS_JWT_SECRET = +;; +;; Alternative location to specify LFS authentication secret. You cannot specify both this and LFS_JWT_SECRET, and must pick one +;LFS_JWT_SECRET_URI = file:/etc/gitea/lfs_jwt_secret +;; +;; LFS authentication validity period (in time.Duration), pushes taking longer than this may fail. +;LFS_HTTP_AUTH_EXPIRY = 24h +;; +;; Maximum allowed LFS file size in bytes (Set to 0 for no limit). +;LFS_MAX_FILE_SIZE = 0 +;; +;; Maximum number of locks returned per page +;LFS_LOCKS_PAGING_NUM = 50 +;; +;; Allow graceful restarts using SIGHUP to fork +;ALLOW_GRACEFUL_RESTARTS = true +;; +;; After a restart the parent will finish ongoing requests before +;; shutting down. Force shutdown if this process takes longer than this delay. +;; set to a negative value to disable +;GRACEFUL_HAMMER_TIME = 60s +;; +;; Allows the setting of a startup timeout and waithint for Windows as SVC service +;; 0 disables this. +;STARTUP_TIMEOUT = 0 +;; +;; Static resources, includes resources on custom/, public/ and all uploaded avatars web browser cache time. Note that this cache is disabled when RUN_MODE is "dev". Default is 6h +;STATIC_CACHE_TIME = 6h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[database] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Database to use. Either "mysql", "postgres", "mssql" or "sqlite3". +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; MySQL Configuration +;; +DB_TYPE = mysql +HOST = 127.0.0.1:3306 ; can use socket e.g. /var/run/mysqld/mysqld.sock +NAME = gitea +USER = root +;PASSWD = ;Use PASSWD = `your password` for quoting if you use special characters in the password. +;SSL_MODE = false ; either "false" (default), "true", or "skip-verify" +;CHARSET_COLLATION = ; Empty as default, Gitea will try to find a case-sensitive collation. Don't change it unless you clearly know what you need. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Postgres Configuration +;; +;DB_TYPE = postgres +;HOST = 127.0.0.1:5432 ; can use socket e.g. /var/run/postgresql/ +;NAME = gitea +;USER = root +;PASSWD = +;SCHEMA = +;SSL_MODE=disable ;either "disable" (default), "require", or "verify-full" +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; SQLite Configuration +;; +;DB_TYPE = sqlite3 +;PATH= ; defaults to data/gitea.db +;SQLITE_TIMEOUT = ; Query timeout defaults to: 500 +;SQLITE_JOURNAL_MODE = ; defaults to sqlite database default (often DELETE), can be used to enable WAL mode. https://www.sqlite.org/pragma.html#pragma_journal_mode +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; MSSQL Configuration +;; +;DB_TYPE = mssql +;HOST = 172.17.0.2:1433 +;NAME = gitea +;USER = SA +;PASSWD = MwantsaSecurePassword1 +;CHARSET_COLLATION = ; Empty as default, Gitea will try to find a case-sensitive collation. Don't change it unless you clearly know what you need. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Other settings +;; +;; For iterate buffer, default is 50 +;ITERATE_BUFFER_SIZE = 50 +;; +;; Show the database generated SQL +;LOG_SQL = false +;; +;; Maximum number of DB Connect retries +;DB_RETRIES = 10 +;; +;; Backoff time per DB retry (time.Duration) +;DB_RETRY_BACKOFF = 3s +;; +;; Max idle database connections on connection pool, default is 2 +;MAX_IDLE_CONNS = 2 +;; +;; Database connection max life time, default is 0 or 3s mysql (See #6804 & #7071 for reasoning) +;CONN_MAX_LIFETIME = 3s +;; +;; Database maximum number of open connections, default is 0 meaning no maximum +;MAX_OPEN_CONNS = 0 +;; +;; Whether execute database models migrations automatically +;AUTO_MIGRATION = true +;; +;; Threshold value (in seconds) beyond which query execution time is logged as a warning in the xorm logger +;; +;SLOW_QUERY_THRESHOLD = 5s + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[security] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Whether the installer is disabled (set to true to disable the installer) +INSTALL_LOCK = false +;; +;; Global secret key that will be used +;; This key is VERY IMPORTANT. If you lose it, the data encrypted by it (like 2FA secret) can't be decrypted anymore. +SECRET_KEY = +;; +;; Alternative location to specify secret key, instead of this file; you cannot specify both this and SECRET_KEY, and must pick one +;; This key is VERY IMPORTANT. If you lose it, the data encrypted by it (like 2FA secret) can't be decrypted anymore. +;SECRET_KEY_URI = file:/etc/gitea/secret_key +;; +;; Secret used to validate communication within Gitea binary. +INTERNAL_TOKEN = +;; +;; Alternative location to specify internal token, instead of this file; you cannot specify both this and INTERNAL_TOKEN, and must pick one +;INTERNAL_TOKEN_URI = file:/etc/gitea/internal_token +;; +;; How long to remember that a user is logged in before requiring relogin (in days) +;LOGIN_REMEMBER_DAYS = 31 +;; +;; Name of the cookie used to store the current username. +;COOKIE_USERNAME = gitea_awesome +;; +;; Name of cookie used to store authentication information. +;COOKIE_REMEMBER_NAME = gitea_incredible +;; +;; Reverse proxy authentication header name of user name, email, and full name +;REVERSE_PROXY_AUTHENTICATION_USER = X-WEBAUTH-USER +;REVERSE_PROXY_AUTHENTICATION_EMAIL = X-WEBAUTH-EMAIL +;REVERSE_PROXY_AUTHENTICATION_FULL_NAME = X-WEBAUTH-FULLNAME +;; +;; Interpret X-Forwarded-For header or the X-Real-IP header and set this as the remote IP for the request +;REVERSE_PROXY_LIMIT = 1 +;; +;; List of IP addresses and networks separated by comma of trusted proxy servers. Use `*` to trust all. +;REVERSE_PROXY_TRUSTED_PROXIES = 127.0.0.0/8,::1/128 +;; +;; The minimum password length for new Users +;MIN_PASSWORD_LENGTH = 8 +;; +;; Set to true to allow users to import local server paths +;IMPORT_LOCAL_PATHS = false +;; +;; Set to false to allow users with git hook privileges to create custom git hooks. +;; Custom git hooks can be used to perform arbitrary code execution on the host operating system. +;; This enables the users to access and modify this config file and the Gitea database and interrupt the Gitea service. +;; By modifying the Gitea database, users can gain Gitea administrator privileges. +;; It also enables them to access other resources available to the user on the operating system that is running the Gitea instance and perform arbitrary actions in the name of the Gitea OS user. +;; WARNING: This maybe harmful to you website or your operating system. +;; WARNING: Setting this to true does not change existing hooks in git repos; adjust it before if necessary. +;DISABLE_GIT_HOOKS = true +;; +;; Set to true to disable webhooks feature. +;DISABLE_WEBHOOKS = false +;; +;; Set to false to allow pushes to gitea repositories despite having an incomplete environment - NOT RECOMMENDED +;ONLY_ALLOW_PUSH_IF_GITEA_ENVIRONMENT_SET = true +;; +;;Comma separated list of character classes required to pass minimum complexity. +;;If left empty or no valid values are specified, the default is off (no checking) +;;Classes include "lower,upper,digit,spec" +;PASSWORD_COMPLEXITY = off +;; +;; Password Hash algorithm, either "argon2", "pbkdf2", "scrypt" or "bcrypt" +;PASSWORD_HASH_ALGO = pbkdf2 +;; +;; Set false to allow JavaScript to read CSRF cookie +;CSRF_COOKIE_HTTP_ONLY = true +;; +;; Validate against https://haveibeenpwned.com/Passwords to see if a password has been exposed +;PASSWORD_CHECK_PWN = false +;; +;; Cache successful token hashes. API tokens are stored in the DB as pbkdf2 hashes however, this means that there is a potentially significant hashing load when there are multiple API operations. +;; This cache will store the successfully hashed tokens in a LRU cache as a balance between performance and security. +;SUCCESSFUL_TOKENS_CACHE_SIZE = 20 +;; +;; Reject API tokens sent in URL query string (Accept Header-based API tokens only). This avoids security vulnerabilities +;; stemming from cached/logged plain-text API tokens. +;; In future releases, this will become the default behavior +;DISABLE_QUERY_AUTH_TOKEN = false + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[camo] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; At the moment we only support images +;; +;; if the camo is enabled +;ENABLED = false +;; url to a camo image proxy, it **is required** if camo is enabled. +;SERVER_URL = +;; HMAC to encode urls with, it **is required** if camo is enabled. +;HMAC_KEY = +;; Set to true to use camo for https too lese only non https urls are proxyed +;ALLWAYS = false + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[oauth2] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Enables OAuth2 provider +ENABLED = true +;; +;; Algorithm used to sign OAuth2 tokens. Valid values: HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, EdDSA +;JWT_SIGNING_ALGORITHM = RS256 +;; +;; Private key file path used to sign OAuth2 tokens. The path is relative to APP_DATA_PATH. +;; This setting is only needed if JWT_SIGNING_ALGORITHM is set to RS256, RS384, RS512, ES256, ES384 or ES512. +;; The file must contain a RSA or ECDSA private key in the PKCS8 format. If no key exists a 4096 bit key will be created for you. +;JWT_SIGNING_PRIVATE_KEY_FILE = jwt/private.pem +;; +;; OAuth2 authentication secret for access and refresh tokens, change this yourself to a unique string. CLI generate option is helpful in this case. https://docs.gitea.io/en-us/command-line/#generate +;; This setting is only needed if JWT_SIGNING_ALGORITHM is set to HS256, HS384 or HS512. +;JWT_SECRET = +;; +;; Alternative location to specify OAuth2 authentication secret. You cannot specify both this and JWT_SECRET, and must pick one +;JWT_SECRET_URI = file:/etc/gitea/oauth2_jwt_secret +;; +;; Lifetime of an OAuth2 access token in seconds +;ACCESS_TOKEN_EXPIRATION_TIME = 3600 +;; +;; Lifetime of an OAuth2 refresh token in hours +;REFRESH_TOKEN_EXPIRATION_TIME = 730 +;; +;; Check if refresh token got already used +;INVALIDATE_REFRESH_TOKENS = false +;; +;; Maximum length of oauth2 token/cookie stored on server +;MAX_TOKEN_LENGTH = 32767 +;; +;; Pre-register OAuth2 applications for some universally useful services +;; * https://github.com/hickford/git-credential-oauth +;; * https://github.com/git-ecosystem/git-credential-manager +;; * https://gitea.com/gitea/tea +;DEFAULT_APPLICATIONS = git-credential-oauth, git-credential-manager, tea + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[log] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Root path for the log files - defaults to %(GITEA_WORK_DIR)/log +;ROOT_PATH = +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Main Logger +;; +;; Either "console", "file" or "conn", default is "console" +;; Use comma to separate multiple modes, e.g. "console, file" +MODE = console +;; +;; Either "Trace", "Debug", "Info", "Warn", "Error" or "None", default is "Info" +LEVEL = Info +;; +;; Print Stacktrace with logs (rarely helpful, do not set) Either "Trace", "Debug", "Info", "Warn", "Error", default is "None" +;STACKTRACE_LEVEL = None +;; +;; Buffer length of the channel, keep it as it is if you don't know what it is. +;BUFFER_LEN = 10000 +;; +;; Sub logger modes, a single comma means use default MODE above, empty means disable it +;logger.access.MODE= +;logger.router.MODE=, +;logger.xorm.MODE=, +;; +;; Collect SSH logs (Creates log from ssh git request) +;; +;ENABLE_SSH_LOG = false +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Access Logger (Creates log in NCSA common log format) +;; +;; Print request id which parsed from request headers in access log, when access log is enabled. +;; * E.g: +;; * In request Header: X-Request-ID: test-id-123 +;; * Configuration in app.ini: REQUEST_ID_HEADERS = X-Request-ID +;; * Print in log: 127.0.0.1:58384 - - [14/Feb/2023:16:33:51 +0800] "test-id-123" +;; +;; If you configure more than one in the .ini file, it will match in the order of configuration, +;; and the first match will be finally printed in the log. +;; * E.g: +;; * In request Header: X-Trace-ID: trace-id-1q2w3e4r +;; * Configuration in app.ini: REQUEST_ID_HEADERS = X-Request-ID, X-Trace-ID, X-Req-ID +;; * Print in log: 127.0.0.1:58384 - - [14/Feb/2023:16:33:51 +0800] "trace-id-1q2w3e4r" +;; +;REQUEST_ID_HEADERS = +;; +;; Sets the template used to create the access log. +;ACCESS_LOG_TEMPLATE = {{.Ctx.RemoteHost}} - {{.Identity}} {{.Start.Format "[02/Jan/2006:15:04:05 -0700]" }} "{{.Ctx.Req.Method}} {{.Ctx.Req.URL.RequestURI}} {{.Ctx.Req.Proto}}" {{.ResponseWriter.Status}} {{.ResponseWriter.Size}} "{{.Ctx.Req.Referer}}" "{{.Ctx.Req.UserAgent}}" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Log modes (aka log writers) +;; +;[log.%(WriterMode)] +;MODE=console/file/conn/... +;LEVEL= +;FLAGS = stdflags +;EXPRESSION = +;PREFIX = +;COLORIZE = false +;; +;[log.console] +;STDERR = false +;; +;[log.file] +;; Set the file_name for the logger. If this is a relative path this will be relative to ROOT_PATH +;FILE_NAME = +;; This enables automated log rotate(switch of following options), default is true +;LOG_ROTATE = true +;; Max size shift of a single file, default is 28 means 1 << 28, 256MB +;MAX_SIZE_SHIFT = 28 +;; Segment log daily, default is true +;DAILY_ROTATE = true +;; delete the log file after n days, default is 7 +;MAX_DAYS = 7 +;; compress logs with gzip +;COMPRESS = true +;; compression level see godoc for compress/gzip +;COMPRESSION_LEVEL = -1 +;; +;[log.conn] +;; Reconnect host for every single message, default is false +;RECONNECT_ON_MSG = false +;; Try to reconnect when connection is lost, default is false +;RECONNECT = false +;; Either "tcp", "unix" or "udp", default is "tcp" +;PROTOCOL = tcp +;; Host address +;ADDR = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[git] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; The path of git executable. If empty, Gitea searches through the PATH environment. +;PATH = +;; +;; The HOME directory for Git +;HOME_PATH = %(APP_DATA_PATH)s/home +;; +;; Disables highlight of added and removed changes +;DISABLE_DIFF_HIGHLIGHT = false +;; +;; Max number of lines allowed in a single file in diff view +;MAX_GIT_DIFF_LINES = 1000 +;; +;; Max number of allowed characters in a line in diff view +;MAX_GIT_DIFF_LINE_CHARACTERS = 5000 +;; +;; Max number of files shown in diff view +;MAX_GIT_DIFF_FILES = 100 +;; +;; Set the default commits range size +;COMMITS_RANGE_SIZE = 50 +;; +;; Set the default branches range size +;BRANCHES_RANGE_SIZE = 20 +;; +;; Arguments for command 'git gc', e.g. "--aggressive --auto" +;; see more on http://git-scm.com/docs/git-gc/ +;GC_ARGS = +;; +;; If use git wire protocol version 2 when git version >= 2.18, default is true, set to false when you always want git wire protocol version 1 +;; To enable this for Git over SSH when using a OpenSSH server, add `AcceptEnv GIT_PROTOCOL` to your sshd_config file. +;ENABLE_AUTO_GIT_WIRE_PROTOCOL = true +;; +;; Respond to pushes to a non-default branch with a URL for creating a Pull Request (if the repository has them enabled) +;PULL_REQUEST_PUSH_MESSAGE = true +;; +;; (Go-Git only) Don't cache objects greater than this in memory. (Set to 0 to disable.) +;LARGE_OBJECT_THRESHOLD = 1048576 +;; Set to true to forcibly set core.protectNTFS=false +;DISABLE_CORE_PROTECT_NTFS=false +;; Disable the usage of using partial clones for git. +;DISABLE_PARTIAL_CLONE = false + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Git Operation timeout in seconds +;[git.timeout] +;DEFAULT = 360 +;MIGRATE = 600 +;MIRROR = 300 +;CLONE = 300 +;PULL = 300 +;GC = 60 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Git config options +;; This section only does "set" config, a removed config key from this section won't be removed from git config automatically. The format is `some.configKey = value`. +;[git.config] +;diff.algorithm = histogram +;core.logAllRefUpdates = true +;gc.reflogExpire = 90 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[service] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Time limit to confirm account/email registration +;ACTIVE_CODE_LIVE_MINUTES = 180 +;; +;; Time limit to perform the reset of a forgotten password +;RESET_PASSWD_CODE_LIVE_MINUTES = 180 +;; +;; Whether a new user needs to confirm their email when registering. +;REGISTER_EMAIL_CONFIRM = false +;; +;; Whether a new user needs to be confirmed manually after registration. (Requires `REGISTER_EMAIL_CONFIRM` to be disabled.) +;REGISTER_MANUAL_CONFIRM = false +;; +;; List of domain names that are allowed to be used to register on a Gitea instance, wildcard is supported +;; eg: gitea.io,example.com,*.mydomain.com +;EMAIL_DOMAIN_ALLOWLIST = +;; +;; Comma-separated list of domain names that are not allowed to be used to register on a Gitea instance, wildcard is supported +;EMAIL_DOMAIN_BLOCKLIST = +;; +;; Disallow registration, only allow admins to create accounts. +;DISABLE_REGISTRATION = false +;; +;; Allow registration only using gitea itself, it works only when DISABLE_REGISTRATION is false +;ALLOW_ONLY_INTERNAL_REGISTRATION = false +;; +;; Allow registration only using third-party services, it works only when DISABLE_REGISTRATION is false +;ALLOW_ONLY_EXTERNAL_REGISTRATION = false +;; +;; User must sign in to view anything. +;REQUIRE_SIGNIN_VIEW = false +;; +;; Mail notification +;ENABLE_NOTIFY_MAIL = false +;; +;; This setting enables gitea to be signed in with HTTP BASIC Authentication using the user's password +;; If you set this to false you will not be able to access the tokens endpoints on the API with your password +;; Please note that setting this to false will not disable OAuth Basic or Basic authentication using a token +;ENABLE_BASIC_AUTHENTICATION = true +;; +;; More detail: https://github.com/gogits/gogs/issues/165 +;ENABLE_REVERSE_PROXY_AUTHENTICATION = false +; Enable this to allow reverse proxy authentication for API requests, the reverse proxy is responsible for ensuring that no CSRF is possible. +;ENABLE_REVERSE_PROXY_AUTHENTICATION_API = false +;ENABLE_REVERSE_PROXY_AUTO_REGISTRATION = false +;ENABLE_REVERSE_PROXY_EMAIL = false +;ENABLE_REVERSE_PROXY_FULL_NAME = false +;; +;; Enable captcha validation for registration +;ENABLE_CAPTCHA = false +;; +;; Enable this to require captcha validation for login +;REQUIRE_CAPTCHA_FOR_LOGIN = false +;; +;; Type of captcha you want to use. Options: image, recaptcha, hcaptcha, mcaptcha, cfturnstile. +;CAPTCHA_TYPE = image +;; +;; Change this to use recaptcha.net or other recaptcha service +;RECAPTCHA_URL = https://www.google.com/recaptcha/ +;; Enable recaptcha to use Google's recaptcha service +;; Go to https://www.google.com/recaptcha/admin to sign up for a key +;RECAPTCHA_SECRET = +;RECAPTCHA_SITEKEY = +;; +;; For hCaptcha, create an account at https://accounts.hcaptcha.com/login to get your keys +;HCAPTCHA_SECRET = +;HCAPTCHA_SITEKEY = +;; +;; Change this to use demo.mcaptcha.org or your self-hosted mcaptcha.org instance. +;MCAPTCHA_URL = https://demo.mcaptcha.org +;; +;; Go to your configured mCaptcha instance and register a sitekey +;; and use your account's secret. +;MCAPTCHA_SECRET = +;MCAPTCHA_SITEKEY = +;; +;; Go to https://dash.cloudflare.com/?to=/:account/turnstile to sign up for a key +;CF_TURNSTILE_SITEKEY = +;CF_TURNSTILE_SECRET = +;; +;; Default value for KeepEmailPrivate +;; Each new user will get the value of this setting copied into their profile +;DEFAULT_KEEP_EMAIL_PRIVATE = false +;; +;; Default value for AllowCreateOrganization +;; Every new user will have rights set to create organizations depending on this setting +;DEFAULT_ALLOW_CREATE_ORGANIZATION = true +;; Default value for IsRestricted +;; Every new user will have restricted permissions depending on this setting +;DEFAULT_USER_IS_RESTRICTED = false +;; +;; Either "public", "limited" or "private", default is "public" +;; Limited is for users visible only to signed users +;; Private is for users visible only to members of their organizations +;; Public is for users visible for everyone +;DEFAULT_USER_VISIBILITY = public +;; +;; Set which visibility modes a user can have +;ALLOWED_USER_VISIBILITY_MODES = public,limited,private +;; +;; Either "public", "limited" or "private", default is "public" +;; Limited is for organizations visible only to signed users +;; Private is for organizations visible only to members of the organization +;; Public is for organizations visible to everyone +;DEFAULT_ORG_VISIBILITY = public +;; +;; Default value for DefaultOrgMemberVisible +;; True will make the membership of the users visible when added to the organisation +;DEFAULT_ORG_MEMBER_VISIBLE = false +;; +;; Default value for EnableDependencies +;; Repositories will use dependencies by default depending on this setting +;DEFAULT_ENABLE_DEPENDENCIES = true +;; +;; Dependencies can be added from any repository where the user is granted access or only from the current repository depending on this setting. +;ALLOW_CROSS_REPOSITORY_DEPENDENCIES = true +;; +;; Default map service. No external API support has been included. A service has to allow +;; searching using URL parameters, the location will be appended to the URL as escaped query parameter. +;; Disabled by default, some example values are: +;; - OpenStreetMap: https://www.openstreetmap.org/search?query= +;; - Google Maps: https://www.google.com/maps/place/ +;; - MapQuest: https://www.mapquest.com/search/ +;; - Bing Maps: https://www.bing.com/maps?where1= +; USER_LOCATION_MAP_URL = +;; +;; Enable heatmap on users profiles. +;ENABLE_USER_HEATMAP = true +;; +;; Enable Timetracking +;ENABLE_TIMETRACKING = true +;; +;; Default value for EnableTimetracking +;; Repositories will use timetracking by default depending on this setting +;DEFAULT_ENABLE_TIMETRACKING = true +;; +;; Default value for AllowOnlyContributorsToTrackTime +;; Only users with write permissions can track time if this is true +;DEFAULT_ALLOW_ONLY_CONTRIBUTORS_TO_TRACK_TIME = true +;; +;; Value for the domain part of the user's email address in the git log if user +;; has set KeepEmailPrivate to true. The user's email will be replaced with a +;; concatenation of the user name in lower case, "@" and NO_REPLY_ADDRESS. Default +;; value is "noreply." + DOMAIN, where DOMAIN resolves to the value from server.DOMAIN +;; Note: do not use the notation below +;NO_REPLY_ADDRESS = ; noreply. +;; +;; Show Registration button +;SHOW_REGISTRATION_BUTTON = true +;; +;; Show milestones dashboard page - a view of all the user's milestones +;SHOW_MILESTONES_DASHBOARD_PAGE = true +;; +;; Default value for AutoWatchNewRepos +;; When adding a repo to a team or creating a new repo all team members will watch the +;; repo automatically if enabled +;AUTO_WATCH_NEW_REPOS = true +;; +;; Default value for AutoWatchOnChanges +;; Make the user watch a repository When they commit for the first time +;AUTO_WATCH_ON_CHANGES = false +;; +;; Minimum amount of time a user must exist before comments are kept when the user is deleted. +;USER_DELETE_WITH_COMMENTS_MAX_TIME = 0 +;; Valid site url schemes for user profiles +;VALID_SITE_URL_SCHEMES=http,https + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Other Settings +;; +;; Uncomment the [section.header] if you wish to +;; set the below settings. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Root path for storing all repository data. By default, it is set to %(APP_DATA_PATH)s/gitea-repositories. +;; A relative path is interpreted as _`AppWorkPath`_/%(ROOT)s +;ROOT = +;; +;; The script type this server supports. Usually this is `bash`, but some users report that only `sh` is available. +;SCRIPT_TYPE = bash +;; +;; DETECTED_CHARSETS_ORDER tie-break order for detected charsets. +;; If the charsets have equal confidence, tie-breaking will be done by order in this list +;; with charsets earlier in the list chosen in preference to those later. +;; Adding "defaults" will place the unused charsets at that position. +;DETECTED_CHARSETS_ORDER = UTF-8, UTF-16BE, UTF-16LE, UTF-32BE, UTF-32LE, ISO-8859, windows-1252, ISO-8859, windows-1250, ISO-8859, ISO-8859, ISO-8859, windows-1253, ISO-8859, windows-1255, ISO-8859, windows-1251, windows-1256, KOI8-R, ISO-8859, windows-1254, Shift_JIS, GB18030, EUC-JP, EUC-KR, Big5, ISO-2022, ISO-2022, ISO-2022, IBM424_rtl, IBM424_ltr, IBM420_rtl, IBM420_ltr +;; +;; Default ANSI charset to override non-UTF-8 charsets to +;ANSI_CHARSET = +;; +;; Force every new repository to be private +;FORCE_PRIVATE = false +;; +;; Default privacy setting when creating a new repository, allowed values: last, private, public. Default is last which means the last setting used. +;DEFAULT_PRIVATE = last +;; +;; Default private when using push-to-create +;DEFAULT_PUSH_CREATE_PRIVATE = true +;; +;; Global limit of repositories per user, applied at creation time. -1 means no limit +;MAX_CREATION_LIMIT = -1 +;; +;; Preferred Licenses to place at the top of the List +;; The name here must match the filename in options/license or custom/options/license +;PREFERRED_LICENSES = Apache License 2.0,MIT License +;; +;; Disable the ability to interact with repositories using the HTTP protocol +;DISABLE_HTTP_GIT = false +;; +;; Value for Access-Control-Allow-Origin header, default is not to present +;; WARNING: This may be harmful to your website if you do not give it a right value. +;ACCESS_CONTROL_ALLOW_ORIGIN = +;; +;; Force ssh:// clone url instead of scp-style uri when default SSH port is used +;USE_COMPAT_SSH_URI = false +;; +;; Value for the "go get" request returns the repository url as https or ssh, default is https +;GO_GET_CLONE_URL_PROTOCOL = https +;; +;; Close issues as long as a commit on any branch marks it as fixed +;DEFAULT_CLOSE_ISSUES_VIA_COMMITS_IN_ANY_BRANCH = false +;; +;; Allow users to push local repositories to Gitea and have them automatically created for a user or an org +;ENABLE_PUSH_CREATE_USER = false +;ENABLE_PUSH_CREATE_ORG = false +;; +;; Comma separated list of globally disabled repo units. Allowed values: repo.issues, repo.ext_issues, repo.pulls, repo.wiki, repo.ext_wiki, repo.projects, repo.packages, repo.actions. +;DISABLED_REPO_UNITS = +;; +;; Comma separated list of default new repo units. Allowed values: repo.code, repo.releases, repo.issues, repo.pulls, repo.wiki, repo.projects, repo.packages, repo.actions. +;; Note: Code and Releases can currently not be deactivated. If you specify default repo units you should still list them for future compatibility. +;; External wiki and issue tracker can't be enabled by default as it requires additional settings. +;; Disabled repo units will not be added to new repositories regardless if it is in the default list. +;DEFAULT_REPO_UNITS = repo.code,repo.releases,repo.issues,repo.pulls,repo.wiki,repo.projects,repo.packages,repo.actions +;; +;; Comma separated list of default forked repo units. +;; The set of allowed values and rules are the same as DEFAULT_REPO_UNITS. +;DEFAULT_FORK_REPO_UNITS = repo.code,repo.pulls +;; +;; Prefix archive files by placing them in a directory named after the repository +;PREFIX_ARCHIVE_FILES = true +;; +;; Disable migrating feature. +;DISABLE_MIGRATIONS = false +;; +;; Disable stars feature. +;DISABLE_STARS = false +;; +;; The default branch name of new repositories +;DEFAULT_BRANCH = main +;; +;; Allow adoption of unadopted repositories +;ALLOW_ADOPTION_OF_UNADOPTED_REPOSITORIES = false +;; +;; Allow deletion of unadopted repositories +;ALLOW_DELETION_OF_UNADOPTED_REPOSITORIES = false + +;; Don't allow download source archive files from UI +;DISABLE_DOWNLOAD_SOURCE_ARCHIVES = false + +;; Allow fork repositories without maximum number limit +;ALLOW_FORK_WITHOUT_MAXIMUM_LIMIT = true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository.editor] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; List of file extensions for which lines should be wrapped in the Monaco editor +;; Separate extensions with a comma. To line wrap files without an extension, just put a comma +;LINE_WRAP_EXTENSIONS = .txt,.md,.markdown,.mdown,.mkd,.livemd, + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository.local] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Path for local repository copy. Defaults to `tmp/local-repo` (content gets deleted on gitea restart) +;LOCAL_COPY_PATH = tmp/local-repo + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository.upload] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Whether repository file uploads are enabled. Defaults to `true` +;ENABLED = true +;; +;; Path for uploads. Defaults to `data/tmp/uploads` (content gets deleted on gitea restart) +;TEMP_PATH = data/tmp/uploads +;; +;; Comma-separated list of allowed file extensions (`.zip`), mime types (`text/plain`) or wildcard type (`image/*`, `audio/*`, `video/*`). Empty value or `*/*` allows all types. +;ALLOWED_TYPES = +;; +;; Max size of each file in megabytes. Defaults to 50MB +;FILE_MAX_SIZE = 50 +;; +;; Max number of files per upload. Defaults to 5 +;MAX_FILES = 5 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository.pull-request] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; List of prefixes used in Pull Request title to mark them as Work In Progress (matched in a case-insensitive manner) +;WORK_IN_PROGRESS_PREFIXES = WIP:,[WIP] +;; +;; List of keywords used in Pull Request comments to automatically close a related issue +;CLOSE_KEYWORDS = close,closes,closed,fix,fixes,fixed,resolve,resolves,resolved +;; +;; List of keywords used in Pull Request comments to automatically reopen a related issue +;REOPEN_KEYWORDS = reopen,reopens,reopened +;; +;; Set default merge style for repository creating, valid options: merge, rebase, rebase-merge, squash, fast-forward-only +;DEFAULT_MERGE_STYLE = merge +;; +;; In the default merge message for squash commits include at most this many commits +;DEFAULT_MERGE_MESSAGE_COMMITS_LIMIT = 50 +;; +;; In the default merge message for squash commits limit the size of the commit messages to this +;DEFAULT_MERGE_MESSAGE_SIZE = 5120 +;; +;; In the default merge message for squash commits walk all commits to include all authors in the Co-authored-by otherwise just use those in the limited list +;DEFAULT_MERGE_MESSAGE_ALL_AUTHORS = false +;; +;; In default merge messages limit the number of approvers listed as Reviewed-by: to this many +;DEFAULT_MERGE_MESSAGE_MAX_APPROVERS = 10 +;; +;; In default merge messages only include approvers who are official +;DEFAULT_MERGE_MESSAGE_OFFICIAL_APPROVERS_ONLY = true +;; +;; Add co-authored-by and co-committed-by trailers if committer does not match author +;ADD_CO_COMMITTER_TRAILERS = true +;; +;; In addition to testing patches using the three-way merge method, re-test conflicting patches with git apply +;TEST_CONFLICTING_PATCHES_WITH_GIT_APPLY = false +;; +;; Retarget child pull requests to the parent pull request branch target on merge of parent pull request. It only works on merged PRs where the head and base branch target the same repo. +;RETARGET_CHILDREN_ON_MERGE = true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository.issue] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; List of reasons why a Pull Request or Issue can be locked +;LOCK_REASONS = Too heated,Off-topic,Resolved,Spam +;; Maximum number of pinned Issues per repo +;; Set to 0 to disable pinning Issues +;MAX_PINNED = 3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository.release] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Comma-separated list of allowed file extensions (`.zip`), mime types (`text/plain`) or wildcard type (`image/*`, `audio/*`, `video/*`). Empty value or `*/*` allows all types. +;ALLOWED_TYPES = +;DEFAULT_PAGING_NUM = 10 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository.signing] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; GPG key to use to sign commits, Defaults to the default - that is the value of git config --get user.signingkey +;; run in the context of the RUN_USER +;; Switch to none to stop signing completely +;SIGNING_KEY = default +;; +;; If a SIGNING_KEY ID is provided and is not set to default, use the provided Name and Email address as the signer. +;; These should match a publicized name and email address for the key. (When SIGNING_KEY is default these are set to +;; the results of git config --get user.name and git config --get user.email respectively and can only be overridden +;; by setting the SIGNING_KEY ID to the correct ID.) +;SIGNING_NAME = +;SIGNING_EMAIL = +;; +;; Sets the default trust model for repositories. Options are: collaborator, committer, collaboratorcommitter +;DEFAULT_TRUST_MODEL = collaborator +;; +;; Determines when gitea should sign the initial commit when creating a repository +;; Either: +;; - never +;; - pubkey: only sign if the user has a pubkey +;; - twofa: only sign if the user has logged in with twofa +;; - always +;; options other than none and always can be combined as comma separated list +;INITIAL_COMMIT = always +;; +;; Determines when to sign for CRUD actions +;; - as above +;; - parentsigned: requires that the parent commit is signed. +;CRUD_ACTIONS = pubkey, twofa, parentsigned +;; Determines when to sign Wiki commits +;; - as above +;WIKI = never +;; +;; Determines when to sign on merges +;; - basesigned: require that the parent of commit on the base repo is signed. +;; - commitssigned: require that all the commits in the head branch are signed. +;; - approved: only sign when merging an approved pr to a protected branch +;MERGES = pubkey, twofa, basesigned, commitssigned + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository.mimetype_mapping] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Custom MIME type mapping for downloadable files +;.apk=application/vnd.android.package-archive + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[project] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Default templates for project boards +;PROJECT_BOARD_BASIC_KANBAN_TYPE = To Do, In Progress, Done +;PROJECT_BOARD_BUG_TRIAGE_TYPE = Needs Triage, High Priority, Low Priority, Closed + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cors] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; More information about CORS can be found here: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#The_HTTP_response_headers +;; enable cors headers (disabled by default) +;ENABLED = false +;; +;; list of requesting origins that are allowed, eg: "https://*.example.com" +;ALLOW_DOMAIN = * +;; +;; list of methods allowed to request +;METHODS = GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS +;; +;; max time to cache response +;MAX_AGE = 10m +;; +;; allow request with credentials +;ALLOW_CREDENTIALS = false +;; +;; headers to permit +;HEADERS = Content-Type,User-Agent +;; +;; set X-FRAME-OPTIONS header +;X_FRAME_OPTIONS = SAMEORIGIN + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ui] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Number of repositories that are displayed on one explore page +;EXPLORE_PAGING_NUM = 20 +;; +;; Number of issues that are displayed on one page +;ISSUE_PAGING_NUM = 20 +;; +;; Number of maximum commits displayed in one activity feed +;FEED_MAX_COMMIT_NUM = 5 +;; +;; Number of items that are displayed in home feed +;FEED_PAGING_NUM = 20 +;; +;; Number of items that are displayed in a single subsitemap +;SITEMAP_PAGING_NUM = 20 +;; +;; Number of maximum commits displayed in commit graph. +;GRAPH_MAX_COMMIT_NUM = 100 +;; +;; Number of line of codes shown for a code comment +;CODE_COMMENT_LINES = 4 +;; +;; Max size of files to be displayed (default is 8MiB) +;MAX_DISPLAY_FILE_SIZE = 8388608 +;; +;; Detect ambiguous unicode characters in file contents and show warnings on the UI +;AMBIGUOUS_UNICODE_DETECTION = true +;; +;; Whether the email of the user should be shown in the Explore Users page +;SHOW_USER_EMAIL = true +;; +;; Set the default theme for the Gitea install +;DEFAULT_THEME = gitea-auto +;; +;; All available themes. Allow users select personalized themes regardless of the value of `DEFAULT_THEME`. +;; Leave it empty to allow users to select any theme from "{CustomPath}/public/assets/css/theme-*.css" +;THEMES = +;; +;; All available reactions users can choose on issues/prs and comments. +;; Values can be emoji alias (:smile:) or a unicode emoji. +;; For custom reactions, add a tightly cropped square image to public/assets/img/emoji/reaction_name.png +;REACTIONS = +1, -1, laugh, hooray, confused, heart, rocket, eyes +;; +;; Change the number of users that are displayed in reactions tooltip (triggered by mouse hover). +;REACTION_MAX_USER_NUM = 10 +;; +;; Additional Emojis not defined in the utf8 standard +;; By default we support gitea (:gitea:), to add more copy them to public/assets/img/emoji/emoji_name.png and add it to this config. +;; Dont mistake it for Reactions. +;CUSTOM_EMOJIS = gitea, codeberg, gitlab, git, github, gogs +;; +;; Whether the full name of the users should be shown where possible. If the full name isn't set, the username will be used. +;DEFAULT_SHOW_FULL_NAME = false +;; +;; Whether to search within description at repository search on explore page. +;SEARCH_REPO_DESCRIPTION = true +;; +;; Whether to only show relevant repos on the explore page when no keyword is specified and default sorting is used. +;; A repo is considered irrelevant if it's a fork or if it has no metadata (no description, no icon, no topic). +;ONLY_SHOW_RELEVANT_REPOS = false +;; +;; Change the sort type of the explore pages. +;; Default is "recentupdate", but you also have "alphabetically", "reverselastlogin", "newest", "oldest". +;EXPLORE_PAGING_DEFAULT_SORT = recentupdate +;; +;; The tense all timestamps should be rendered in. Possible values are `absolute` time (i.e. 1970-01-01, 11:59) and `mixed`. +;; `mixed` means most timestamps are rendered in relative time (i.e. 2 days ago). +;PREFERRED_TIMESTAMP_TENSE = mixed + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ui.admin] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Number of users that are displayed on one page +;USER_PAGING_NUM = 50 +;; +;; Number of repos that are displayed on one page +;REPO_PAGING_NUM = 50 +;; +;; Number of notices that are displayed on one page +;NOTICE_PAGING_NUM = 25 +;; +;; Number of organizations that are displayed on one page +;ORG_PAGING_NUM = 50 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ui.user] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Number of repos that are displayed on one page +;REPO_PAGING_NUM = 15 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ui.meta] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;AUTHOR = Gitea - Git with a cup of tea +;DESCRIPTION = Gitea (Git with a cup of tea) is a painless self-hosted Git service written in Go +;KEYWORDS = go,git,self-hosted,gitea + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ui.notification] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Control how often the notification endpoint is polled to update the notification +;; The timeout will increase to MAX_TIMEOUT in TIMEOUT_STEPs if the notification count is unchanged +;; Set MIN_TIMEOUT to -1 to turn off +;MIN_TIMEOUT = 10s +;MAX_TIMEOUT = 60s +;TIMEOUT_STEP = 10s +;; +;; This setting determines how often the db is queried to get the latest notification counts. +;; If the browser client supports EventSource and SharedWorker, a SharedWorker will be used in preference to polling notification. Set to -1 to disable the EventSource +;EVENT_SOURCE_UPDATE_TIME = 10s + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ui.svg] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Whether to render SVG files as images. If SVG rendering is disabled, SVG files are displayed as text and cannot be embedded in markdown files as images. +;ENABLE_RENDER = true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ui.csv] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Maximum allowed file size in bytes to render CSV files as table. (Set to 0 for no limit). +;MAX_FILE_SIZE = 524288 +;; +;; Maximum allowed rows to render CSV files. (Set to 0 for no limit) +;MAX_ROWS = 2500 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[markdown] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Render soft line breaks as hard line breaks, which means a single newline character between +;; paragraphs will cause a line break and adding trailing whitespace to paragraphs is not +;; necessary to force a line break. +;; Render soft line breaks as hard line breaks for comments +;ENABLE_HARD_LINE_BREAK_IN_COMMENTS = true +;; +;; Render soft line breaks as hard line breaks for markdown documents +;ENABLE_HARD_LINE_BREAK_IN_DOCUMENTS = false +;; +;; Comma separated list of custom URL-Schemes that are allowed as links when rendering Markdown +;; for example git,magnet,ftp (more at https://en.wikipedia.org/wiki/List_of_URI_schemes) +;; URLs starting with http and https are always displayed, whatever is put in this entry. +;; If this entry is empty, all URL schemes are allowed. +;CUSTOM_URL_SCHEMES = +;; +;; List of file extensions that should be rendered/edited as Markdown +;; Separate the extensions with a comma. To render files without any extension as markdown, just put a comma +;FILE_EXTENSIONS = .md,.markdown,.mdown,.mkd,.livemd +;; +;; Enables math inline and block detection +;ENABLE_MATH = true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ssh.minimum_key_sizes] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Define allowed algorithms and their minimum key length (use -1 to disable a type) +;ED25519 = 256 +;ECDSA = 256 +;RSA = 3071 ; we allow 3071 here because an otherwise valid 3072 bit RSA key can be reported as having 3071 bit length +;DSA = -1 ; set to 1024 to switch on + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[indexer] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Issue Indexer settings +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Issue indexer type, currently support: bleve, db, elasticsearch or meilisearch default is bleve +;ISSUE_INDEXER_TYPE = bleve +;; +;; Issue indexer storage path, available when ISSUE_INDEXER_TYPE is bleve +;ISSUE_INDEXER_PATH = indexers/issues.bleve ; Relative paths will be made absolute against _`AppWorkPath`_. +;; +;; Issue indexer connection string, available when ISSUE_INDEXER_TYPE is elasticsearch (e.g. http://elastic:password@localhost:9200) or meilisearch (e.g. http://:apikey@localhost:7700) +;ISSUE_INDEXER_CONN_STR = +;; +;; Issue indexer name, available when ISSUE_INDEXER_TYPE is elasticsearch or meilisearch. +;ISSUE_INDEXER_NAME = gitea_issues +;; +;; Timeout the indexer if it takes longer than this to start. +;; Set to -1 to disable timeout. +;STARTUP_TIMEOUT = 30s +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Repository Indexer settings +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; repo indexer by default disabled, since it uses a lot of disk space +;REPO_INDEXER_ENABLED = false +;; +;; repo indexer units, the items to index, could be `sources`, `forks`, `mirrors`, `templates` or any combination of them separated by a comma. +;; If empty then it defaults to `sources` only, as if you'd like to disable fully please see REPO_INDEXER_ENABLED. +;REPO_INDEXER_REPO_TYPES = sources,forks,mirrors,templates +;; +;; Code search engine type, could be `bleve` or `elasticsearch`. +;REPO_INDEXER_TYPE = bleve +;; +;; Index file used for code search. available when `REPO_INDEXER_TYPE` is bleve +;REPO_INDEXER_PATH = indexers/repos.bleve +;; +;; Code indexer connection string, available when `REPO_INDEXER_TYPE` is elasticsearch. i.e. http://elastic:changeme@localhost:9200 +;REPO_INDEXER_CONN_STR = +;; +;; Code indexer name, available when `REPO_INDEXER_TYPE` is elasticsearch +;REPO_INDEXER_NAME = gitea_codes +;; +;; A comma separated list of glob patterns (see https://github.com/gobwas/glob) to include +;; in the index; default is empty +;REPO_INDEXER_INCLUDE = +;; +;; A comma separated list of glob patterns to exclude from the index; ; default is empty +;REPO_INDEXER_EXCLUDE = +;; +;MAX_FILE_SIZE = 1048576 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[queue] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Specific queues can be individually configured with [queue.name]. [queue] provides defaults +;; ([queue.issue_indexer] is special due to the old configuration described above) +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; General queue queue type, currently support: persistable-channel, channel, level, redis, dummy +;; default to persistable-channel +;TYPE = persistable-channel +;; +;; data-dir for storing persistable queues and level queues, individual queues will default to `queues/common` meaning the queue is shared. +;DATADIR = queues/ ; Relative paths will be made absolute against `%(APP_DATA_PATH)s`. +;; +;; Default queue length before a channel queue will block +;LENGTH = 100000 +;; +;; Batch size to send for batched queues +;BATCH_LENGTH = 20 +;; +;; Connection string for redis queues this will store the redis (or Redis cluster) connection string. +;; When `TYPE` is `persistable-channel`, this provides a directory for the underlying leveldb +;; or additional options of the form `leveldb://path/to/db?option=value&....`, and will override `DATADIR`. +;CONN_STR = "redis://127.0.0.1:6379/0" +;; +;; Provides the suffix of the default redis/disk queue name - specific queues can be overridden within in their [queue.name] sections. +;QUEUE_NAME = "_queue" +;; +;; Provides the suffix of the default redis/disk unique queue set name - specific queues can be overridden within in their [queue.name] sections. +;SET_NAME = "_unique" +;; +;; Maximum number of worker go-routines for the queue. Default value is "CpuNum/2" clipped to between 1 and 10. +;MAX_WORKERS = ; (dynamic) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[admin] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Disallow regular (non-admin) users from creating organizations. +;DISABLE_REGULAR_ORG_CREATION = false +;; +;; Default configuration for email notifications for users (user configurable). Options: enabled, onmention, disabled +;DEFAULT_EMAIL_NOTIFICATIONS = enabled +;; Disabled features for users could be "deletion", "manage_ssh_keys", "manage_gpg_keys", "manage_mfa", "manage_credentials" more features can be disabled in future +;; - deletion: a user cannot delete their own account +;; - manage_ssh_keys: a user cannot configure ssh keys +;; - manage_gpg_keys: a user cannot configure gpg keys +;; - manage_mfa: a user cannot configure mfa devices +;; - manage_credentials: a user cannot configure emails, passwords, or openid +;USER_DISABLED_FEATURES = +;; Comma separated list of disabled features ONLY if the user has an external login type (eg. LDAP, Oauth, etc.), could be "deletion", "manage_ssh_keys", "manage_gpg_keys", "manage_mfa", "manage_credentials". This setting is independent from `USER_DISABLED_FEATURES` and supplements its behavior. +;; - deletion: a user cannot delete their own account +;; - manage_ssh_keys: a user cannot configure ssh keys +;; - manage_gpg_keys: a user cannot configure gpg keys +;; - manage_mfa: a user cannot configure mfa devices +;; - manage_credentials: a user cannot configure emails, passwords, or openid +;;EXTERNAL_USER_DISABLE_FEATURES = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[openid] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; OpenID is an open, standard and decentralized authentication protocol. +;; Your identity is the address of a webpage you provide, which describes +;; how to prove you are in control of that page. +;; +;; For more info: https://en.wikipedia.org/wiki/OpenID +;; +;; Current implementation supports OpenID-2.0 +;; +;; Tested to work providers at the time of writing: +;; - Any GNUSocial node (your.hostname.tld/username) +;; - Any SimpleID provider (http://simpleid.koinic.net) +;; - http://openid.org.cn/ +;; - openid.stackexchange.com +;; - login.launchpad.net +;; - .livejournal.com +;; +;; Whether to allow signin in via OpenID +;ENABLE_OPENID_SIGNIN = true +;; +;; Whether to allow registering via OpenID +;; Do not include to rely on rhw DISABLE_REGISTRATION setting +;;ENABLE_OPENID_SIGNUP = true +;; +;; Allowed URI patterns (POSIX regexp). +;; Space separated. +;; Only these would be allowed if non-blank. +;; Example value: trusted.domain.org trusted.domain.net +;WHITELISTED_URIS = +;; +;; Forbidden URI patterns (POSIX regexp). +;; Space separated. +;; Only used if WHITELISTED_URIS is blank. +;; Example value: loadaverage.org/badguy stackexchange.com/.*spammer +;BLACKLISTED_URIS = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[oauth2_client] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Whether a new auto registered oauth2 user needs to confirm their email. +;; Do not include to use the REGISTER_EMAIL_CONFIRM setting from the `[service]` section. +;REGISTER_EMAIL_CONFIRM = +;; +;; Scopes for the openid connect oauth2 provider (separated by space, the openid scope is implicitly added). +;; Typical values are profile and email. +;; For more information about the possible values see https://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims +;OPENID_CONNECT_SCOPES = +;; +;; Automatically create user accounts for new oauth2 users. +;ENABLE_AUTO_REGISTRATION = false +;; +;; The source of the username for new oauth2 accounts: +;; userid = use the userid / sub attribute +;; nickname = use the nickname attribute +;; preferred_username = use the preferred_username attribute +;; email = use the username part of the email attribute +;; Note: `nickname`, `preferred_username` and `email` options will normalize input strings using the following criteria: +;; - diacritics are removed +;; - the characters in the set ['´`] are removed +;; - the characters in the set [\s~+] are replaced with "-" +;USERNAME = nickname +;; +;; Update avatar if available from oauth2 provider. +;; Update will be performed on each login. +;UPDATE_AVATAR = false +;; +;; How to handle if an account / email already exists: +;; disabled = show an error +;; login = show an account linking login +;; auto = link directly with the account +;ACCOUNT_LINKING = login + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[webhook] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Hook task queue length, increase if webhook shooting starts hanging +;QUEUE_LENGTH = 1000 +;; +;; Deliver timeout in seconds +;DELIVER_TIMEOUT = 5 +;; +;; Webhook can only call allowed hosts for security reasons. Comma separated list, eg: external, 192.168.1.0/24, *.mydomain.com +;; Built-in: loopback (for localhost), private (for LAN/intranet), external (for public hosts on internet), * (for all hosts) +;; CIDR list: 1.2.3.0/8, 2001:db8::/32 +;; Wildcard hosts: *.mydomain.com, 192.168.100.* +;; Since 1.15.7. Default to * for 1.15.x, external for 1.16 and later +;ALLOWED_HOST_LIST = external +;; +;; Allow insecure certification +;SKIP_TLS_VERIFY = false +;; +;; Number of history information in each page +;PAGING_NUM = 10 +;; +;; Proxy server URL, support http://, https//, socks://, blank will follow environment http_proxy/https_proxy +;PROXY_URL = +;; +;; Comma separated list of host names requiring proxy. Glob patterns (*) are accepted; use ** to match all hosts. +;PROXY_HOSTS = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[mailer] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; NOTICE: this section is for Gitea 1.18 and later. If you are using Gitea 1.17 or older, +;; please refer to +;; https://github.com/go-gitea/gitea/blob/release/v1.17/custom/conf/app.example.ini +;; https://github.com/go-gitea/gitea/blob/release/v1.17/docs/content/doc/advanced/config-cheat-sheet.en-us.md +;; +;ENABLED = false +;; +;; Buffer length of channel, keep it as it is if you don't know what it is. +;SEND_BUFFER_LEN = 100 +;; +;; Prefix displayed before subject in mail +;SUBJECT_PREFIX = +;; +;; Mail server protocol. One of "smtp", "smtps", "smtp+starttls", "smtp+unix", "sendmail", "dummy". +;; - sendmail: use the operating system's `sendmail` command instead of SMTP. This is common on Linux systems. +;; - dummy: send email messages to the log as a testing phase. +;; If your provider does not explicitly say which protocol it uses but does provide a port, +;; you can set SMTP_PORT instead and this will be inferred. +;; (Before 1.18, see the notice, this was controlled via MAILER_TYPE and IS_TLS_ENABLED.) +;PROTOCOL = +;; +;; Mail server address, e.g. smtp.gmail.com. +;; For smtp+unix, this should be a path to a unix socket instead. +;; (Before 1.18, see the notice, this was combined with SMTP_PORT as HOST.) +;SMTP_ADDR = +;; +;; Mail server port. Common ports are: +;; 25: insecure SMTP +;; 465: SMTP Secure +;; 587: StartTLS +;; If no protocol is specified, it will be inferred by this setting. +;; (Before 1.18, this was combined with SMTP_ADDR as HOST.) +;SMTP_PORT = +;; +;; Enable HELO operation. Defaults to true. +;ENABLE_HELO = true +;; +;; Custom hostname for HELO operation. +;; If no value is provided, one is retrieved from system. +;HELO_HOSTNAME = +;; +;; If set to `true`, completely ignores server certificate validation errors. +;; This option is unsafe. Consider adding the certificate to the system trust store instead. +;FORCE_TRUST_SERVER_CERT = false +;; +;; Use client certificate in connection. +;USE_CLIENT_CERT = false +;CLIENT_CERT_FILE = custom/mailer/cert.pem +;CLIENT_KEY_FILE = custom/mailer/key.pem +;; +;; Mail from address, RFC 5322. This can be just an email address, or the `"Name" ` format +;FROM = +;; +;; Sometimes it is helpful to use a different address on the envelope. Set this to use ENVELOPE_FROM as the from on the envelope. Set to `<>` to send an empty address. +;ENVELOPE_FROM = +;; +;; If gitea sends mails on behave of users, it will just use the name also displayed in the WebUI. If you want e.g. `Mister X (by CodeIt) `, +;; set it to `{{ .DisplayName }} (by {{ .AppName }})`. Available Variables: `.DisplayName`, `.AppName` and `.Domain`. +;FROM_DISPLAY_NAME_FORMAT = {{ .DisplayName }} +;; +;; Mailer user name and password, if required by provider. +;USER = +;; +;; Use PASSWD = `your password` for quoting if you use special characters in the password. +;PASSWD = +;; +;; Send mails only in plain text, without HTML alternative +;SEND_AS_PLAIN_TEXT = false +;; +;; Specify an alternative sendmail binary +;SENDMAIL_PATH = sendmail +;; +;; Specify any extra sendmail arguments +;; WARNING: if your sendmail program interprets options you should set this to "--" or terminate these args with "--" +;SENDMAIL_ARGS = +;; +;; Timeout for Sendmail +;SENDMAIL_TIMEOUT = 5m +;; +;; convert \r\n to \n for Sendmail +;SENDMAIL_CONVERT_CRLF = true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[mailer.override_header] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; This is empty by default, use it only if you know what you need it for. +;Reply-To = test@example.com, test2@example.com +;Content-Type = text/html; charset=utf-8 +;In-Reply-To = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[email.incoming] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Enable handling of incoming emails. +;ENABLED = false +;; +;; The email address including the %{token} placeholder that will be replaced per user/action. +;; Example: incoming+%{token}@example.com +;; The placeholder must appear in the user part of the address (before the @). +;REPLY_TO_ADDRESS = +;; +;; IMAP server host +;HOST = +;; +;; IMAP server port +;PORT = +;; +;; Username of the receiving account +;USERNAME = +;; +;; Password of the receiving account +;PASSWORD = +;; +;; Whether the IMAP server uses TLS. +;USE_TLS = false +;; +;; If set to true, completely ignores server certificate validation errors. This option is unsafe. +;SKIP_TLS_VERIFY = true +;; +;; The mailbox name where incoming mail will end up. +;MAILBOX = INBOX +;; +;; Whether handled messages should be deleted from the mailbox. +;DELETE_HANDLED_MESSAGE = true +;; +;; Maximum size of a message to handle. Bigger messages are ignored. Set to 0 to allow every size. +;MAXIMUM_MESSAGE_SIZE = 10485760 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cache] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Either "memory", "redis", "memcache", or "twoqueue". default is "memory" +;ADAPTER = memory +;; +;; For "memory" only, GC interval in seconds, default is 60 +;INTERVAL = 60 +;; +;; For "redis" and "memcache", connection host address +;; redis: `redis://127.0.0.1:6379/0?pool_size=100&idle_timeout=180s` (or `redis+cluster://127.0.0.1:6379/0?pool_size=100&idle_timeout=180s` for a Redis cluster) +;; memcache: `127.0.0.1:11211` +;; twoqueue: `{"size":50000,"recent_ratio":0.25,"ghost_ratio":0.5}` or `50000` +;HOST = +;; +;; Time to keep items in cache if not used, default is 16 hours. +;; Setting it to -1 disables caching +;ITEM_TTL = 16h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Last commit cache +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cache.last_commit] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Time to keep items in cache if not used, default is 8760 hours. +;; Setting it to -1 disables caching +;ITEM_TTL = 8760h +;; +;; Only enable the cache when repository's commits count great than +;COMMITS_COUNT = 1000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[session] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Either "memory", "file", "redis", "db", "mysql", "couchbase", "memcache" or "postgres" +;; Default is "memory". "db" will reuse the configuration in [database] +;PROVIDER = memory +;; +;; Provider config options +;; memory: doesn't have any config yet +;; file: session file path, e.g. `data/sessions` +;; redis: `redis://127.0.0.1:6379/0?pool_size=100&idle_timeout=180s` (or `redis+cluster://127.0.0.1:6379/0?pool_size=100&idle_timeout=180s` for a Redis cluster) +;; mysql: go-sql-driver/mysql dsn config string, e.g. `root:password@/session_table` +;PROVIDER_CONFIG = data/sessions ; Relative paths will be made absolute against _`AppWorkPath`_. +;; +;; Session cookie name +;COOKIE_NAME = i_like_gitea +;; +;; If you use session in https only: true or false. If not set, it defaults to `true` if the ROOT_URL is an HTTPS URL. +;COOKIE_SECURE = +;; +;; Session GC time interval in seconds, default is 86400 (1 day) +;GC_INTERVAL_TIME = 86400 +;; +;; Session life time in seconds, default is 86400 (1 day) +;SESSION_LIFE_TIME = 86400 +;; +;; SameSite settings. Either "none", "lax", or "strict" +;SAME_SITE=lax + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[picture] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;AVATAR_UPLOAD_PATH = data/avatars +;REPOSITORY_AVATAR_UPLOAD_PATH = data/repo-avatars +;; +;; How Gitea deals with missing repository avatars +;; none = no avatar will be displayed; random = random avatar will be displayed; image = default image will be used +;REPOSITORY_AVATAR_FALLBACK = none +;REPOSITORY_AVATAR_FALLBACK_IMAGE = /img/repo_default.png +;; +;; Max Width and Height of uploaded avatars. +;; This is to limit the amount of RAM used when resizing the image. +;AVATAR_MAX_WIDTH = 4096 +;AVATAR_MAX_HEIGHT = 4096 +;; +;; The multiplication factor for rendered avatar images. +;; Larger values result in finer rendering on HiDPI devices. +;AVATAR_RENDERED_SIZE_FACTOR = 2 +;; +;; Maximum allowed file size for uploaded avatars. +;; This is to limit the amount of RAM used when resizing the image. +;AVATAR_MAX_FILE_SIZE = 1048576 +;; +;; If the uploaded file is not larger than this byte size, the image will be used as is, without resizing/converting. +;AVATAR_MAX_ORIGIN_SIZE = 262144 +;; +;; Chinese users can choose "duoshuo" +;; or a custom avatar source, like: http://cn.gravatar.com/avatar/ +;GRAVATAR_SOURCE = gravatar +;; +;; This value will always be true in offline mode. +;DISABLE_GRAVATAR = false +;; +;; Federated avatar lookup uses DNS to discover avatar associated +;; with emails, see https://www.libravatar.org +;; This value will always be false in offline mode or when Gravatar is disabled. +;ENABLE_FEDERATED_AVATAR = false + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[attachment] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Whether issue and pull request attachments are enabled. Defaults to `true` +;ENABLED = true +;; +;; Comma-separated list of allowed file extensions (`.zip`), mime types (`text/plain`) or wildcard type (`image/*`, `audio/*`, `video/*`). Empty value or `*/*` allows all types. +;ALLOWED_TYPES = .csv,.docx,.fodg,.fodp,.fods,.fodt,.gif,.gz,.jpeg,.jpg,.log,.md,.mov,.mp4,.odf,.odg,.odp,.ods,.odt,.patch,.pdf,.png,.pptx,.svg,.tgz,.txt,.webm,.xls,.xlsx,.zip +;; +;; Max size of each file. Defaults to 2048MB +;MAX_SIZE = 2048 +;; +;; Max number of files per upload. Defaults to 5 +;MAX_FILES = 5 +;; +;; Storage type for attachments, `local` for local disk or `minio` for s3 compatible +;; object storage service, default is `local`. +;STORAGE_TYPE = local +;; +;; Allows the storage driver to redirect to authenticated URLs to serve files directly +;; Currently, only `minio` and `azureblob` is supported. +;SERVE_DIRECT = false +;; +;; Path for attachments. Defaults to `attachments`. Only available when STORAGE_TYPE is `local` +;; Relative paths will be resolved to `${AppDataPath}/${attachment.PATH}` +;PATH = attachments +;; +;; Minio endpoint to connect only available when STORAGE_TYPE is `minio` +;MINIO_ENDPOINT = localhost:9000 +;; +;; Minio accessKeyID to connect only available when STORAGE_TYPE is `minio`. +;; If not provided and STORAGE_TYPE is `minio`, will search for credentials in known +;; environment variables (MINIO_ACCESS_KEY_ID, AWS_ACCESS_KEY_ID), credentials files +;; (~/.mc/config.json, ~/.aws/credentials), and EC2 instance metadata. +;MINIO_ACCESS_KEY_ID = +;; +;; Minio secretAccessKey to connect only available when STORAGE_TYPE is `minio` +;MINIO_SECRET_ACCESS_KEY = +;; +;; Minio bucket to store the attachments only available when STORAGE_TYPE is `minio` +;MINIO_BUCKET = gitea +;; +;; Minio location to create bucket only available when STORAGE_TYPE is `minio` +;MINIO_LOCATION = us-east-1 +;; +;; Minio base path on the bucket only available when STORAGE_TYPE is `minio` +;MINIO_BASE_PATH = attachments/ +;; +;; Minio enabled ssl only available when STORAGE_TYPE is `minio` +;MINIO_USE_SSL = false +;; +;; Minio skip SSL verification available when STORAGE_TYPE is `minio` +;MINIO_INSECURE_SKIP_VERIFY = false +;; +;; Minio checksum algorithm: default (for MinIO or AWS S3) or md5 (for Cloudflare or Backblaze) +;MINIO_CHECKSUM_ALGORITHM = default +;; +;; Minio bucket lookup method defaults to auto mode; set it to `dns` for virtual host style or `path` for path style, only available when STORAGE_TYPE is `minio` +;MINIO_BUCKET_LOOKUP_TYPE = auto +;; Azure Blob endpoint to connect only available when STORAGE_TYPE is `azureblob`, +;; e.g. https://accountname.blob.core.windows.net or http://127.0.0.1:10000/devstoreaccount1 +;AZURE_BLOB_ENDPOINT = +;; +;; Azure Blob account name to connect only available when STORAGE_TYPE is `azureblob` +;AZURE_BLOB_ACCOUNT_NAME = +;; +;; Azure Blob account key to connect only available when STORAGE_TYPE is `azureblob` +;AZURE_BLOB_ACCOUNT_KEY = +;; +;; Azure Blob container to store the attachments only available when STORAGE_TYPE is `azureblob` +;AZURE_BLOB_CONTAINER = gitea +;; +;; override the azure blob base path if storage type is azureblob +;AZURE_BLOB_BASE_PATH = attachments/ + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[time] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Location the UI time display i.e. Asia/Shanghai +;; Empty means server's location setting +;DEFAULT_UI_LOCATION = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Common settings +;; +;; Setting this to true will enable all cron tasks periodically with default settings. +;ENABLED = false +;; Setting this to true will run all enabled cron tasks when Gitea starts. +;RUN_AT_START = false +;; +;; Note: ``SCHEDULE`` accept formats +;; - Full crontab specs, e.g. "* * * * * ?" +;; - Descriptors, e.g. "@midnight", "@every 1h30m" +;; See more: https://pkg.go.dev/github.com/gogs/cron@v0.0.0-20171120032916-9f6c956d3e14 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Basic cron tasks - enabled by default +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Clean up old repository archives +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.archive_cleanup] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Whether to enable the job +;ENABLED = true +;; Whether to always run at least once at start up time (if ENABLED) +;RUN_AT_START = true +;; Whether to emit notice on successful execution too +;NOTICE_ON_SUCCESS = false +;; Time interval for job to run +;SCHEDULE = @midnight +;; Archives created more than OLDER_THAN ago are subject to deletion +;OLDER_THAN = 24h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Update mirrors +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.update_mirrors] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;SCHEDULE = @every 10m +;; Enable running Update mirrors task periodically. +;ENABLED = true +;; Run Update mirrors task when Gitea starts. +;RUN_AT_START = false +;; Notice if not success +;NOTICE_ON_SUCCESS = false +;; Limit the number of mirrors added to the queue to this number +;; (negative values mean no limit, 0 will result in no result in no mirrors being queued effectively disabling pull mirror updating.) +;PULL_LIMIT=50 +;; Limit the number of mirrors added to the queue to this number +;; (negative values mean no limit, 0 will result in no mirrors being queued effectively disabling push mirror updating) +;PUSH_LIMIT=50 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Repository health check +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.repo_health_check] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;SCHEDULE = @midnight +;; Enable running Repository health check task periodically. +;ENABLED = true +;; Run Repository health check task when Gitea starts. +;RUN_AT_START = false +;; Notice if not success +;NOTICE_ON_SUCCESS = false +;TIMEOUT = 60s +;; Arguments for command 'git fsck', e.g. "--unreachable --tags" +;; see more on http://git-scm.com/docs/git-fsck +;ARGS = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Check repository statistics +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.check_repo_stats] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Enable running check repository statistics task periodically. +;ENABLED = true +;; Run check repository statistics task when Gitea starts. +;RUN_AT_START = true +;; Notice if not success +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @midnight + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.update_migration_poster_id] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Update migrated repositories' issues and comments' posterid, it will always attempt synchronization when the instance starts. +;ENABLED = true +;; Update migrated repositories' issues and comments' posterid when starting server (default true) +;RUN_AT_START = true +;; Notice if not success +;NOTICE_ON_SUCCESS = false +;; Interval as a duration between each synchronization. (default every 24h) +;SCHEDULE = @midnight + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Synchronize external user data (only LDAP user synchronization is supported) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.sync_external_users] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = true +;; Synchronize external user data when starting server (default false) +;RUN_AT_START = false +;; Notice if not success +;NOTICE_ON_SUCCESS = false +;; Interval as a duration between each synchronization (default every 24h) +;SCHEDULE = @midnight +;; Create new users, update existing user data and disable users that are not in external source anymore (default) +;; or only create new users if UPDATE_EXISTING is set to false +;UPDATE_EXISTING = true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Cleanup expired actions assets +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.cleanup_actions] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = true +;RUN_AT_START = true +;SCHEDULE = @midnight + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Clean-up deleted branches +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.deleted_branches_cleanup] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = true +;; Clean-up deleted branches when starting server (default true) +;RUN_AT_START = true +;; Notice if not success +;NOTICE_ON_SUCCESS = false +;; Interval as a duration between each synchronization (default every 24h) +;SCHEDULE = @midnight +;; deleted branches than OLDER_THAN ago are subject to deletion +;OLDER_THAN = 24h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Cleanup hook_task table +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.cleanup_hook_task_table] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Whether to enable the job +;ENABLED = true +;; Whether to always run at start up time (if ENABLED) +;RUN_AT_START = false +;; Time interval for job to run +;SCHEDULE = @midnight +;; OlderThan or PerWebhook. How the records are removed, either by age (i.e. how long ago hook_task record was delivered) or by the number to keep per webhook (i.e. keep most recent x deliveries per webhook). +;CLEANUP_TYPE = OlderThan +;; If CLEANUP_TYPE is set to OlderThan, then any delivered hook_task records older than this expression will be deleted. +;OLDER_THAN = 168h +;; If CLEANUP_TYPE is set to PerWebhook, this is number of hook_task records to keep for a webhook (i.e. keep the most recent x deliveries). +;NUMBER_TO_KEEP = 10 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Cleanup expired packages +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.cleanup_packages] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Whether to enable the job +;ENABLED = true +;; Whether to always run at least once at start up time (if ENABLED) +;RUN_AT_START = true +;; Whether to emit notice on successful execution too +;NOTICE_ON_SUCCESS = false +;; Time interval for job to run +;SCHEDULE = @midnight +;; Unreferenced blobs created more than OLDER_THAN ago are subject to deletion +;OLDER_THAN = 24h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Extended cron task - not enabled by default +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Delete all unactivated accounts +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.delete_inactive_accounts] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @annually +;OLDER_THAN = 168h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Delete all repository archives +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.delete_repo_archives] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @annually; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Garbage collect all repositories +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.git_gc_repos] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @every 72h +;TIMEOUT = 60s +;; Arguments for command 'git gc' +;; The default value is same with [git] -> GC_ARGS +;ARGS = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Update the '.ssh/authorized_keys' file with Gitea SSH keys +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.resync_all_sshkeys] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @every 72h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Resynchronize pre-receive, update and post-receive hooks of all repositories. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.resync_all_hooks] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @every 72h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Reinitialize all missing Git repositories for which records exist +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.reinit_missing_repos] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @every 72h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Delete all repositories missing their Git files +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.delete_missing_repos] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @every 72h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Delete generated repository avatars +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.delete_generated_repository_avatars] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @every 72h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Delete all old actions from database +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.delete_old_actions] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @every 168h +;OLDER_THAN = 8760h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Check for new Gitea versions +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.update_checker] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = true +;RUN_AT_START = false +;ENABLE_SUCCESS_NOTICE = false +;SCHEDULE = @every 168h +;HTTP_ENDPOINT = https://dl.gitea.com/gitea/version.json + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Delete all old system notices from database +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.delete_old_system_notices] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NO_SUCCESS_NOTICE = false +;SCHEDULE = @every 168h +;OLDER_THAN = 8760h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Garbage collect LFS pointers in repositories +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.gc_lfs] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;; Garbage collect LFS pointers in repositories (default false) +;RUN_AT_START = false +;; Interval as a duration between each gc run (default every 24h) +;SCHEDULE = @every 24h +;; Only attempt to garbage collect LFSMetaObjects older than this (default 7 days) +;OLDER_THAN = 168h +;; Only attempt to garbage collect LFSMetaObjects that have not been attempted to be garbage collected for this long (default 3 days) +;LAST_UPDATED_MORE_THAN_AGO = 72h +; Minimum number of stale LFSMetaObjects to check per repo. Set to `0` to always check all. +;NUMBER_TO_CHECK_PER_REPO = 100 +;Check at least this proportion of LFSMetaObjects per repo. (This may cause all stale LFSMetaObjects to be checked.) +;PROPORTION_TO_CHECK_PER_REPO = 0.6 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[mirror] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Enables the mirror functionality. Set to **false** to disable all mirrors. Pre-existing mirrors remain valid but won't be updated; may be converted to regular repo. +;ENABLED = true +;; Disable the creation of **new** pull mirrors. Pre-existing mirrors remain valid. Will be ignored if `mirror.ENABLED` is `false`. +;DISABLE_NEW_PULL = false +;; Disable the creation of **new** push mirrors. Pre-existing mirrors remain valid. Will be ignored if `mirror.ENABLED` is `false`. +;DISABLE_NEW_PUSH = false +;; Default interval as a duration between each check +;DEFAULT_INTERVAL = 8h +;; Min interval as a duration must be > 1m +;MIN_INTERVAL = 10m + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[api] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Enables the API documentation endpoints (/api/swagger, /api/v1/swagger, …). True or false. +;ENABLE_SWAGGER = true +;; Max number of items in a page +;MAX_RESPONSE_ITEMS = 50 +;; Default paging number of api +;DEFAULT_PAGING_NUM = 30 +;; Default and maximum number of items per page for git trees api +;DEFAULT_GIT_TREES_PER_PAGE = 1000 +;; Default max size of a blob returned by the blobs API (default is 10MiB) +;DEFAULT_MAX_BLOB_SIZE = 10485760 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[i18n] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; The first locale will be used as the default if user browser's language doesn't match any locale in the list. +;LANGS = en-US,zh-CN,zh-HK,zh-TW,de-DE,fr-FR,nl-NL,lv-LV,ru-RU,uk-UA,ja-JP,es-ES,pt-BR,pt-PT,pl-PL,bg-BG,it-IT,fi-FI,tr-TR,cs-CZ,sv-SE,ko-KR,el-GR,fa-IR,hu-HU,id-ID,ml-IN +;NAMES = English,简体中文,繁體中文(香港),繁體中文(台灣),Deutsch,Français,Nederlands,Latviešu,Русский,Українська,日本語,Español,Português do Brasil,Português de Portugal,Polski,Български,Italiano,Suomi,Türkçe,Čeština,Српски,Svenska,한국어,Ελληνικά,فارسی,Magyar nyelv,Bahasa Indonesia,മലയാളം + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[highlight.mapping] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Extension mapping to highlight class +;; e.g. .toml=ini + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[other] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Show version information about Gitea and Go in the footer +;SHOW_FOOTER_VERSION = true +;; Show template execution time in the footer +;SHOW_FOOTER_TEMPLATE_LOAD_TIME = true +;; Show the "powered by" text in the footer +;SHOW_FOOTER_POWERED_BY = true +;; Generate sitemap. Defaults to `true`. +;ENABLE_SITEMAP = true +;; Enable/Disable RSS/Atom feed +;ENABLE_FEED = true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[markup] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Set the maximum number of characters in a mermaid source. (Set to -1 to disable limits) +;MERMAID_MAX_SOURCE_CHARACTERS = 5000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[markup.sanitizer.1] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; The following keys can appear once to define a sanitation policy rule. +;; This section can appear multiple times by adding a unique alphanumeric suffix to define multiple rules. +;; e.g., [markup.sanitizer.1] -> [markup.sanitizer.2] -> [markup.sanitizer.TeX] +;ELEMENT = span +;ALLOW_ATTR = class +;REGEXP = ^(info|warning|error)$ +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Other markup formats e.g. asciidoc +;; +;; uncomment and enable the below section. +;; (You can add other markup formats by copying the section and adjusting +;; the section name suffix "asciidoc" to something else.) +;[markup.asciidoc] +;ENABLED = false +;; List of file extensions that should be rendered by an external command +;FILE_EXTENSIONS = .adoc,.asciidoc +;; External command to render all matching extensions +;RENDER_COMMAND = "asciidoc --out-file=- -" +;; Don't pass the file on STDIN, pass the filename as argument instead. +;IS_INPUT_FILE = false +;; How the content will be rendered. +;; * sanitized: Sanitize the content and render it inside current page, default to only allow a few HTML tags and attributes. Customized sanitizer rules can be defined in [markup.sanitizer.*] . +;; * no-sanitizer: Disable the sanitizer and render the content inside current page. It's **insecure** and may lead to XSS attack if the content contains malicious code. +;; * iframe: Render the content in a separate standalone page and embed it into current page by iframe. The iframe is in sandbox mode with same-origin disabled, and the JS code are safely isolated from parent page. +;RENDER_CONTENT_MODE=sanitized + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[metrics] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Enables metrics endpoint. True or false; default is false. +;ENABLED = false +;; If you want to add authorization, specify a token here +;TOKEN = +;; Enable issue by label metrics; default is false +;ENABLED_ISSUE_BY_LABEL = false +;; Enable issue by repository metrics; default is false +;ENABLED_ISSUE_BY_REPOSITORY = false + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[migrations] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Max attempts per http/https request on migrations. +;MAX_ATTEMPTS = 3 +;; +;; Backoff time per http/https request retry (seconds) +;RETRY_BACKOFF = 3 +;; +;; Allowed domains for migrating, default is blank. Blank means everything will be allowed. +;; Multiple domains could be separated by commas. +;; Wildcard is supported: "github.com, *.github.com" +;ALLOWED_DOMAINS = +;; +;; Blocklist for migrating, default is blank. Multiple domains could be separated by commas. +;; When ALLOWED_DOMAINS is not blank, this option has a higher priority to deny domains. +;; Wildcard is supported. +;BLOCKED_DOMAINS = +;; +;; Allow private addresses defined by RFC 1918, RFC 1122, RFC 4632 and RFC 4291 (false by default) +;; If a domain is allowed by ALLOWED_DOMAINS, this option will be ignored. +;ALLOW_LOCALNETWORKS = false + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[federation] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Enable/Disable federation capabilities +;ENABLED = false +;; +;; Enable/Disable user statistics for nodeinfo if federation is enabled +;SHARE_USER_STATISTICS = true +;; +;; Maximum federation request and response size (MB) +;MAX_SIZE = 4 +;; +;; WARNING: Changing the settings below can break federation. +;; +;; HTTP signature algorithms +;ALGORITHMS = rsa-sha256, rsa-sha512, ed25519 +;; +;; HTTP signature digest algorithm +;DIGEST_ALGORITHM = SHA-256 +;; +;; GET headers for federation requests +;GET_HEADERS = (request-target), Date +;; +;; POST headers for federation requests +;POST_HEADERS = (request-target), Date, Digest + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[packages] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Enable/Disable package registry capabilities +;ENABLED = true +;; +;STORAGE_TYPE = local +;; override the minio base path if storage type is minio +;MINIO_BASE_PATH = packages/ +;; override the azure blob base path if storage type is azureblob +;AZURE_BLOB_BASE_PATH = packages/ +;; Allows the storage driver to redirect to authenticated URLs to serve files directly +;; Currently, only `minio` and `azureblob` is supported. +;SERVE_DIRECT = false +;; +;; Path for chunked uploads. Defaults to APP_DATA_PATH + `tmp/package-upload` +;CHUNKED_UPLOAD_PATH = tmp/package-upload +;; +;; Maximum count of package versions a single owner can have (`-1` means no limits) +;LIMIT_TOTAL_OWNER_COUNT = -1 +;; Maximum size of packages a single owner can use (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_TOTAL_OWNER_SIZE = -1 +;; Maximum size of an Alpine upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_ALPINE = -1 +;; Maximum size of a Cargo upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_CARGO = -1 +;; Maximum size of a Chef upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_CHEF = -1 +;; Maximum size of a Composer upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_COMPOSER = -1 +;; Maximum size of a Conan upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_CONAN = -1 +;; Maximum size of a Conda upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_CONDA = -1 +;; Maximum size of a Container upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_CONTAINER = -1 +;; Maximum size of a CRAN upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_CRAN = -1 +;; Maximum size of a Debian upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_DEBIAN = -1 +;; Maximum size of a Generic upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_GENERIC = -1 +;; Maximum size of a Go upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_GO = -1 +;; Maximum size of a Helm upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_HELM = -1 +;; Maximum size of a Maven upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_MAVEN = -1 +;; Maximum size of a npm upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_NPM = -1 +;; Maximum size of a NuGet upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_NUGET = -1 +;; Maximum size of a Pub upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_PUB = -1 +;; Maximum size of a PyPI upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_PYPI = -1 +;; Maximum size of a RPM upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_RPM = -1 +;; Maximum size of a RubyGems upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_RUBYGEMS = -1 +;; Maximum size of a Swift upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_SWIFT = -1 +;; Maximum size of a Vagrant upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_VAGRANT = -1 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; default storage for attachments, lfs and avatars +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[storage] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; storage type +;STORAGE_TYPE = local + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; repo-archive storage will override storage +;; +;[repo-archive] +;STORAGE_TYPE = local +;; +;; Where your lfs files reside, default is data/lfs. +;PATH = data/repo-archive +;; +;; override the minio base path if storage type is minio +;MINIO_BASE_PATH = repo-archive/ +;; override the azure blob base path if storage type is azureblob +;AZURE_BLOB_BASE_PATH = repo-archive/ + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; settings for repository archives, will override storage setting +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[storage.repo-archive] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; storage type +;STORAGE_TYPE = local + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lfs storage will override storage +;; +;[lfs] +;STORAGE_TYPE = local +;; +;; Where your lfs files reside, default is data/lfs. +;PATH = data/lfs +;; +;; Allows the storage driver to redirect to authenticated URLs to serve files directly +;; Currently, only `minio` and `azureblob` is supported. +;SERVE_DIRECT = false +;; +;; override the minio base path if storage type is minio +;MINIO_BASE_PATH = lfs/ +;; +;; override the azure blob base path if storage type is azureblob +;AZURE_BLOB_BASE_PATH = lfs/ + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; settings for packages, will override storage setting +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[storage.packages] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; storage type +;STORAGE_TYPE = local + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; customize storage +;[storage.minio] +;STORAGE_TYPE = minio +;; +;; Minio endpoint to connect only available when STORAGE_TYPE is `minio` +;MINIO_ENDPOINT = localhost:9000 +;; +;; Minio accessKeyID to connect only available when STORAGE_TYPE is `minio`. +;; If not provided and STORAGE_TYPE is `minio`, will search for credentials in known +;; environment variables (MINIO_ACCESS_KEY_ID, AWS_ACCESS_KEY_ID), credentials files +;; (~/.mc/config.json, ~/.aws/credentials), and EC2 instance metadata. +;MINIO_ACCESS_KEY_ID = +;; +;; Minio secretAccessKey to connect only available when STORAGE_TYPE is `minio` +;MINIO_SECRET_ACCESS_KEY = +;; +;; Minio bucket to store the attachments only available when STORAGE_TYPE is `minio` +;MINIO_BUCKET = gitea +;; +;; Minio location to create bucket only available when STORAGE_TYPE is `minio` +;MINIO_LOCATION = us-east-1 +;; +;; Minio enabled ssl only available when STORAGE_TYPE is `minio` +;MINIO_USE_SSL = false +;; +;; Minio skip SSL verification available when STORAGE_TYPE is `minio` +;MINIO_INSECURE_SKIP_VERIFY = false +;; +;; Minio bucket lookup method defaults to auto mode; set it to `dns` for virtual host style or `path` for path style, only available when STORAGE_TYPE is `minio` +;MINIO_BUCKET_LOOKUP_TYPE = auto + +;[storage.azureblob] +;STORAGE_TYPE = azureblob +;; +;; Azure Blob endpoint to connect only available when STORAGE_TYPE is `azureblob`, +;; e.g. https://accountname.blob.core.windows.net or http://127.0.0.1:10000/devstoreaccount1 +;AZURE_BLOB_ENDPOINT = +;; +;; Azure Blob account name to connect only available when STORAGE_TYPE is `azureblob` +;AZURE_BLOB_ACCOUNT_NAME = +;; +;; Azure Blob account key to connect only available when STORAGE_TYPE is `azureblob` +;AZURE_BLOB_ACCOUNT_KEY = +;; +;; Azure Blob container to store the attachments only available when STORAGE_TYPE is `azureblob` +;AZURE_BLOB_CONTAINER = gitea + +;[proxy] +;; Enable the proxy, all requests to external via HTTP will be affected +;PROXY_ENABLED = false +;; Proxy server URL, support http://, https//, socks://, blank will follow environment http_proxy/https_proxy/no_proxy +;PROXY_URL = +;; Comma separated list of host names requiring proxy. Glob patterns (*) are accepted; use ** to match all hosts. +;PROXY_HOSTS = + +; [actions] +;; Enable/Disable actions capabilities +;ENABLED = true +;; +;; Default platform to get action plugins, `github` for `https://github.com`, `self` for the current Gitea instance. +;DEFAULT_ACTIONS_URL = github +;; Default artifact retention time in days. Artifacts could have their own retention periods by setting the `retention-days` option in `actions/upload-artifact` step. +;ARTIFACT_RETENTION_DAYS = 90 +;; Timeout to stop the task which have running status, but haven't been updated for a long time +;ZOMBIE_TASK_TIMEOUT = 10m +;; Timeout to stop the tasks which have running status and continuous updates, but don't end for a long time +;ENDLESS_TASK_TIMEOUT = 3h +;; Timeout to cancel the jobs which have waiting status, but haven't been picked by a runner for a long time +;ABANDONED_JOB_TIMEOUT = 24h +;; Strings committers can place inside a commit message or PR title to skip executing the corresponding actions workflow +;SKIP_WORKFLOW_STRINGS = [skip ci],[ci skip],[no ci],[skip actions],[actions skip] + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; settings for action logs, will override storage setting +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[storage.actions_log] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; storage type +;STORAGE_TYPE = local diff --git a/appstore/gitea/1.22.4/data.yml b/appstore/gitea/1.22.4/data.yml new file mode 100644 index 000000000..447f89da6 --- /dev/null +++ b/appstore/gitea/1.22.4/data.yml @@ -0,0 +1,268 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_DB_HOST + required: true + type: service + default: postgresql + edit: true + envKey: PANEL_DB_TYPE + labelZh: 数据库 服务 (前置检查) + labelEn: Database Service (Pre-check) + required: true + type: apps + values: + - label: PostgreSQL + value: postgresql + - label: MySQL + value: mysql + - label: MariaDB + value: mariadb + - label: Percona + value: percona + - default: "/home/gitea" + edit: true + envKey: GITEA_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 3000 + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 22 + envKey: PANEL_APP_PORT_SSH + labelZh: SSH 端口 + labelEn: SSH Port + required: true + rule: paramPort + type: number + - default: postgresql + edit: true + envKey: DB_TYPE + labelZh: 数据库 类型 + labelEn: Database Type + required: true + type: select + values: + - label: PostgreSQL + value: postgresql + - label: MySQL (MariaDB, Percona) + value: mysql + - label: SQLite3 (忽略数据库配置) + value: sqlite3 + - default: "127.0.0.1" + edit: true + envKey: DB_HOSTNAME + labelZh: 数据库 主机地址 + labelEn: Database Host + required: false + type: text + - default: 5432 + edit: true + envKey: DB_PORT + labelZh: 数据库 端口 + labelEn: Database Port + required: false + rule: paramPort + type: number + - default: "gitea" + edit: true + envKey: DB_USER + labelZh: 数据库 用户名 + labelEn: Database User + required: false + type: text + - default: "" + edit: true + envKey: DB_PASSWD + labelEn: Database Password + labelZh: 数据库 密码 + random: true + required: false + rule: paramComplexity + type: password + - default: "gitea" + edit: true + envKey: DB_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: false + type: text + - default: "Gitea" + edit: true + envKey: APP_NAME + labelZh: 应用名称 + labelEn: Application Name + required: true + type: text + - default: "localhost" + edit: true + envKey: DOMAIN + labelZh: HTTP 克隆域名 + labelEn: HTTP Clone Domain + required: true + type: text + - default: "localhost" + edit: true + envKey: SSH_DOMAIN + labelZh: SSH 克隆域名 + labelEn: SSH Clone Domain + required: true + type: text + - default: 22 + edit: true + envKey: SSH_PORT + labelZh: SSH 克隆显示端口 + labelEn: SSH Clone Display Port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: ROOT_URL + labelZh: 公共 URL (覆盖级) + labelEn: Public URL (Override) + required: false + rule: paramExtUrl + type: text + - default: "false" + edit: true + envKey: LFS_START_SERVER + labelZh: 启用 Git LFS 支持 + labelEn: Enable Git LFS Support + required: true + type: select + values: + - label: 开启 + value: "true" + - label: 关闭 + value: "false" + - default: "false" + edit: true + envKey: DISABLE_REGISTRATION + labelZh: 禁用注册 + labelEn: Disable Registration + required: true + type: select + values: + - label: 开启 + value: "true" + - label: 关闭 + value: "false" + - default: "false" + edit: true + envKey: REQUIRE_SIGNIN_VIEW + labelZh: 强制登录 + labelEn: Require Signin + required: true + type: select + values: + - label: 开启 + value: "true" + - label: 关闭 + value: "false" + - default: "false" + edit: true + envKey: INSTALL_LOCK + labelZh: 禁止访问安装页面 + labelEn: Disable Access to Install Page + required: true + type: select + values: + - label: 开启 + value: "true" + - label: 关闭 + value: "false" + - default: "" + edit: true + envKey: SECRET_KEY + labelZh: 全局加密密钥 + labelEn: Global Secret Key + required: false + type: text + - default: "false" + edit: true + envKey: PROXY_ENABLED + labelZh: 启用代理 (全局 + Webhook) + labelEn: Enable Proxy (Global + Webhook) + required: true + type: select + values: + - label: 开启 + value: "true" + - label: 关闭 + value: "false" + - default: "" + edit: true + envKey: PROXY_URL + labelZh: 代理服务器地址 (全局 + Webhook) + labelEn: Proxy Server URL (Global + Webhook) + required: false + type: text + - default: "**" + edit: true + envKey: PROXY_HOSTS + labelZh: 代理网址 (全局 + Webhook) + labelEn: Proxy Hosts (Global + Webhook) + required: false + type: text + - default: "false" + edit: true + envKey: MAILER_ENABLED + labelZh: 启用邮件服务 + labelEn: Enable Mailer Service + required: true + type: select + values: + - label: 开启 + value: "true" + - label: 关闭 + value: "false" + - default: "" + edit: true + envKey: MAILER_SMTP_ADDR + labelZh: 邮件服务器地址 + labelEn: Mailer Server Address + required: false + type: text + - default: 465 + edit: true + envKey: MAILER_SMTP_PORT + labelZh: 邮件服务器端口 + labelEn: Mailer Server Port + required: false + type: number + - default: "" + edit: true + envKey: MAILER_USER + labelZh: 邮件服务用户名 + labelEn: Mailer Username + required: false + type: text + - default: "" + edit: true + envKey: MAILER_PASSWD + labelZh: 邮件服务密码 + labelEn: Mailer Password + required: false + type: text + - default: "" + edit: true + envKey: MAILER_FROM + labelZh: 邮件服务发件人 + labelEn: Mailer From + required: false + type: text + - default: "[Gitea]" + edit: true + envKey: MAILER_SUBJECT_PREFIX + labelZh: 邮件服务主题前缀 + labelEn: Mailer Subject Prefix + required: false + type: text diff --git a/appstore/gitea/1.22.4/docker-compose.yml b/appstore/gitea/1.22.4/docker-compose.yml new file mode 100644 index 000000000..c9a739519 --- /dev/null +++ b/appstore/gitea/1.22.4/docker-compose.yml @@ -0,0 +1,43 @@ +networks: + 1panel-network: + external: true +services: + gitea: + container_name: gitea + env_file: + - ./envs/global.env + - ./envs/gitea.env + - .env + environment: + - USER_UID=1000 + - USER_GID=1000 + - DISABLE_SSH=false + - GITEA__api__ENABLE_SWAGGER=false + - DB_HOST=${DB_HOSTNAME}:${DB_PORT} + - GITEA__mailer__ENABLED=${MAILER_ENABLED} + - GITEA__mailer__SMTP_ADDR=${MAILER_SMTP_ADDR} + - GITEA__mailer__SMTP_PORT=${MAILER_SMTP_PORT} + - GITEA__mailer__USER=${MAILER_USER} + - GITEA__mailer__PASSWD=${MAILER_PASSWD} + - GITEA__mailer__FROM=${MAILER_FROM} + - GITEA__mailer__SUBJECT_PREFIX=${MAILER_SUBJECT_PREFIX} + - GITEA__proxy__PROXY_ENABLED=${PROXY_ENABLED} + - GITEA__proxy__PROXY_URL=${PROXY_URL} + - GITEA__proxy__PROXY_HOSTS=${PROXY_HOSTS} + - GITEA__webhook__PROXY_URL=${PROXY_URL} + - GITEA__webhook__PROXY_HOSTS=${PROXY_HOSTS} + - GITEA__git.config__http.proxy=${PROXY_URL} + - GITEA__git.config__https.proxy=${PROXY_URL} + image: gitea/gitea:1.22.4 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3000 + - ${PANEL_APP_PORT_SSH}:22 + restart: always + volumes: + - ${GITEA_ROOT_PATH}/data:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro diff --git a/appstore/gitea/1.22.4/envs/default.env b/appstore/gitea/1.22.4/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/gitea/1.22.4/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/gitea/1.22.4/envs/gitea.env b/appstore/gitea/1.22.4/envs/gitea.env new file mode 100644 index 000000000..1ead19442 --- /dev/null +++ b/appstore/gitea/1.22.4/envs/gitea.env @@ -0,0 +1,36 @@ +USER_UID=1000 +USER_GID=1000 +APP_NAME="Gitea" +RUN_MODE=prod +DOMAIN=localhost +SSH_DOMAIN=localhost +SSH_PORT=22 +SSH_LISTEN_PORT=22 +DISABLE_SSH=false +HTTP_PORT=3000 +ROOT_URL="" +LFS_START_SERVER=true +DB_TYPE=sqlite3 +DB_HOST="" +DB_NAME="" +DB_USER="" +DB_PASSWD="" +INSTALL_LOCK=false +SECRET_KEY="" +DISABLE_REGISTRATION=false +REQUIRE_SIGNIN_VIEW=false +GITEA__time__DEFAULT_UI_LOCATION=Asia/Shanghai +GITEA__migrations__ALLOW_LOCALNETWORKS=true +GITEA__api__ENABLE_SWAGGER=false +GITEA__ui.meta__AUTHOR=新疆萌森软件开发工作室 +GITEA__ui.meta__DESCRIPTION=轻量级代码托管解决方案,支持自建和托管服务。 +GITEA__ui.meta__KEYWORDS=git,gitea,github,gitlab,gitee,code +GITEA__security__LOGIN_REMEMBER_DAYS=3 +GITEA__server__LOCAL_ROOT_URL=http://localhost:3000/ +GITEA__webhook__ALLOWED_HOST_LIST=* +GITEA__picture__REPOSITORY_AVATAR_FALLBACK=random +GITEA__attachment__MAX_SIZE=1024 +GITEA__git__MAX_GIT_DIFF_LINES=10000 +GITEA__git.config__http.postBuffer=2147483648 +GITEA__git.config__core.compression=0 +GITEA__other__SHOW_FOOTER_POWERED_BY=false diff --git a/appstore/gitea/1.22.4/envs/global.env b/appstore/gitea/1.22.4/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/gitea/1.22.4/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/gitea/1.22.4/scripts/init.sh b/appstore/gitea/1.22.4/scripts/init.sh new file mode 100644 index 000000000..636a62139 --- /dev/null +++ b/appstore/gitea/1.22.4/scripts/init.sh @@ -0,0 +1,19 @@ +#!/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 + sed -i '/^APP_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + echo "APP_ENV_FILE=${CURRENT_DIR}/envs/gitea.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/gitea/1.22.4/scripts/uninstall.sh b/appstore/gitea/1.22.4/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/gitea/1.22.4/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/gitea/1.22.4/scripts/upgrade.sh b/appstore/gitea/1.22.4/scripts/upgrade.sh new file mode 100644 index 000000000..636a62139 --- /dev/null +++ b/appstore/gitea/1.22.4/scripts/upgrade.sh @@ -0,0 +1,19 @@ +#!/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 + sed -i '/^APP_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + echo "APP_ENV_FILE=${CURRENT_DIR}/envs/gitea.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/gitea/README.md b/appstore/gitea/README.md new file mode 100644 index 000000000..69e314387 --- /dev/null +++ b/appstore/gitea/README.md @@ -0,0 +1,152 @@ +# Gitea + +Gitea 是一个轻量级的 DevOps 平台软件。 + +![Gitea](https://file.lifebus.top/imgs/gitea_cover_show.png) + +Gitea 是一个轻量级的 DevOps 平台软件。从开发计划到产品成型的整个软件生命周期,他都能够高效而轻松的帮助团队和开发者。包括 +Git 托管、代码审查、团队协作、软件包注册和 CI/CD。它与 GitHub、Bitbucket 和 GitLab 等比较类似。 Gitea 最初是从 Gogs +分支而来,几乎所有代码都已更改。 + +![](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) + +## 特性 + ++ 代码托管 + +Gitea⽀持创建和管理仓库、浏览提交历史和代码⽂件、审查和合并代码提交、管理协作者、管理分⽀等。它还⽀持许多常见的Git特性,⽐如标签、Cherry-pick、hook、集成协作⼯具等。 + ++ 轻量级和快速 + +Gitea 的设计目标之一就是轻量级和快速响应。它不像一些大型的代码托管平台那样臃肿,因此在性能方面表现出色,适用于资源有限的服务器环境。由于其轻量级设计,Gitea +在资源消耗方面相对较低,可以在资源有限的环境下运行良好。 + ++ 易于部署和维护 + +轻松地部署在各种服务器上,不需要复杂的配置和依赖。这使得个人开发者或小团队可以方便地设置和管理自己的 Git 服务。 + ++ 安全性 + +Gitea 注重安全性,提供了用户权限管理、访问控制列表等功能,可以确保代码和数据的安全性。 + ++ 代码评审 + +代码评审同时支持 Pull Request workflow 和 AGit workflow。评审⼈可以在线浏览代码,并提交评审意见或问题。 提交者可以接收到评审意见,并在线回 +复或修改代码。代码评审可以帮助用户和企业提⾼代码质量。 + ++ CI/CD + +Gitea Actions⽀持 CI/CD 功能,该功能兼容 GitHub Actions,⽤⼾可以采用熟悉的YAML格式编写workflows,也可以重⽤⼤量的已有的 Actions +插件。Actions 插件支持从任意的 Git 网站中下载。 + +项目管理:Gitea 通过看板和⼯单来跟踪⼀个项⽬的需求,功能和bug。⼯单⽀持分支,标签、⾥程碑、 指派、时间跟踪、到期时间、依赖关系等功能。 + ++ 制品库 + +Gitea支持超过 20 种不同种类的公有或私有软件包管理,包括:Cargo, Chef, Composer, Conan, Conda, Container, Helm, Maven, npm, +NuGet, Pub, PyPI, RubyGems, Vagrant等 + ++ 开源社区支持 + +Gitea 是一个基于 MIT 许可证的开源项目,Gitea 拥有一个活跃的开源社区,能够持续地进行开发和改进,同时也积极接受社区贡献,保持了平台的更新和创新。 + ++ 多语言支持 + +Gitea 提供多种语言界面,适应全球范围内的用户,促进了国际化和本地化。 + +## 安装说明 + +### 代理配置 + +开启 `启用代理` 配置后,同时生效与 `Gitea` 服务和 `Webhook` 服务和 `Git` 服务 + ++ `代理服务器地址` 填写代理服务器地址 + +代理服务器支持协议:`http://` `https://` `socks://` + ++ `代理网址` 代理匹配规则 + +支持使用 `*` 匹配符号 + +使用 `**` 代表所有网址 + +例如需要代理: `Github` `gitlab`, 此项配置不作用于 `Git` 服务 + +```text +github.com,*.github.com,*.gitlab.com +``` + +在 app.ini 配置文件中配置如下: + +```ini +[webhook] +PROXY_URL = http://{host}:{port} +PROXY_HOSTS = github.com,*.github.com,*.gitlab.com +[proxy] +PROXY_ENABLED = true +PROXY_URL = http://{host}:{port} +PROXY_HOSTS = github.com,*.github.com,*.gitlab.com +``` + +### 开启 API 文档 + +默认关闭 `Swagger` 文档,开启后可以查看 `API` 文档 + +首次安装前,编辑`docker-compose.yml`修改环境变量 `GITEA__api__ENABLE_SWAGGER=false` 为 `true` 即可开启文档服务。 + +已安装用户,修改配置文件 `data/gitea/conf/app.ini` 中 `API` 配置项 `ENABLE_SWAGGER` 为 `true` 即可开启文档服务。 + +```ini +[api] +ENABLE_SWAGGER = true +``` + +## 反向代理 + +> Nginx + +```nginx +location / { + proxy_pass http://localhost:3000; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; +} +``` + +## 常见问题 + +> 安装后,修改配置文件后,重启服务,但是配置文件没有生效? + +安装后如需修改配置,请修改 持久化目录 下的 `data/gitea/conf/app.ini` 文件,然后重启服务。 + +> 迁移 大仓库时,提示 `fatal: early EOF`? + +请修改 `data/gitea/home/.gitconfig` 文件,然后重启服务。 + +```gitconfig +[http] + version = HTTP/1.1 + lowSpeedLimit = 0 + lowSpeedTime = 999999 + postbuffer = 2147483648 +[core] + compression = 0 +``` + +配置说明: + ++ 使用 HTTP/1.1 协议 `http.version = HTTP/1.1` + ++ 限制速度 `http.lowSpeedLimit = 0` + ++ 限制时间 `http.lowSpeedTime = 999999` + ++ 提交缓冲区大小 `http.postbuffer = 2147483648` + ++ 关闭压缩 `core.compression = 0` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/gitea/data.yml b/appstore/gitea/data.yml new file mode 100644 index 000000000..d06c80110 --- /dev/null +++ b/appstore/gitea/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: gitea + name: Gitea + tags: + - WebSite + - DevOps + - Storage + - Local + shortDescZh: 新一代的代码托管平台 + shortDescEn: The next generation of code hosting platform + type: website + crossVersionUpdate: true + limit: 0 + website: https://gitea.io/ + github: https://github.com/go-gitea/gitea/ + document: https://docs.gitea.io/ diff --git a/appstore/gitea/logo.png b/appstore/gitea/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..82732ec61f1b57dc98bb0b2deaf31767c015784c GIT binary patch literal 8022 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 AasU7T literal 0 HcmV?d00001 diff --git a/appstore/halo/2.20.10/.env b/appstore/halo/2.20.10/.env new file mode 100644 index 000000000..5efbf9794 --- /dev/null +++ b/appstore/halo/2.20.10/.env @@ -0,0 +1,33 @@ +# 数据库服务 (前置检查) [必填] +PANEL_DB_TYPE=postgresql + +# 数据持久化路径 [必填] +HALO_ROOT_PATH=/home/halo + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=8090 + +# 公网访问地址 [必填] +HALO_EXTERNAL_URL=http://127.0.0.1:8090 + +# 保持登录时间 [必填] +HALO_REMEMBER_ME_TOKEN_VALIDITY=14d + +# 数据库 类型 [必填] +DB_TYPE=postgresql + +# 数据库 主机地址 [必填] +DB_HOSTNAME=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 名称 [必填] +DB_NAME=halo + +# 数据库 用户名 [必填] +DB_USER=halo + +# 数据库 密码 [必填] +DB_USER_PASSWORD= + diff --git a/appstore/halo/2.20.10/data.yml b/appstore/halo/2.20.10/data.yml new file mode 100644 index 000000000..48935be5b --- /dev/null +++ b/appstore/halo/2.20.10/data.yml @@ -0,0 +1,103 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_DB_HOST + required: true + type: service + default: postgresql + envKey: PANEL_DB_TYPE + labelZh: 数据库服务 (前置检查) + labelEn: Database Service + required: true + type: apps + values: + - label: PostgreSQL + value: postgresql + - label: MySQL + value: mysql + - label: MariaDB + value: mariadb + - label: Percona + value: percona + - default: "/home/halo" + edit: true + envKey: HALO_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8090 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 访问端口 + labelEn: Port + required: true + rule: paramPort + type: number + - default: "http://127.0.0.1:8090" + edit: true + envKey: HALO_EXTERNAL_URL + labelZh: 公网访问地址 + labelEn: External URL + required: true + rule: paramExtUrl + type: text + - default: "14d" + edit: true + envKey: HALO_REMEMBER_ME_TOKEN_VALIDITY + labelZh: 保持登录时间 + labelEn: Remember me token validity + required: true + type: text + - default: "postgresql" + edit: true + envKey: DB_TYPE + labelZh: 数据库 类型 + labelEn: Database Type + required: true + type: select + values: + - label: PostgreSQL + value: postgresql + - label: MySQL (MariaDB, Percona) + value: mysql + - 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: "halo" + edit: true + envKey: DB_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + rule: paramCommon + type: text + - default: "halo" + edit: true + envKey: DB_USER + labelZh: 数据库 用户名 + labelEn: Database Username + required: true + type: text + - default: "" + edit: true + envKey: DB_USER_PASSWORD + labelZh: 数据库 密码 + labelEn: Database Password + random: true + required: true + rule: paramComplexity + type: password diff --git a/appstore/halo/2.20.10/docker-compose.yml b/appstore/halo/2.20.10/docker-compose.yml new file mode 100644 index 000000000..7cb295443 --- /dev/null +++ b/appstore/halo/2.20.10/docker-compose.yml @@ -0,0 +1,23 @@ +networks: + 1panel-network: + external: true +services: + halo: + command: + - --spring.r2dbc.url=r2dbc:pool:${DB_TYPE}://${DB_HOSTNAME}:${DB_PORT}/${DB_NAME} + - --spring.r2dbc.username=${DB_USER} + - --spring.r2dbc.password=${DB_USER_PASSWORD} + - --spring.sql.init.platform=${DB_TYPE} + - --halo.external-url=${HALO_EXTERNAL_URL} + - --halo.security.remember-me.token-validity=${HALO_REMEMBER_ME_TOKEN_VALIDITY} + container_name: halo + image: halohub/halo:2.20.10 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8090 + restart: always + volumes: + - ${HALO_ROOT_PATH}/data:/root/.halo2 diff --git a/appstore/halo/2.20.10/envs/default.env b/appstore/halo/2.20.10/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/halo/2.20.10/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/halo/2.20.10/envs/global.env b/appstore/halo/2.20.10/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/halo/2.20.10/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/halo/2.20.10/scripts/init.sh b/appstore/halo/2.20.10/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/halo/2.20.10/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/halo/2.20.10/scripts/uninstall.sh b/appstore/halo/2.20.10/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/halo/2.20.10/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/halo/2.20.10/scripts/upgrade.sh b/appstore/halo/2.20.10/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/halo/2.20.10/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/halo/README.md b/appstore/halo/README.md new file mode 100644 index 000000000..09815e957 --- /dev/null +++ b/appstore/halo/README.md @@ -0,0 +1,79 @@ +# Halo + +**强大易用的开源建站工具。** + +配合上丰富的模板与插件,帮助你构建你心中的理想站点。 + +![Halo](https://file.lifebus.top/imgs/halo_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) + +## 简介 + +> ### 可插拔架构 + +Halo 采用可插拔架构,功能模块之间耦合度低、灵活性提高。支持用户按需安装、卸载插件,操作便捷。同时提供插件开发接口以确保较高扩展性和可维护性。 + +✅ 支持在运行时安装和卸载插件 + +✅ 更加方便地集成三方平台 + +✅ 统一的可配置设置表单 + +✅ 支持自定义模型,自动生成 RESTful API + + +> ### 功能丰富的主题机制 + +Halo 提供完整的主题模板机制,用于构建前台界面。这意味着用户可以根据自己的喜好选择不同类型的主题模板来定制化自己的站点外观。 + +✅ 动态切换主题模板 + +✅ 支持实时编辑和预览效果 + +✅ 多语言支持 + +✅ 与插件配合实现更多功能 + +> ### 编辑器 + +Halo 的富文本编辑器提供了方便丰富的功能,包括添加标题、段落、引用、列表、代码块等元素,并支持设置样式属性、上传图片、插入视频等功能。这些工具让你的文章创作更加便捷和生动。 + +✅ 完备的富文本格式支持 + +✅ 支持拖拽和粘贴图片上传 + +✅ 支持通过插件扩展编辑器 + +> 更多特性 +> +> 我们将不断探索和追求更好的使用体验,持续迭代出更加优秀的 Halo + ++ 代码开源 + +Halo 的项目代码开源在 GitHub 上且处于积极维护状态,截止目前已经发布了 109 个版本。你也可以在上面提交你的问题或者参与代码贡献。 + ++ 易于部署 + +推荐使用 Docker 的方式部署 Halo,便于升级,同时避免了各种环境依赖的问题。统一管理在工作目录中的应用数据也能方便地进行备份和迁移。 + ++ 插件机制 + +支持在插件运行时为系统添加新功能,同时保持 Halo 自身的简洁轻量。这种灵活的插件机制让用户根据自身需求自由扩展 Halo +的功能,帮助用户实现富有想象力的站点。 + ++ 模板机制 + +支持自定义配置、主题预览、多语言等功能。这种灵活的模板系统让用户可以针对自己的需求进行自定义配置,为网站带来更加个性化的外观和交互体验。 + ++ 附件管理 + +支持多种存储策略,并支持通过插件扩展外部存储位置,可以让用户更加灵活地地上传、查看和管理附件。 + ++ 搜索引擎 + +内置全文搜索引擎,支持关键字搜索文章和页面内容。同时支持通过插件扩展外部搜索引擎,做到让用户按需选择、自由扩展。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/halo/data.yml b/appstore/halo/data.yml new file mode 100644 index 000000000..723e1426e --- /dev/null +++ b/appstore/halo/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: halo + name: Halo + tags: + - WebSite + - Local + shortDescZh: 强大易用的开源建站工具 + shortDescEn: Powerful and easy-to-use open source website builder + type: website + crossVersionUpdate: true + limit: 0 + website: https://halo.run/ + github: https://github.com/halo-dev/halo/ + document: https://docs.halo.run/ diff --git a/appstore/halo/logo.png b/appstore/halo/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..044ab59627b184d9d64bcba1e9f3f01c5a7e47f4 GIT binary patch literal 7545 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 P00000NkvXXu0mjff#(Al literal 0 HcmV?d00001 diff --git a/appstore/iframely/2.4.3/.env b/appstore/iframely/2.4.3/.env new file mode 100644 index 000000000..7ca4173f9 --- /dev/null +++ b/appstore/iframely/2.4.3/.env @@ -0,0 +1,9 @@ +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8061 + +# HTTP 代理 +HTTP_PROXY= + +# 最大重定向次数 +MAX_REDIRECTS=4 + diff --git a/appstore/iframely/2.4.3/config/config.local.js b/appstore/iframely/2.4.3/config/config.local.js new file mode 100644 index 000000000..cc3ff0c0c --- /dev/null +++ b/appstore/iframely/2.4.3/config/config.local.js @@ -0,0 +1,231 @@ +import {fileURLToPath} from 'url'; +import {dirname} from 'path'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +export default { + DEBUG: false, + RICH_LOG_ENABLED: false, + baseAppUrl: process.env.BASE_APP_URL || "http://localhost:8061", + relativeStaticUrl: "/r", + SKIP_IFRAMELY_RENDERS: true, + GROUP_LINKS: true, + MAX_REDIRECTS: parseInt(process.env.MAX_REDIRECTS, 10) || 4, + SKIP_OEMBED_RE_LIST: [ + // /^https?:\/\/yourdomain\.com\//, + ], + + /* + GENERATE_LINK_PARAMS: { + disableSizeWrapper: true + }, + */ + + port: 8061, + host: '0.0.0.0', + + /* + ssl: { + key: ssl_key, + cert: ssl_cert, + port: 443 + }, + */ + + CACHE_ENGINE: 'node-cache', + CACHE_TTL: 0, + + /* + allowedOrigins: [ + "*", + "http://another_domain.com" + ], + */ + + RESPONSE_TIMEOUT: 5 * 1000, + + ADD_OEMBED_PARAMS: [{ + re: [ + /^https:\/\/graph\.facebook\.com\/v[0-9\.]+\/instagram_oembed/i + ], + params: { + // TODO: get your access Insagtam token as described + // use `{app-id}|{app secret}` as access token + // on https://developers.facebook.com/docs/instagram/oembed/ + access_token: '', + hidecaption: true + } + }, { + re: [/^https:\/\/graph\.facebook\.com\/v[0-9\.]+\/oembed_page/i], + params: { + // TODO: get your access token as described + // use `{app-id}|{app secret}` as access token + // on https://developers.facebook.com/docs/plugins/oembed + access_token: '', + show_posts: 0, + show_facepile: 0, + maxwidth: 600 + } + }, { + // match i=user or i=moment or i=timeline to configure these types invidually + // see params spec at https://dev.twitter.com/web/embedded-timelines/oembed + re: [/^https?:\/\/publish\.twitter\.com\/oembed\?i=user/i], + params: { + limit: 1, + maxwidth: 600 + } + }, { + // Facebook https://developers.facebook.com/docs/plugins/oembed/ + re: [/^https:\/\/graph\.facebook\.com\/v[0-9\.]+\/oembed_/i], + params: { + // TODO: get your access token as described + // use `{app-id}|{app secret}` as access token + // on https://developers.facebook.com/docs/plugins/oembed + access_token: '', + // Add any other optional params, like skip script tag and fb-root div + // omitscript: true + } + }], + + /* + PROXY: [{ + re: [/^https?:\/\/www\.domain\.com/], + + // Either `proxy`, or `proxy_url`, or none. + proxy: true, // Will fetch URL via echo service configured as PROXY_URL. See below. + // proxy_url: 'http://1.2.3.4:8080?url={url}', // Will fetch URL via this exact echo service, see below. + + user_agent: 'CHANGE YOUR AGENT', + headers: { + // HTTP headers + // Overrides previous params if overlapped. + }, + cache_ttl: 3600 // in seconds, cache response for 1 hour. + }], + + // Proxy now requires an echo service endpoint. + // See #354 and example code at + // https://gist.github.com/nleush/7916ee89f7b8d6f0cd478d7335702139 + PROXY_URL: 'http://1.2.3.4:8080?url={url}', // Iframely will add `?url=...` to this endpoint + */ + + providerOptions: { + locale: "en_US", + "twitter": { + "max-width": 550, + "min-width": 250, + hide_media: false, + hide_thread: false, + omit_script: false, + center: false, + // dnt: true, + cache_ttl: 100 * 365 * 24 * 3600 + }, + readability: { + enabled: false + // to enable description fallback to first paragraph + // allowPTagDescription: true + }, + images: { + loadSize: false, + checkFavicon: false + }, + tumblr: { + consumer_key: "INSERT YOUR VALUE" + // disables status embeds for images and videos - will return plain media + // media_only: true + }, + google: { + // https://developers.google.com/maps/documentation/embed/guide#api_key + maps_key: "INSERT YOUR VALUE" + }, + + /* + // Optional Camo Proxy to wrap all images: https://github.com/atmos/camo + camoProxy: { + camo_proxy_key: "INSERT YOUR VALUE", + camo_proxy_host: "INSERT YOUR VALUE" + // ssl_only: true // will only proxy non-ssl images + }, + */ + + youtube: { + // api_key: "INSERT YOUR VALUE", + // parts: [ "snippet", "player" ], + get_params: "?rel=0&showinfo=1", + fix_shorts_in_eu: true + }, + vimeo: { + get_params: "?byline=0&badge=0" + }, + soundcloud: { + old_player: true + }, + giphy: { + media_only: true + }, + bandcamp: { + get_params: '/size=large/bgcol=333333/linkcol=ffffff/artwork=small/transparent=true/', + media: { + album: { + height: 472, + 'max-width': 700 + }, + track: { + height: 120, + 'max-width': 700 + } + } + }, + // Docs: https://dev.twitch.tv/docs/embed/video-and-clips + /* + twitch: { + parent: 'jsbin.com, null.jsbin.com, localhost' + }, + */ + }, + + + /* + WHITELIST_WILDCARD: { + "twitter": { + "player": "allow", + "photo": "deny" + }, + "oembed": { + "video": "allow", + "photo": "allow", + "rich": "deny", + "link": "deny" + }, + "og": { + "video": ["allow", "ssl", "responsive"] + }, + "iframely": { + "survey": "allow", + "reader": "allow", + "player": "allow", + "image": "allow" + }, + "html-meta": { + "video": ["allow", "responsive"], + "promo": "allow" + } + } + */ + + IGNORE_DOMAINS_RE: [ + /^https?:\/\/127\.0\.0\.1/i, + /^https?:\/\/localhost/i, + /^https?:\/\/[^\/]+:\d+\/?/, + + // And this is AWS metadata service + // https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html + /^https?:\/\/169\.254\.169\.254/ + ], + + // Endpoint for prerender service, if you need it. Used to parse React apps. Very slow. + // Tested with https://github.com/prerender/prerender + // PRERENDER_URL: "https://domain/render?url=" +}; diff --git a/appstore/iframely/2.4.3/data.yml b/appstore/iframely/2.4.3/data.yml new file mode 100644 index 000000000..0e70fadc4 --- /dev/null +++ b/appstore/iframely/2.4.3/data.yml @@ -0,0 +1,24 @@ +additionalProperties: + formFields: + - default: 8061 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: HTTP_PROXY + labelZh: HTTP 代理 + labelEn: HTTP Proxy + required: false + type: text + - default: 4 + edit: true + envKey: MAX_REDIRECTS + labelZh: 最大重定向次数 + labelEn: Max Redirects + required: false + type: number diff --git a/appstore/iframely/2.4.3/docker-compose.yml b/appstore/iframely/2.4.3/docker-compose.yml new file mode 100644 index 000000000..fab14675b --- /dev/null +++ b/appstore/iframely/2.4.3/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + iframely: + container_name: iframely + env_file: + - ./envs/global.env + - .env + environment: + - NODE_ENV=production + - PORT=8061 + - HOST=0.0.0.0 + - HTTPS_PROXY=${HTTP_PROXY} + image: qyg2297248353/iframely:v2.4.3 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8061 + restart: always + volumes: + - ./config/config.local.js:/iframely/config.local.js diff --git a/appstore/iframely/2.4.3/envs/default.env b/appstore/iframely/2.4.3/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/iframely/2.4.3/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/iframely/2.4.3/envs/global.env b/appstore/iframely/2.4.3/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/iframely/2.4.3/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/iframely/2.4.3/scripts/init.sh b/appstore/iframely/2.4.3/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/iframely/2.4.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/iframely/2.4.3/scripts/uninstall.sh b/appstore/iframely/2.4.3/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/iframely/2.4.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/iframely/2.4.3/scripts/upgrade.sh b/appstore/iframely/2.4.3/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/iframely/2.4.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/iframely/README.md b/appstore/iframely/README.md new file mode 100644 index 000000000..5c1c5a7f4 --- /dev/null +++ b/appstore/iframely/README.md @@ -0,0 +1,80 @@ +# Iframely + +当今互联网的富媒体平台 + + + +iframely 是针对所有各种富媒体嵌入和 URL 数据的统一交付服务。 + +![](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) + +## 特点 + +🚀 最佳富媒体 + +iframely 了解来自 1900 多家出版商的富媒体,并且还在不断增加。视频、音频、应用程序、照片和图像、幻灯片、播放列表、播客、地图、3D、表格、文档、谜题、测验、图表和信息图表。您会自动获得所有新的发布商。 + +## 安装说明 + +由于 `api_key` 属于 Iframely云托管服务,使用自托管服务,将无法配置 `api_key`,保障接口的安全性。 + +> API 端点: '/oembed' and '/iframely' +> +> Debugger UI: '/debug' + +### 其他配置 + +自行修改 `config/config.local.js` 配置文件,重启生效 + +## API 说明 + +### 请求示例 + +端点:`/oembed` + +```http request +${domain}/oembed?url={URL} +``` + +端点:`/iframely` + +```http request +${domain}/iframely?url={URL} +``` + +### 响应示例 + +> 官方 + +```json +{ + "url": "https://vimeo.com/141567420", + "type": "video", + "version": "1.0", + "title": "Input/Output", + "description": "A new short from Terri Timely and Park Pictures", + "author": "Terri Timely", + "author_url": "https://vimeo.com/user1946955", + "provider_name": "Vimeo", + "thumbnail_url": "https://i.vimeocdn.com/…5aebf015a6472-d_295x166", + "thumbnail_width": 295, + "thumbnail_height": 166, + "html": "
" +} +``` + +> 百度一下 + +```json +{ + "type": "link", + "version": "1.0", + "title": "百度一下,你就知道", + "url": "http://www.baidu.com/", + "description": "全球领先的中文搜索引擎、致力于让网民更便捷地获取信息,找到所求。百度超过千亿的中文网页数据库,可以瞬间找到相关的搜索结果。" +} +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/iframely/data.yml b/appstore/iframely/data.yml new file mode 100644 index 000000000..16ed55ede --- /dev/null +++ b/appstore/iframely/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: iframely + name: Iframely + tags: + - Tool + - Middleware + - Local + shortDescZh: 响应式 Web 嵌入和 URL 元的 Iframely API + shortDescEn: Responsive Web Embeds and URL Meta with Iframely API + type: tool + crossVersionUpdate: true + limit: 0 + website: https://iframely.com/ + github: https://github.com/itteco/iframely/ + document: https://iframely.com/docs/ diff --git a/appstore/iframely/logo.png b/appstore/iframely/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b392f442a67eb46ffd3cb9bc8f06def4268fbed4 GIT binary patch literal 14374 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 D6U+6+ literal 0 HcmV?d00001 diff --git a/appstore/immich-machine-learning/1.121.0/.env b/appstore/immich-machine-learning/1.121.0/.env new file mode 100644 index 000000000..91116ad60 --- /dev/null +++ b/appstore/immich-machine-learning/1.121.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.121.0/data.yml b/appstore/immich-machine-learning/1.121.0/data.yml new file mode 100644 index 000000000..7321cde6d --- /dev/null +++ b/appstore/immich-machine-learning/1.121.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.121.0/docker-compose.yml b/appstore/immich-machine-learning/1.121.0/docker-compose.yml new file mode 100644 index 000000000..1753adb03 --- /dev/null +++ b/appstore/immich-machine-learning/1.121.0/docker-compose.yml @@ -0,0 +1,24 @@ +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 + healthcheck: + disable: false + image: ghcr.io/immich-app/immich-machine-learning:v1.121.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.121.0/envs/default.env b/appstore/immich-machine-learning/1.121.0/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/immich-machine-learning/1.121.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/immich-machine-learning/1.121.0/envs/global.env b/appstore/immich-machine-learning/1.121.0/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/immich-machine-learning/1.121.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/immich-machine-learning/1.121.0/scripts/init.sh b/appstore/immich-machine-learning/1.121.0/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/immich-machine-learning/1.121.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.121.0/scripts/uninstall.sh b/appstore/immich-machine-learning/1.121.0/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/immich-machine-learning/1.121.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.121.0/scripts/upgrade.sh b/appstore/immich-machine-learning/1.121.0/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/immich-machine-learning/1.121.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-machine-learning/README.md b/appstore/immich-machine-learning/README.md new file mode 100644 index 000000000..1b825c13e --- /dev/null +++ b/appstore/immich-machine-learning/README.md @@ -0,0 +1,123 @@ +# Immich (机器学习模块) + +Immich - 高性能自托管照片和视频备份解决方案 + +![Immich](https://file.lifebus.top/imgs/immich_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) + +## 简介 + +欢迎您 +您好,很高兴您能来到这里。 + +我叫亚历克斯。我在学校时是一名电气工程师,后来因为工作和对解决问题的纯粹热爱而成为了一名软件工程师。 + +我们和新生儿躺在床上,我妻子说:"我们开始积累大量宝宝的照片和视频,我不想再为 App-Which-Must-Not-Be-Name +付费了。你总是想为我建一些东西,为什么不为我建一个能做到这一点的应用程序呢? + +就这样,这个想法开始在我脑海中萌生。之后,我开始在自助托管领域寻找具有类似备份功能和 "非命名应用程序 " +性能水平的现有解决方案。我发现目前的解决方案主要集中在画廊类型的应用程序上。然而,我想要的是一个简单易用的备份工具,并带有一个能高效查看照片和视频的本地移动应用程序。于是,我作为一名如饥似渴的工程师踏上了寻找之旅。 + +另一个促使我执行 "不可名状的应用程序 "替代方案的动机是,我希望能为开源社区做出贡献,多年来我从这个社区中受益匪浅。 + +我很荣幸能与大家分享这一作品,它重视隐私、回忆,以及在易用、友好的界面中回顾这些时刻的喜悦。 + +如果您喜欢这款应用程序,或者它在某些方面对您有帮助,请考虑支持这个项目。这将有助于我继续开发和维护应用程序。 + +## 环境准备 + ++ `Redis` 服务 + +Immich 使用 Redis 作为缓存服务,所以需要安装 Redis 服务。 + +### 硬件驱动挂载 + +默认仅挂载: `/dev/dri`,如果您的设备不存在硬件驱动,请使用删除完整 `devices` 配置。 + +可以通过 `ls /dev/` 查看存在的设备驱动。 + +```yml +devices: + - /dev/dri:/dev/dri + # - /dev/nvidia0:/dev/nvidia0 + # - /dev/nvidiactl:/dev/nvidiactl + # - /dev/nvidia-modeset:/dev/nvidia-modeset + # - /dev/nvidia-nvswitchctl:/dev/nvidia-nvswitchctl + # - /dev/nvidia-uvm:/dev/nvidia-uvm + # - /dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools + # - /dev/video11:/dev/video11 +``` + +如果您的设备存在其他硬件驱动,可以选择挂载。删除 `# ` 号即可。格式为:`宿主机路径:容器路径`。 + +格式请与 `- /dev/dri:/dev/dri` 保持一致。 + +## 升级说明 + ++ **大版本** `v1.106.2` + +`2024/06/12` 上线,升级需要注意: + +1. 移除 `immich-microservices` 服务 +2. 环境变量发生了合并 +3. 底层API发生了变化 + 4. 移动端需要同步更新 + +## 安装说明 + +### 机器学习 预加载模型(CLIP) + +可选模型列表,粘贴时输入 `immich-app/` 之后的内容即可。 + +[immich-app's Collections - CLIP](https://huggingface.co/collections/immich-app/clip-654eaefb077425890874cd07) + +[immich-app's Collections - Multilingual CLIP](https://huggingface.co/collections/immich-app/multilingual-clip-654eb08c2382f591eeb8c2a7) + +默认模型 + +中文支持较好的模型 `XLM-Roberta-Large-Vit-B-16Plus` + +### 人脸识别 预加载模型 + +`buffalo_l`, `buffalo_m`, `buffalo_s`, `antelopev2` + +## 常见问题 + ++ 安装失败 + + 网络问题,可以尝试使用代理 ++ 升级失败 + + 请查看升级说明 + + 请查看日志,查看具体错误信息 + + 记录安装参数,进行卸载重装 + + 升级1Panel后,提示容器找不到 + + 请删除容器,重新安装 + + 提示文件或目录不存在 + + 可手动创建不存在的文件和目录,然后重试 + + 创建的文件可为空文件 + + 每次都升级失败 + + 很抱歉,官方应用不支持编排式应用(一个应用包含多个容器)的安装与升级,您可以尝试手动卸载安装最新版 ++ 无法访问 + + 请检查是否安装了 `Redis` 服务 + + 请检查是否正确配置了 `Redis` 服务 + + 请检查是否正确配置了 `域名` 和 `SSL` + + 请检查是否正确配置了 `端口` + + 请检查是否正确配置了 `防火墙` 并开放了 `端口` + + 请检查是否正确配置了 `Nginx` 服务 + +## 移动端应用 + +
+ +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/immich-machine-learning/data.yml b/appstore/immich-machine-learning/data.yml new file mode 100644 index 000000000..0a798c8f8 --- /dev/null +++ b/appstore/immich-machine-learning/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: immich-machine-learning + name: Immich 机器学习模块 + tags: + - AI + - Local + shortDescZh: 高性能自托管照片和视频备份解决方案 + shortDescEn: High performance self-hosted photo and video backup solution + type: tool + crossVersionUpdate: true + limit: 0 + website: https://immich.app/ + github: https://github.com/immich-app/immich + document: https://immich.app/docs/overview/introduction diff --git a/appstore/immich-machine-learning/logo.png b/appstore/immich-machine-learning/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..081f92e449f3b4543123718778c1c69d42391d33 GIT binary patch literal 14868 zcmeIZRX~*87dI*)pnx<82qGyRLrP0`cMLf+NK1=Khte~obm!1DNDVPG2uMjcNK2pR z{h!NoeXhRmVlHMsJJw!n?ca*Mc9f>N0{(NV=TDwI!B4fWp-2McI1T!4l@ zc_Ol)BrC1^G4o(4z}a**<@mZm{iLv$CXHA`M#FbuGZtj&+KMFo5b8rHLO=DzVenh( zc^XYAHvRUC51yfDjA%(aG~_bFdDeK0_ueEH%mttR2@pg&nxr17HYv?J_M&aYLpzmv z>uL6dvs9;Dj5vIgOJr+DTT5hy^lijnXk@+n_HKn>{KIc|y+cEr`_biq!v-3(Cr_H> zEYP12J_&vHMCu79Ge9#T^vM%UssGa(rA#I>`>LGGt30C)ySEyFK zg8fu(eUaikJw5OJN4JH*4E7mEIkP6>u^lvfV3e_vIH{9=q3?37_RpjMwF(8?^7r3gGMxeyQ`7f3m=Oz zK3*ovF=etU=X>|XIoXK~RDIug^VoU0u*a%!5Ye;Eeh`L^$$aX3gqw4yS6&IKt>k=I4+_B6IjwhE6d#;onJ=HJ(ktwyppiL@G9CGq9!uZlk6_{mz(3svZ{ znO{RCxS5?2X;pAPD2y5i#^4j6{iPbU)PfX&d)+e`& zg+O9TQl1UTw*1<1-oMk3%u)2GlS+QBMDQeXXc2LP3MLBBcAXt~HKMOOmOb|$7hb`W zSV9acnZ@boo}+jY94@#wb2S3j+^fxIV+Ot`eZzjudtd3xp8vG=Q3?aoh6bc+^J|%G z_|fXvZ1|DIb0dT_;Wmkuz_sLd`1SEkQs+1CCCjp7#AVxF3m}cJeRw3Wbpu3M{KQAP z0NsYghpDEBBwB1jtk5V`*zNmL12OT*ja#M()2TxUwLLtd!ab4p31KoAZGYFHoA1oO zx0n{8Lw2^)6ph_zm8w5s*Tr0qtfOJ6E=P$vacaw~=vCO*E5-lXaa0TX z@A&K@i!lHCHF`gs6<#P2U^J7f)G3Cwa3^E+p56AK8|eKW(Vu)z;P4ZVB&uy%hb^jD zM(G>@I=Qi%Zlx<8SFnD=U4ySjdNw*VQcTI!W4(k8YmO@{!6 zQyz|{7DRkPv3m4kD$(;0iSBcf$;CF>8S<4+{6Qal!$Z`@ZeSyh|BFcbb)TdnAkVqd z?Ftotyn(9W;a5~T4ido9~VtLTq8@EV<@7FOLzlp6V5QYDfGSZI2B zUFC%qtFZ=wZwb9VFs%-uQP%m(@po0ERpS@fwE(%)B$$%)ow79kB; zi_k7F9T-QoH^S#*Br!;}7dY)4TvvhN^Gtd2XXw4rz~5KyP&0bRCE$o%zqg<#*N56& z<4F|}L7(u&z@d>O{~zl@Pae;bQh57EGub2R)VFOwmW(%rX@Y_0ga+_(0F0_kA2L@!80(GbV zR0>RdyZ)dlN-wv2voj*vn)<}e8xs-(<9y9Jw1`x(I%Cpe_oo+frrDa#8C7G~9*?fq zD^5!jDyaMYS6QQUOc%Mq{3!a}x@?_BGAN*i(oMWxt93ZTCJrh_$0o=7$Te&ADW_*> z4b}88>%e=RE5XdoZyg)?Iuzy(-&|*co!y8{AqX1;a*s20OG|d^qg2a zxOACnIH>AkC(>e1_UJ~4hTQmwBwm$`Q7sf0=>CfOxBBl#q?g>ua!e69#(9av)}x&b zVJM9E0nekee71c49hs5aWPys8B;I&_e4`p?$Q~lYb!Z!tf7t>m?CqO*u8WA8@;8*TWL{)iuU*_(7w9h1A9ZP{I>Gj(vP ztD%E}MUiQcyn|=fSjK#M0n!8CK+QMM<9wAOiR!<-N|8e{4qUcUtl33_*SP#Pt#``n zirSUph3qtQTh;~zA(^}K7DcE_y^QFhMt@}5L)q9gt*I$nv#m^f0#ZCDzLH7cjk6W zp4f?)#$;Px8{kpUpA7AP%K9OAwieB;YQ4hFTx8gi^`SGd^2%{}BS7?9)_uPWb-?=F z!RlFx3%~dPw#LSNO*N-vcJ2yq5?bk?Lx52uvp6XsG^(v;J%!VeFZJR_d*~#vRpxyH z4ELZvoo6Y^+b}qWm7pR8^jA^YYI!3r?AEOO+tnu;61H9vc?)KHpV=tRqSUy;+z-(g z5urEEpwT}EPI`tf(~Max5X3qWea7`-zROo zbpbc*4jja<*NREik2ULL&o>H7;Et@r+Nb`Qcq#BF7m)QOFpy&OMRYmmai?^SHwMiV zjZpZ|iXOhE{27-lb}`!7bT+q(D{3xMbDyhLo^fqy20HpT&<1B0hx4V>&llveba(zT zKfU5Iu?)X{lT_Eikt9Q1Sc(v}Ab^*09bE5o>a%}!eUW8dd+2U{#G2x;lg)Vux!R4T z-m^rSC)U~Tj}8ot4c@G7Z`e<++v{OMl2Av&<~br+@h4bcQ`dd*`IZ_3yMZ}Te zzI3T>qLlVS)xP2n()b~_WH$aNisHi_>6dM(u3B%`?$&0v9S$#YTJqe*iXI#FjTWe{25H`NQ%T?CaBUL4b z|6l>*@YJKuWQX|mFt@#x)ch5dB)(iqadgmoc-x(kW^gd;I)v{}>FoJK{VjV+u|s*9 zx(fxhVd6~Yy(^dQ*rYP|d(wN^UP-&biG+V8v7*_aMbzgXEn_K-%F+?Sq8Y?&Q#6v| z)U7|5u%Ai_K_;ueDILrnHqb+$M9?K~D_l!Tc-Z{b?v+pHWIfAHd`=6tQ+DM>JH(iO z{DawD4lHnlr&?RY3Te_g$4ZU~!Dy`ht=nF6HWxhRnAxBzuhsja9gz4uAaTl@N%0UW zKkPKX612JbT%N7?`}%x=og`;7!YO1B=eB-4NMv|)jLSK#hCiJVGSL}hdBN|1KOnV~ z?+^;lg$>s)1}8%MN5P$p*m7Z8xAY6=TB~T1j1cG>&c+W698-l&^K#OMpd;Nl=A&9r zf+v1Q=nzH%KJ&s0JQrt}d21~LkIci&2}au(q{ZR;PEuAi!kEbN&b2`^Q6X1GX7h+0B=Mn1YNep(O9 zw&W5tMe2pU(tob-wF~d(^o#LJE)wMt=gL`;^;DW#{5*~^!G!@y11gv$F%)quO-tYX zh9~WRNWt7sVjTW)D~01%h}=lt13gC4{i*h%b@1C1Ux(GsyzuvMGv8F)@bf%!jWwVIp` zUr`LtSNFTtamvs>e0LS5UHx&WqXd8Qf6lC#M;cSew<Dlm5}(sNl}%};N2T+OB(+n_Y%>Lzsh_0R!oEOJZyqKQ^@qQ#3jh>TUUG7SzA25p}CvzKu%)u@@~n(-k~VC zwBFYc5k(V!8g$mpYe#<`Bcfi%&j#4__rHmtO+Si~&9+sv)cVP9F%{$iVBDtk{WL12 zGRxJVIb0hvYjjf6#^2!+dsu9eyR*%_2a3B%vzuI(qK9OTws3QCyG6Et8QaX(HcG*+ zm7;3q`Te-IeInyG%dsYGSh_~tR>Q%Da2WmgSeJ&sh^`jv%vQ}1j9XQZ?(^>1dp1jf}-hGzNaI8P- zeK)I zgr5pT&{;#V`q2a8CY_rb84X$gf!iox{&ql|R;MDzQh#=8k$iYw(WKkXSDYlmX5%h8n%Tj95Oe=fE3kSc?8w}615Hk% zm8atAAx%hMuO*EMhtB!8E%H)sCM4aB@L$-=a9_>2IXy2N`J>lDfI0*(>uRqXQ}d6? z`iozvgXd0$Gx1dsW2P0U;pU~m^ zEz|s!4-F7RC{xRhdZTv160L%X*7PzLC+?; zi0mw`9~$BWUtJveMoHm{dxpy(lJgk{haGD5 zj?i^710^WmEQy`GcsQ%FPN?^ta%f7t?8m~th~IpxM3qc#LcFD1h3*-!vTnv1uz*ol zWyk}IW#hjGrN_G{Zc?hvoYZt!-~VzJk;H{ki7X;fdKS^MF6-+2{=rXdCus?eum;c1H8dN9GH9<8G>Z&dR-gk0iBp3uy| z2&3tG3Vk}_u(GiLn~*(;n^7EdBio62Th_VX;cBs%1?(k$61-9G2hz~!Fm&n1_8D#7 z>|jqt)LvDsK_eMkhO{aDnuz`Tosb(Vb%lv+;xZbF?*GC_xo(A&fE^*r5Une{iL_X! zg=}oxP!<+kGf$G?VQS)Q4@v+Et!AS|5r&%LS#ya+A`9}PW8tksPWDL%-|MU$>@X~^ zsP*b_ejjm@@C`PezLSvMPenQ@yXo6B_m`#H{W&5Rfox@ZX(P=?iwL&3nBCbs?l!1^ zE~V3T`2Y%2#jB6rr{%foCC`K^+dEr&g>6-qqh*93*&Dx(gpjIN%WZjv#4{h+)%1`T zsCoH^tPNKL2Z`=OOhE);vFTGt_pOkisUF96+4T(&(A=kw%krO#s&8**8Q~04!*1__lIVG}@|}JR-soM{WfCQ1 z?_h-~PTT0t4vrQ?5T&(`@OWPEf3+_yF@gVH^>d&`1n_66R7uaEuyD(g-0PuEC4)B+ zLP>NlCP_lZ`^1JzecP3K_YOo25Fu;G+t8rIv#lzx~%Pl76nD_ zQsZ|7=8~Bo8Q0hf!-6AwDs zEv6kDS>4}nxG#oBY+L?OokiDWllV@YhVgk0>e?@Jjxwk_YeMMh!*Xp?GF?7&3%n0+L;_&ah1yCIuX0kZOYb9~XNM|1#bk zc&sim1*92GY+^&Wf)S@AP>#W^DE7RFxqLjNr0ePR?J{8kc29e!MB6k7f6;HSW!U-T z^lT|Tr%RT$8N%0Yb)L{4&nK1nS?!|$J_!`Xb;hg^3X2g(&C?*~5zg*x?*wjcu5Ow z$GseO?4IDF4*LDxq>t4!GNc|;wBNd9i>B=o1lwW;Aiz<;tl8#S=-T?Mf;v!lTZc zi$DbU*ptN_Q|w^a)Cgi0vtR;ipI&=eam>(0MgkpPZk#Yoqx22EDUa{S3+2M_c1opq zX=rgr0qfdR8S!5{CD+T{sa;DF*O^0e z784|_oM`LP#DU|)+Jd7Bj{h|e>Mgtx2$)8J!)b!A?xW!h(ve~Di|I4%#l(uXjPHI76nx3?S9|2urg(VI@-$ECvY zkYJgNg0})9Qr^y6dfqa@=sHQXQl?x7{+p4o2_N=1Nl?Uk6zw2wB!p5-9e(8LjNL7HQm^3+TRk34b}*zdizg_x?P@(`;vtdE)rc9Kk5+Sq zK%YA0Tu!U_zpNZPp0w`qJq%$y7tpYrwoAz#fG$-<_72W+f866~bLLE~UMXJ0WFEn_ z`Yv@As(r0J_?*ute{+^P-OV~2Mi`)U12t=W$qiPi1Mp~b6F=q3hqnAfeE}wZ#x7jPgDOrHHEQ}K$Wx}`5f!NpT=N9hWUsL`Vf?8M7(D&$Xd6C-AC9|Y}x(8 z_Q*Ay%b}-#lZbp&v3i9)=RZHN?xOXw8icY!+@jb*=bQIReIFh|#4lnHkKk;;%5e1Q z=Fr|DfC~+j4EStg@(cZMvKt)t(P+|13;X;E@+1r(yRK%zmvm0JmR#QD^}D^PLSNDU zC9Eh<$MIeBQA<`W=H?6o{cHUW!9ZwgSM0<%Gixe>tzN=ek2Z9^E<4-beT$mFMb-c1 zJgMi!eqxN@clCa=G)`y7e{xh5^&C0@EW5lm)Aj2j)Di-%jk|E=kZ+SMVjHC{E|+$> z*F)4m^k*%V1l_1&@$3Z5{nk^J4VX~i?2h%OutYh(_R`v5VI5AN80SV*0rsb&!6oeg z*LU~R*H76zS^zItjTOGUk(xBYqf)^dW3EQ10Kz{dm zAT!PKWKWa481RBi?k~HU`Q81hJoqjb!})h-Z>o$x#FF(I4`qDN1hI*|1@esuDg}bM zNk#9NU9tx;G4W_l^BX-bGtoDS7*S z@w$sBF;kOL-5*D3_z+L$RB*WcH}2)2w;KC^Aylt1E(&}fz4!-5iFPB{ht)6JQn?cX zt74c8nSD^m_$7SbV+0^63rF7;CR_zvWd}|CVze~_PZ=ru%9+BQ(*BwD&D%3O`y^7M z=#i(8v=|TZo@DYITmLQm5Rb>6do|qQggx?Vi}`fDbWRn298T-iJ+4$MlPs16AV@df zkl@*uxR_?J1;uP;BVX$3dU>5+*a6FS{7dN|SUjs-=^)jBpGTH@F^hlI{{zPB;6-51 zdFIi_lZz^t4=Ku=r_QYhFe04CGlo_Z`kJZ|lI%V5@H0#Vbr<;uIY9DRV5Wni5s+LSk zc}@NpxEXyPLU~;=2mb8h)EAQ#*M&D2e+?QYzxC_F$0LwrS3?j8#o(Z*#~Xh?(}St| zziL{2w{^}PvX?M`^s{@+p5gepW*nnZtJ~N3F3B=T*Vs;u)oO7$fCMfYpC;CzM5JP7 z&kv{a$t4O^ZQQHNc<1pqYiU^6pb;}>)~DfM43m7O=aiQ=+BJ-FOO4~T+5Wqtd-~tg z@|!BQkcf<#*gt!G9N^f0;^)yWL0@g@Ft<3TWzH6=CEK*sh9BN6W5VXAclK9~!Mr#2 z1)Fz$ow-$_h`N9!0NmrZttfxN$&?7*u!jpOO_*PXFblt*EK@BS8dH|Eq{Q3iaa#xY zdsBG^BpMlu8U>;}1DP*>O%-R;1aD2B>1cJj)w=nfj6R5GjKE&kWSSPa(39R{*4$_m zmbYs)Mrv(Lb*m@mBo#;Gq$wf{j41=4D*q+;2B-T~Ieu{`Ow8t(U8733={b*1(!hQ3 zHdPH~JqNwqm%+|1llh8mxpAi-{TS>{jCJ)?f9+XgZfe&uwqXt{%(mt%K7K&hnTr`L zmFPM$f0>Bbv|{+Y7-mbe&GY50TXHoMkhqFchSlIjbm6U5O(2JWAeOpN+g%YMP?R^~r)+{ZTry^u zI;7uz#@>b?*$jZh`=NN;eoDSy`?nN0ZfwenXtr|#GWdMxpn_rzag*zfhltw|8=lF0 z7T}<%FjZIjzq>+WBya5td5-w0JkT`6M?>+3$&3d1oY!$sSd}k>Y!-PBg=+h&e>&(J z9s#ZZ_Yv6J>D{62*!>mzJuxCIMY~wbd3dxqZI55Z; zd*`uj;8WcO4>{J4x^B1E7iPOZ%C>C@xuN~d*mp|eA(gByL8(iY;2B(;y=^P68vHi9 zo%b&9@oIt*6B4@z($J&Pbk_&F>`DCR^XBjU(P1;0cs|2W>C0qLk4pF%ve>~fJ3P&= zJ62FuvZA_HfEvWSO+3jLFpoW=3UVG=0XI`+uO;U_AGTUK$}?y-eMCpe#k9$nP)IO7 z{5_^Ux^NUcDYZJaCm^c4*VUtmE9zC?z_lHqz%0XE*ST|Vx#S2O9`3KmrFa*lE z2G}_&KHJx9gx>ujwZ)!1D3vyr+2n#Bb`@S$sXh*NsWiI+ZW2Dfx|vBc zSGp}+SMf26OqJaX?aKk_^X2J;{PCAoefWYJ=0}5>V?z2l`56a(HkfK@yNA@;%?DY6 zm+yc7h6@>WddYb;r$Dlrthk52(4YSCmNs7dd01qs1tZs3CQ{fVFqquX(fP+h1{%X7a>O`

T3J|2{ zOWOZg-vb?Wg;TAN zGLM#oZ&z2BsEwbZSd#mXags0Zocm<=K+8#HA>+KORhbqJ1d5apD5d+D;zd1S>V!kP zwol_A{En4OWRKJi4u>kUE zs{B1Agjktgkd7Y1Lyp2O2N&&T;Y3K|ZY#izS%B-uCJ~hN63LJ@>zQMF_OUGY+h)m- z2;3e?GKr0La}s)6{`z(EBR;P>m4nN`o&tB<}PsOM3`cuFUR4hp+tV04)o#Cfjs0oSo% zJWMyG2ee&9`%DR>vrATM9>V7=uq)AWnHi0W9GdX|#E1LzGXsy#7GNjJJGu*xBg4R4 zvOLVcb?(lV`i54HO#Cej#<_m=C>|e>j(XF1!K*odutjl(2PZENKNO4X^UyjMVjh4 zn!vt5N;Y-FxlV!$;^Fk<%U~?&ED)^_KV%mUCKMnOge-AG_*>ZKdpSAIezD9y7-=P> zD;)}@Z33sRDiYTAvSaLd{t9&dr zR=blr40bu})^0R68`U>JA<)a$N?NkX*`6ZHr!(V+TDa8<_~`becOE0IuM>?c7gPgu z57kLHqYWKSTs0+0CAEpkt;EMAY}QKO7{2K`-(+>X zHlf^V@I^fQbpXBN5lD*GM^&sH7nbQ#JRU_@wh}ha)|8bj2VaKdN9bH!5mY~5EIB>| zySbkrRL(6^3+KHo!eKT4LG-(a1L9{q?(aj0((NQ$-{rse6?5|vAp7Sh>kb>2Qt(6 z#Uviz&cH*WZ`u*j==-ePk9cpai}kJA6T%EptmExAdP_`5H!1Fn(X;Hnrq2N0H3~*3S9+mv@@?s zTQCEW5*Z|ob%Mm_wT>(})}NVPpa3aBe`Hr|0-1Bbq;(f3w5fAWi1bLadC-^PHNgkbr<dX3|!}=#eKH{L>O!Ey0iS zfvL7c>?ExE3uS>#yO-o6c+f-h+3nz$j1&sAhB`en1QIwOIStX6SJVgHO62>c9*foceO_V$DE>m$wTazCJqt5|m#3G5G7avEl7l}qb7hm@sHjyM6T zDtU1hq_LDH0)VW1kZLbVHaZg-iycadT`fQF8%}yVw2BA>I-@^d`%6QDfeykFxa5ZS z!3gfRXY}@=kv=?KhemG}1<_N1*+c7)-&vV2t9v?s9p;pj;N(Ub`sJZ`tfegayZ>2^ zlHMn2ivSn#r8Ln#VqGpZ(PX&jAab#LTlH1nTxvD15nr`(d#2xLXo^%oWvbL1xnEr~ zhm+ORL_CfZP__9-UUydD+#?}>0w1ecK+jr^0Sgl%CXC7!U@inSJohTB0s<(JU_ZGO z2hf|jJ-w3P*0}Y7PCcHdCl(`=5(CsJ3>tJg2&WVP*h}z@Y2J_!+BH%FZ%s(c=&9pa z(}Mcqpk4wjd8-)b;{dbi3s4BYYN)9OtalVE@3n2cHM&F|U^<%Y5@}^=fqowlei7vd zyf%rYu5LT{(+|vbKc5I)%5VNv71)*DKntZL(TNB`aX8i(H;y=MkI|?VG6T6^JU?lR z{ywp)prI1^GF$eDF`%@SO()%^Hw+Lo>{KR8%Q23hS2O!zLN_eE$5%xa2L&Y+%l*re zuUf$E47wDomg2=qmzQHh?1cbBo&n1=wa0en;FUKR$Z!sGkz4<*`C7z7)XfLzUgoO^ z?$KBevH4e*4d*Fx@V{^}Zgh~m@~Q>|X74saYdxta+zNV(B4D8J2C4Vfcs;*Vzq1?!9l6+!n^KtuSi%UvTS{3-bKJ{>9ynW zf$T;58y@Se>8~((h>_OwnPr~piZMRc2WcBsQ^Wpegf z_y^ddgAxI>kec~tImQORuuQYv2cZKZdU|$XF=;&j5cTXV4JncY(_2lmr7(9ru*}!e ziJ?elfM7z<7f(;4weFIPnE6O=8Wt0x!cWFiNYO!W;@^TZDQ)vQ{)^dosxQ)PciCfW zR2MzL64I*{?{QFHn*-9+fPs4Y{B{!Obro7Qp*6t06i|>!a{f@R@gf>007g0O?Y5HE z-Pw54(WKyD5y}M0u=Ig(po64S27{`iYxpyyvvRH{^DV*qLN*4}u|Bf)e$2o{(bxas ztKWrEsx7>DERgo={xCCSy=oC#?R z6YzO%t&RhZ!aMDKzm(vomp1!z)e}>uR)dWY%KAgVQj$F>bHuXk0q5S9h*UvI`%9N9 zT2niUj3}E9gp4*{C=3l>{tUx#MZzC|8q=qk5M|+pJ!!poDx0|UDyNN$hd2`E?L2BC zW8}Z)=QozC8T+-GRAk+8G0>I2qBU`o>pdR+`MUVIWcdlJ9<0Qg?Wb4T%LaDk2Gm zX&bkRDH3V={0o4^@$>yKCSUV~zr4i#`CS><5hp2{y97u@EM>$J-1d)Ykis?_*1WBs z^Oi*%Z}C+q%<5>_Rwte<1#V>7+L<7ah2rx>6?FRzp97B6=+cz8W-kP&lKfngXYg<7 zS4}k}6$UQz_#E`#caT)2yh#P>t+QonRN>9Y)$*My0PKfEP|Cj#<@qamyj7ovFxh`) zI_?x5p!m)d)Lxjq3W)Y}xK}MWUQSSvu>>P{hWR^XO<+oTV(j3%@w#ULhH6nWxecz^H3D!W2Gp#WYTIoe0# zr1-Gfm}AO`W`lW$X-bXc3>)##;ZOhNI&_a5>`t5f4q-i)fMl)kjcmm2gnxaRMaN-+ z9Xe0H9C9%zLyA_IG%{?Me>?#RBbkWBa&HyBWKR3p^!@!Lh7^C<(Y{^-dqnxs%6;8_ zXT*b|Y+Dj7iG(IwuVm?B3Urim~LGDJX&0ht? z#E=-{#NirGi!-DRP40+D$(F6kVxn@l%MbkRc0wN=nU zUnwaj$Wv2t1U~abF;-67q}MpRpm(6@^7hryZOu! z!5udrciJ=)@PUq*ZCC3g##1SoGpg9$HYK^YeEW`qC3&wHl%J8!%NuTCgu*ah^9%nN zF+NpQp6m*Obx%6`Lv`gUA7{Z5qX|Hyq$Fr}MA_2oVg7j!6qI#ryqij$^QMkJgJ;Yq zb6@ntYqCcw5GWr&A==-a9vfz>#gi9EM%SFrIFDBk$sSB^5L&_{F(IS6%sJ^shJe>C zeK6e!WGm#zKRirUSbx##c{ZE#Jk5-rgR)ygNYC+I8u_-OffBu<8JjLZGymh(7>lq^6ssq0d-T>|)Gw;T(A; z|2^6$6LzWN8-i`dB{R=bl#gzL^4>=j+p8&!V2PMKd&A>i`JZQ}LkUU>PY+v{*_+!D zZIdKdk(`iB_xHMO*P)JEhZ|=r>FN1sqs2JYMnn<(2h+QO-b_t*3Nn3c$B&0e5o9vkW{Z0e~48LfjoDQI{0BWGY+MobKstuic1+xQ)Pr-^0$DFZIMMLb@uY#aXttT5fxliE3yLjP(bJyG}_>rjq~rlT?M$qR2k zGwh{@XVLy2WH6asOLaSSPoFoYeEwl^SL4+l?0ZEMMZ55ZKkaKbEhbRX{ypr^`4Ii+ zRsk|mKbRut^SMwPy9Kq?!>?qLU=Fw2qbTRk&^r8IzUk zGGA2&Js6=*U+dj%L^1i zj zP*Nh4;w9R~e`c5UbeCjGf-L9&OOyoOc-1o8orJOdHA`En;>NG74&0%`VB;Cb}rgQ*SsG($JT^FVvq^U3Q-y?ej}g zWWV|H^Hv37Oq?PrSMj#UjQ$r>o>|_niv$WNM|h6DT;*$b?p literal 0 HcmV?d00001 diff --git a/appstore/immich-server/1.121.0/.env b/appstore/immich-server/1.121.0/.env new file mode 100644 index 000000000..27aea5506 --- /dev/null +++ b/appstore/immich-server/1.121.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.121.0/data.yml b/appstore/immich-server/1.121.0/data.yml new file mode 100644 index 000000000..33b62351b --- /dev/null +++ b/appstore/immich-server/1.121.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.121.0/docker-compose.yml b/appstore/immich-server/1.121.0/docker-compose.yml new file mode 100644 index 000000000..f13e5ac9d --- /dev/null +++ b/appstore/immich-server/1.121.0/docker-compose.yml @@ -0,0 +1,25 @@ +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 + healthcheck: + disable: false + image: ghcr.io/immich-app/immich-server:v1.121.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.121.0/envs/default.env b/appstore/immich-server/1.121.0/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/immich-server/1.121.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/immich-server/1.121.0/envs/global.env b/appstore/immich-server/1.121.0/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/immich-server/1.121.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/immich-server/1.121.0/scripts/init.sh b/appstore/immich-server/1.121.0/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/immich-server/1.121.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.121.0/scripts/uninstall.sh b/appstore/immich-server/1.121.0/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/immich-server/1.121.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.121.0/scripts/upgrade.sh b/appstore/immich-server/1.121.0/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/immich-server/1.121.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/README.md b/appstore/immich-server/README.md new file mode 100644 index 000000000..c909268e6 --- /dev/null +++ b/appstore/immich-server/README.md @@ -0,0 +1,123 @@ +# Immich + +Immich - 高性能自托管照片和视频备份解决方案 + +![Immich](https://file.lifebus.top/imgs/immich_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) + +## 简介 + +欢迎您 +您好,很高兴您能来到这里。 + +我叫亚历克斯。我在学校时是一名电气工程师,后来因为工作和对解决问题的纯粹热爱而成为了一名软件工程师。 + +我们和新生儿躺在床上,我妻子说:"我们开始积累大量宝宝的照片和视频,我不想再为 App-Which-Must-Not-Be-Name +付费了。你总是想为我建一些东西,为什么不为我建一个能做到这一点的应用程序呢? + +就这样,这个想法开始在我脑海中萌生。之后,我开始在自助托管领域寻找具有类似备份功能和 "非命名应用程序 " +性能水平的现有解决方案。我发现目前的解决方案主要集中在画廊类型的应用程序上。然而,我想要的是一个简单易用的备份工具,并带有一个能高效查看照片和视频的本地移动应用程序。于是,我作为一名如饥似渴的工程师踏上了寻找之旅。 + +另一个促使我执行 "不可名状的应用程序 "替代方案的动机是,我希望能为开源社区做出贡献,多年来我从这个社区中受益匪浅。 + +我很荣幸能与大家分享这一作品,它重视隐私、回忆,以及在易用、友好的界面中回顾这些时刻的喜悦。 + +如果您喜欢这款应用程序,或者它在某些方面对您有帮助,请考虑支持这个项目。这将有助于我继续开发和维护应用程序。 + +## 环境准备 + ++ `Redis` 服务 + +Immich 使用 Redis 作为缓存服务,所以需要安装 Redis 服务。 + +### 硬件驱动挂载 + +默认仅挂载: `/dev/dri`,如果您的设备不存在硬件驱动,请使用删除完整 `devices` 配置。 + +可以通过 `ls /dev/` 查看存在的设备驱动。 + +```yml +devices: + - /dev/dri:/dev/dri + # - /dev/nvidia0:/dev/nvidia0 + # - /dev/nvidiactl:/dev/nvidiactl + # - /dev/nvidia-modeset:/dev/nvidia-modeset + # - /dev/nvidia-nvswitchctl:/dev/nvidia-nvswitchctl + # - /dev/nvidia-uvm:/dev/nvidia-uvm + # - /dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools + # - /dev/video11:/dev/video11 +``` + +如果您的设备存在其他硬件驱动,可以选择挂载。删除 `# ` 号即可。格式为:`宿主机路径:容器路径`。 + +格式请与 `- /dev/dri:/dev/dri` 保持一致。 + +## 升级说明 + ++ **大版本** `v1.106.2` + +`2024/06/12` 上线,升级需要注意: + +1. 移除 `immich-microservices` 服务 +2. 环境变量发生了合并 +3. 底层API发生了变化 + 4. 移动端需要同步更新 + +## 安装说明 + +### 机器学习 预加载模型(CLIP) + +可选模型列表,粘贴时输入 `immich-app/` 之后的内容即可。 + +[immich-app's Collections - CLIP](https://huggingface.co/collections/immich-app/clip-654eaefb077425890874cd07) + +[immich-app's Collections - Multilingual CLIP](https://huggingface.co/collections/immich-app/multilingual-clip-654eb08c2382f591eeb8c2a7) + +默认模型 + +中文支持较好的模型 `XLM-Roberta-Large-Vit-B-16Plus` + +### 人脸识别 预加载模型 + +`buffalo_l`, `buffalo_m`, `buffalo_s`, `antelopev2` + +## 常见问题 + ++ 安装失败 + + 网络问题,可以尝试使用代理 ++ 升级失败 + + 请查看升级说明 + + 请查看日志,查看具体错误信息 + + 记录安装参数,进行卸载重装 + + 升级1Panel后,提示容器找不到 + + 请删除容器,重新安装 + + 提示文件或目录不存在 + + 可手动创建不存在的文件和目录,然后重试 + + 创建的文件可为空文件 + + 每次都升级失败 + + 很抱歉,官方应用不支持编排式应用(一个应用包含多个容器)的安装与升级,您可以尝试手动卸载安装最新版 ++ 无法访问 + + 请检查是否安装了 `Redis` 服务 + + 请检查是否正确配置了 `Redis` 服务 + + 请检查是否正确配置了 `域名` 和 `SSL` + + 请检查是否正确配置了 `端口` + + 请检查是否正确配置了 `防火墙` 并开放了 `端口` + + 请检查是否正确配置了 `Nginx` 服务 + +## 移动端应用 + +

+
+ App Store + App Store +
+
+ Google Play + Google Play +
+
+ +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/immich-server/data.yml b/appstore/immich-server/data.yml new file mode 100644 index 000000000..bb94dd1c8 --- /dev/null +++ b/appstore/immich-server/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: immich-server + name: Immich 服务端 + tags: + - Media + - Storage + - Local + shortDescZh: 高性能自托管照片和视频备份解决方案 + shortDescEn: High performance self-hosted photo and video backup solution + type: website + crossVersionUpdate: true + limit: 0 + website: https://immich.app/ + github: https://github.com/immich-app/immich + document: https://immich.app/docs/overview/introduction diff --git a/appstore/immich-server/logo.png b/appstore/immich-server/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..081f92e449f3b4543123718778c1c69d42391d33 GIT binary patch literal 14868 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

T3J|2{ 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 literal 0 HcmV?d00001 diff --git a/appstore/immich/1.121.0/.env b/appstore/immich/1.121.0/.env new file mode 100644 index 000000000..a4e4ae287 --- /dev/null +++ b/appstore/immich/1.121.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.121.0/data.yml b/appstore/immich/1.121.0/data.yml new file mode 100644 index 000000000..5dafe3219 --- /dev/null +++ b/appstore/immich/1.121.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.121.0/docker-compose.yml b/appstore/immich/1.121.0/docker-compose.yml new file mode 100644 index 000000000..d6eb39a31 --- /dev/null +++ b/appstore/immich/1.121.0/docker-compose.yml @@ -0,0 +1,85 @@ +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 + healthcheck: + disable: false + image: ghcr.io/immich-app/immich-machine-learning:v1.121.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: + 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 + healthcheck: + disable: false + image: ghcr.io/immich-app/immich-server:v1.121.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.121.0/envs/default.env b/appstore/immich/1.121.0/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/immich/1.121.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/immich/1.121.0/envs/global.env b/appstore/immich/1.121.0/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/immich/1.121.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/immich/1.121.0/scripts/init.sh b/appstore/immich/1.121.0/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/immich/1.121.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.121.0/scripts/uninstall.sh b/appstore/immich/1.121.0/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/immich/1.121.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.121.0/scripts/upgrade.sh b/appstore/immich/1.121.0/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/immich/1.121.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/README.md b/appstore/immich/README.md new file mode 100644 index 000000000..c909268e6 --- /dev/null +++ b/appstore/immich/README.md @@ -0,0 +1,123 @@ +# Immich + +Immich - 高性能自托管照片和视频备份解决方案 + +![Immich](https://file.lifebus.top/imgs/immich_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) + +## 简介 + +欢迎您 +您好,很高兴您能来到这里。 + +我叫亚历克斯。我在学校时是一名电气工程师,后来因为工作和对解决问题的纯粹热爱而成为了一名软件工程师。 + +我们和新生儿躺在床上,我妻子说:"我们开始积累大量宝宝的照片和视频,我不想再为 App-Which-Must-Not-Be-Name +付费了。你总是想为我建一些东西,为什么不为我建一个能做到这一点的应用程序呢? + +就这样,这个想法开始在我脑海中萌生。之后,我开始在自助托管领域寻找具有类似备份功能和 "非命名应用程序 " +性能水平的现有解决方案。我发现目前的解决方案主要集中在画廊类型的应用程序上。然而,我想要的是一个简单易用的备份工具,并带有一个能高效查看照片和视频的本地移动应用程序。于是,我作为一名如饥似渴的工程师踏上了寻找之旅。 + +另一个促使我执行 "不可名状的应用程序 "替代方案的动机是,我希望能为开源社区做出贡献,多年来我从这个社区中受益匪浅。 + +我很荣幸能与大家分享这一作品,它重视隐私、回忆,以及在易用、友好的界面中回顾这些时刻的喜悦。 + +如果您喜欢这款应用程序,或者它在某些方面对您有帮助,请考虑支持这个项目。这将有助于我继续开发和维护应用程序。 + +## 环境准备 + ++ `Redis` 服务 + +Immich 使用 Redis 作为缓存服务,所以需要安装 Redis 服务。 + +### 硬件驱动挂载 + +默认仅挂载: `/dev/dri`,如果您的设备不存在硬件驱动,请使用删除完整 `devices` 配置。 + +可以通过 `ls /dev/` 查看存在的设备驱动。 + +```yml +devices: + - /dev/dri:/dev/dri + # - /dev/nvidia0:/dev/nvidia0 + # - /dev/nvidiactl:/dev/nvidiactl + # - /dev/nvidia-modeset:/dev/nvidia-modeset + # - /dev/nvidia-nvswitchctl:/dev/nvidia-nvswitchctl + # - /dev/nvidia-uvm:/dev/nvidia-uvm + # - /dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools + # - /dev/video11:/dev/video11 +``` + +如果您的设备存在其他硬件驱动,可以选择挂载。删除 `# ` 号即可。格式为:`宿主机路径:容器路径`。 + +格式请与 `- /dev/dri:/dev/dri` 保持一致。 + +## 升级说明 + ++ **大版本** `v1.106.2` + +`2024/06/12` 上线,升级需要注意: + +1. 移除 `immich-microservices` 服务 +2. 环境变量发生了合并 +3. 底层API发生了变化 + 4. 移动端需要同步更新 + +## 安装说明 + +### 机器学习 预加载模型(CLIP) + +可选模型列表,粘贴时输入 `immich-app/` 之后的内容即可。 + +[immich-app's Collections - CLIP](https://huggingface.co/collections/immich-app/clip-654eaefb077425890874cd07) + +[immich-app's Collections - Multilingual CLIP](https://huggingface.co/collections/immich-app/multilingual-clip-654eb08c2382f591eeb8c2a7) + +默认模型 + +中文支持较好的模型 `XLM-Roberta-Large-Vit-B-16Plus` + +### 人脸识别 预加载模型 + +`buffalo_l`, `buffalo_m`, `buffalo_s`, `antelopev2` + +## 常见问题 + ++ 安装失败 + + 网络问题,可以尝试使用代理 ++ 升级失败 + + 请查看升级说明 + + 请查看日志,查看具体错误信息 + + 记录安装参数,进行卸载重装 + + 升级1Panel后,提示容器找不到 + + 请删除容器,重新安装 + + 提示文件或目录不存在 + + 可手动创建不存在的文件和目录,然后重试 + + 创建的文件可为空文件 + + 每次都升级失败 + + 很抱歉,官方应用不支持编排式应用(一个应用包含多个容器)的安装与升级,您可以尝试手动卸载安装最新版 ++ 无法访问 + + 请检查是否安装了 `Redis` 服务 + + 请检查是否正确配置了 `Redis` 服务 + + 请检查是否正确配置了 `域名` 和 `SSL` + + 请检查是否正确配置了 `端口` + + 请检查是否正确配置了 `防火墙` 并开放了 `端口` + + 请检查是否正确配置了 `Nginx` 服务 + +## 移动端应用 + +

+
+ App Store + App Store +
+
+ Google Play + Google Play +
+
+ +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/immich/data.yml b/appstore/immich/data.yml new file mode 100644 index 000000000..7b79f7e6f --- /dev/null +++ b/appstore/immich/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: immich + name: Immich + tags: + - WebSite + - Media + - Storage + - Local + shortDescZh: 高性能自托管照片和视频备份解决方案 + shortDescEn: High performance self-hosted photo and video backup solution + type: website + crossVersionUpdate: true + limit: 0 + website: https://immich.app/ + github: https://github.com/immich-app/immich/ + document: https://immich.app/docs/overview/introduction/ diff --git a/appstore/immich/logo.png b/appstore/immich/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..081f92e449f3b4543123718778c1c69d42391d33 GIT binary patch literal 14868 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

T3J|2{ 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 literal 0 HcmV?d00001 diff --git a/appstore/iycms/3.3.44/.env b/appstore/iycms/3.3.44/.env new file mode 100644 index 000000000..e2d8dfcea --- /dev/null +++ b/appstore/iycms/3.3.44/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +IYCMS_ROOT_PATH=/home/iycms + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=80 + +# 管理端口 [必填] +PANEL_APP_PORT_ADMIN=21007 + diff --git a/appstore/iycms/3.3.44/data.yml b/appstore/iycms/3.3.44/data.yml new file mode 100644 index 000000000..245e890e2 --- /dev/null +++ b/appstore/iycms/3.3.44/data.yml @@ -0,0 +1,25 @@ +additionalProperties: + formFields: + - default: "/home/iycms" + edit: true + envKey: IYCMS_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 80 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 21007 + edit: true + envKey: PANEL_APP_PORT_ADMIN + labelZh: 管理端口 + labelEn: Admin port + required: true + rule: paramPort + type: number diff --git a/appstore/iycms/3.3.44/docker-compose.yml b/appstore/iycms/3.3.44/docker-compose.yml new file mode 100644 index 000000000..dd27dc32d --- /dev/null +++ b/appstore/iycms/3.3.44/docker-compose.yml @@ -0,0 +1,20 @@ +networks: + 1panel-network: + external: true +services: + iycms: + container_name: iycms + env_file: + - ./envs/global.env + - .env + image: qyg2297248353/iycms:v3.3.44 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + - ${PANEL_APP_PORT_ADMIN}:21007 + restart: always + volumes: + - ${IYCMS_ROOT_PATH}/iycms:/app/iycms diff --git a/appstore/iycms/3.3.44/envs/default.env b/appstore/iycms/3.3.44/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/iycms/3.3.44/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/iycms/3.3.44/envs/global.env b/appstore/iycms/3.3.44/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/iycms/3.3.44/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/iycms/3.3.44/scripts/init.sh b/appstore/iycms/3.3.44/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/iycms/3.3.44/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/iycms/3.3.44/scripts/uninstall.sh b/appstore/iycms/3.3.44/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/iycms/3.3.44/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/iycms/3.3.44/scripts/upgrade.sh b/appstore/iycms/3.3.44/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/iycms/3.3.44/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/iycms/README.md b/appstore/iycms/README.md new file mode 100644 index 000000000..f37573da8 --- /dev/null +++ b/appstore/iycms/README.md @@ -0,0 +1,63 @@ +# 爱影CMS + +高性能高并发永久免费影视CMS + +![爱影CMS](https://file.lifebus.top/imgs/iycms_cover.png) + +高并发,高性能,高稳定性,部署简单,超强负载,功能齐全,接口齐全 + +支持多站点,支持VUE模板,支持HTML模板 + +![](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) + +![Static Badge](https://img.shields.io/badge/%E8%AD%A6%E5%91%8A-%E9%97%AD%E6%BA%90-red) + +## 特性 + +### 免费建站,网站三合一 + ++ 简单几步,网站轻松搭建,免费使用,体验各种不同风格模板 ++ SEO配置,分享配置,试看配置等,快捷高效管理内部数据 ++ PC,H5,移动端三合一 + +### 一键完成上万条数据采集 + ++ 从外部导入资源库地址,自定义采集类型 ++ 自定义采集,采集配置,定时任务等,提高系统可用性 ++ 一键操作,快稳准 + +### 多类型插件,满足您所需 + ++ 拓展能力高,灵活自定义,系统连接强 ++ 会员系统,分销系统,客服系统,统计系统等,满足您站点的各种需求 ++ 让您的站点功能齐全,极具个性 + +### 数智化赋能对智能运营平台 + ++ 打通Web,APP,广告等渠道数据,强力沉淀企业核心数据资产 ++ 智能交叉洞察数据多维BI报表可视化数据,反哺营销即时决策 ++ 助力您实现新客引入,老客沉淀 + +## 环境要求 + +> 数据库 + ++ `PostgreSQL` 11+ ++ `MySQL` + +## 安装说明 + +> 首次安装请先安装环境,然后再安装爱影CMS +> +> 必须初始化完成后,才能使用爱影CMS +> +> 后台管理:默认账户 +> +> 用户名: `admin` +> 密码: `123456` + +初始化后,请先创建站点,否则前端页面无法正常显示,返回 `500` 错误 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/iycms/data.yml b/appstore/iycms/data.yml new file mode 100644 index 000000000..9e1b1ee8c --- /dev/null +++ b/appstore/iycms/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: iycms + name: 爱影CMS + tags: + - WebSite + - Local + shortDescZh: 高性能高并发永久免费影视CMS + shortDescEn: High-performance high-concurrency permanent free video CMS + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.iycms.com/ + github: https://www.iycms.com/ + document: https://www.iycms.com/ diff --git a/appstore/iycms/logo.png b/appstore/iycms/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e60bc064e430b1c478eb7563da11ac349a3c32ba GIT binary patch literal 23675 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 literal 0 HcmV?d00001 diff --git a/appstore/iyuu-plus/README.md b/appstore/iyuu-plus/README.md new file mode 100644 index 000000000..2d19767a4 --- /dev/null +++ b/appstore/iyuu-plus/README.md @@ -0,0 +1,91 @@ +# IYUU Plus + +IYUU 是一个基于种子特征码的交叉索引工具 + +![IYUU Plus](https://file.lifebus.top/imgs/iyuuplus_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) + +## 简介 + +使用php语言编写并使用php-cli常驻内存运行,通过计划任务,按用户设定的频率调用transmission、qBittorrent下载软件的API接口,提取正在做种的info_hash提交到IYUU辅种服务器的API接口https: +//api.iyuu.cn(辅种过程和PT站点没有交互,查询辅种压力由IYUU服务器承担),根据IYUU服务器的API接口https: +//api.iyuu.cn返回的数据拼接种子连接,提交给下载器,由下载器主动去站点下载种子、校验、做种,自动辅种各个站点。 + +集成webui界面、辅种、转移、下载、定时访问URL、动态域名ddns等常用功能,提供完善的插件机制。 + +支持下载器集群,支持多盘位,支持多下载目录,支持连接远程下载器等。 + +### 技术栈 + +| 组件 | 版本 | 官网 | +|:------------|:-------|:--------------------------------------------| +| Workerman | 4.1.15 | https://www.workerman.net/doc/workerman/ | +| Webman | 1.5.16 | https://www.workerman.net/doc/webman/ | +| WebmanAdmin | 0.6.24 | https://www.workerman.net/doc/webman-admin/ | +| PHP | 8.3.7 | https://www.php.net/ | +| MYSQL | 5.7.26 | https://www.mysql.com/ | +| Layui | 2.8.12 | https://layui.dev/ | +| Vue | 3.4.21 | https://vuejs.org/ | + +## 安装说明 + +> 爱语飞飞Token: 前往 [爱语飞飞-官网](https://iyuu.cn/) 获取授权Token +> +> 密码:首次登录填写为登录密码 +> +> 站点认证:请提前准备相应站点 + +## 支持的下载器 + ++ [transmission](https://transmissionbt.com/) + +Transmission 是一个种子客户端,可以让您在互联置上下载和共享文件。该应用程序适用于多种操作系统,包括 Ubuntu、Fedora、Arch +Linux、Debian Raspberry Pi 等。您可以使用 terminal 中的 apt 或 yum 命令来安装它。使用 +Transmission,您可以实时监测下载和上传情况,并显示连接一致性图表 + ++ [qBittorrent](https://www.qbittorrent.org/) + +qBittorrent是一款免费的开源种子下载工具,作为µTorrent的替代品。它在所有平台上都提供相同的功能,包括Windows、Linux和macOS。该应用程序还配备了一个可扩展的搜索引擎以及Web +UI遠端,以最大化你的torrent体验。使用qBittorrent,你可以在多个平台上轻松下载你喜爱的内容。 + +## 反向代理 + +> Nginx 配置 + +```nginx + location ^~ / { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_http_version 1.1; + proxy_set_header Connection ""; + if (!-f $request_filename){ + proxy_pass http://127.0.0.1:8787; + } + } +``` + +## 绑定合作站点 + +只有绑定了合作站点的才可以完整的使用IYUUPlus + +认证其一即可,绑定爱语飞飞Token并认证, 后续无需重复认证,未认证无法进行辅种 + +| 认证站点 | 别名 | 官网 | +|-----------|--------|----| +| pthome | 铂金家 | 自查 | +| hdhome | 家园 | 自查 | +| ourbits | 我堡 | 自查 | +| chdbits | 新岛/金钱岛 | 自查 | +| hdfans | 红豆饭 | 自查 | +| audiences | 观众/奥迪 | 自查 | +| piggo | 猪猪网 | 自查 | +| zhuque | 朱雀 | 自查 | +| zmpt | 织梦 | 自查 | +| agsvpt | 末日种子库 | 自查 | +| 其他站点 | 未知 | 未知 | + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/iyuu-plus/data.yml b/appstore/iyuu-plus/data.yml new file mode 100644 index 000000000..32d27f2f7 --- /dev/null +++ b/appstore/iyuu-plus/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: iyuu-plus + name: IYUU-Plus + tags: + - WebSite + - Tool + - Runtime + - Local + shortDescZh: 自动辅种工具 + shortDescEn: Auto Reseed Tool + type: website + crossVersionUpdate: true + limit: 0 + website: https://iyuu.cn/ + github: https://github.com/ledccn/iyuuplus-dev + document: https://doc.iyuu.cn/ diff --git a/appstore/iyuu-plus/latest/.env b/appstore/iyuu-plus/latest/.env new file mode 100644 index 000000000..219d88a80 --- /dev/null +++ b/appstore/iyuu-plus/latest/.env @@ -0,0 +1,21 @@ +# 数据持久化路径 [必填] +IYUUCN_ROOT_PATH=/home/iyuuplus + +# WebUI 端口 (Nginx) [必填] +PANEL_APP_PORT_HTTP=8780 + +# WebUI 端口 (IYUU) +PANEL_APP_PORT_IYUU=8787 + +# WebUI 端口 (WS) +PANEL_APP_PORT_WS=3131 + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/appstore/iyuu-plus/latest/data.yml b/appstore/iyuu-plus/latest/data.yml new file mode 100644 index 000000000..923f53b80 --- /dev/null +++ b/appstore/iyuu-plus/latest/data.yml @@ -0,0 +1,54 @@ +additionalProperties: + formFields: + - default: "/home/iyuuplus" + edit: true + envKey: IYUUCN_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8780 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 (Nginx) + labelEn: WebUI port (Nginx) + required: true + rule: paramPort + type: number + - default: 8787 + edit: true + envKey: PANEL_APP_PORT_IYUU + labelZh: WebUI 端口 (IYUU) + labelEn: WebUI port (IYUU) + required: false + rule: paramPort + type: number + - default: 3131 + edit: true + envKey: PANEL_APP_PORT_WS + labelZh: WebUI 端口 (WS) + labelEn: WebUI port (WS) + required: false + rule: paramPort + type: number + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_1 + labelEn: Custom mount directory 1 + labelZh: 自定义挂载目录 1 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_2 + labelEn: Custom mount directory 2 + labelZh: 自定义挂载目录 2 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_3 + labelEn: Custom mount directory 3 + labelZh: 自定义挂载目录 3 + required: false + type: text diff --git a/appstore/iyuu-plus/latest/docker-compose.yml b/appstore/iyuu-plus/latest/docker-compose.yml new file mode 100644 index 000000000..d119f8f76 --- /dev/null +++ b/appstore/iyuu-plus/latest/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + iyuuplus: + container_name: iyuu-plus + image: iyuucn/iyuuplus-dev:latest + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8780 + - ${PANEL_APP_PORT_IYUU:-}:8787 + - ${PANEL_APP_PORT_WS:-}:3131 + restart: always + volumes: + - ${IYUUCN_ROOT_PATH}/iyuu:/iyuu + - ${IYUUCN_ROOT_PATH}/data:/data + - ${IYUUCN_ROOT_PATH}/qBittorrent:/qBittorrent + - ${IYUUCN_ROOT_PATH}/transmission:/transmission + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/appstore/iyuu-plus/latest/envs/default.env b/appstore/iyuu-plus/latest/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/iyuu-plus/latest/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/iyuu-plus/latest/envs/global.env b/appstore/iyuu-plus/latest/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/iyuu-plus/latest/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/iyuu-plus/latest/scripts/init.sh b/appstore/iyuu-plus/latest/scripts/init.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/iyuu-plus/latest/scripts/init.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/iyuu-plus/latest/scripts/uninstall.sh b/appstore/iyuu-plus/latest/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/iyuu-plus/latest/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/iyuu-plus/latest/scripts/upgrade.sh b/appstore/iyuu-plus/latest/scripts/upgrade.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/iyuu-plus/latest/scripts/upgrade.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/iyuu-plus/logo.png b/appstore/iyuu-plus/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1af46e75c3c30bf1705c851489680a274be9860e GIT binary patch literal 56125 zcmX6kV_eVvaxttwr$t4ZMV35ves(Zw%sqD%;)U?yf|;p_x@b>W#3V% z$}*@(L`VPt098&_QXK$*8vpl0gopg2vz8eS00aT#B*itna{tRiaKrgaHe@+=r@)%{ z1J4Jw`vFZJK`oUsQU??H89_}P7E{uivaq-~QeMXA67um=>BDyy_qC4$^|nUeR?k*X zU%5lDfq{dig=ep?d9UC(FJC_!0Ghszz;Vlt!FKw%YFU6BLv{rLR}TQYtAuoaNg{u6 z7#>{%109^|UugVwlv~HjN_sFiE9UPaRIu2n$TS?Ck;xwH{(ZH9*jK7P}kmEf6JKkl}ECUd?YBHYXdhL-Q$7l`a#ef`6W4!fp zQ-sdS)sTR(&B8z&fcbZ!aI}`aGS0io%YOgX{{vz92ZYqSga&_tm4Il@Zk0{hP8b8R z)D9XITm2%5*WROc-~D-9MH@?{U?9305rVqZ{~*o6$JGLGej*ui(v%48V3Xdv!8D@`^1wDj*aVu=MnFn9zw;y^%A(a=DlqKvjE(dJXlPriX4JpZb}LGZ(Z z;D-wXYmQU1Mrt`W3Vb~$=HUJreJLdl;WI3R&tc*#J$vFUZoq2P;Wf~^<`&~W{677| zFSJVULI1n=s()t$O!9#L|Cm7yVFm+AvJE$By5wuaU#}OfrpKO*3k9=~v2h}aQe>6e;qe

P~QigfSb^E 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

{_$v-%ktIanXW;(Ol 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 SoyGv*pSFg+dW9+~{Qm(_bV_po literal 0 HcmV?d00001 diff --git a/appstore/artalk/2.9.1/.env b/appstore/artalk/2.9.1/.env new file mode 100644 index 000000000..849d24798 --- /dev/null +++ b/appstore/artalk/2.9.1/.env @@ -0,0 +1,60 @@ +# 数据库服务 (前置检查) [必填] +PANEL_DB_TYPE=postgresql + +# 数据持久化路径 [必填] +ARTALK_ROOT_PATH=/home/artalk + +# API 端口 [必填] +PANEL_APP_PORT_HTTP=23366 + +# 应用密钥 [必填] +ATK_APP_KEY= + +# 管理员用户名 [必填] +ATK_ADMIN_USERS_0_NAME=admin + +# 管理员邮箱 [必填] +ATK_ADMIN_USERS_0_EMAIL=admin@admin.com + +# 管理员密码 [必填] +ATK_ADMIN_USERS_0_PASSWORD=(bcrypt)$2y$10$ti4vZYIrxVN8rLcYXVgXCO.GJND0dyI49r7IoF3xqIx8bBRmIBZRm + +# 管理员徽章名称 [必填] +ATK_ADMIN_USERS_0_BADGE_NAME=管理员 + +# 管理员徽章颜色 [必填] +ATK_ADMIN_USERS_0_BADGE_COLOR=#0083FF + +# 站点名称 [必填] +ATK_SITE_DEFAULT=Artalk 的博客 + +# 受信任的域名 (多个域名用空格分隔) [必填] +ATK_TRUSTED_DOMAINS= + +# 登录超时时间 (秒) [必填] +ATK_LOGIN_TIMEOUT=259200 + +# 站点语言 [必填] +ATK_LOCALE=zh-CN + +# IP 地址精度 [必填] +ATK_IP_REGION_PRECISION=province + +# 数据库 类型 [必填] +ATK_DB_TYPE=pgsql + +# 数据库 主机地址 [必填] +ATK_DB_HOST=127.0.0.1 + +# 数据库 端口 [必填] +ATK_DB_PORT=5432 + +# 数据库 名称 [必填] +ATK_DB_NAME=artalk + +# 数据库 用户名 [必填] +ATK_DB_USER=artalk + +# 数据库 密码 [必填] +ATK_DB_PASSWORD= + diff --git a/appstore/artalk/2.9.1/data.yml b/appstore/artalk/2.9.1/data.yml new file mode 100644 index 000000000..000642413 --- /dev/null +++ b/appstore/artalk/2.9.1/data.yml @@ -0,0 +1,187 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_DB_HOST + required: true + type: service + default: postgresql + envKey: PANEL_DB_TYPE + labelZh: 数据库服务 (前置检查) + labelEn: Database Service + required: true + type: apps + values: + - label: PostgreSQL + value: postgresql + - label: MySQL + value: mysql + - label: MariaDB + value: mariadb + - label: Percona + value: percona + - default: "/home/artalk" + edit: true + envKey: ARTALK_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 23366 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: API 端口 + labelEn: API Port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: ATK_APP_KEY + labelZh: 应用密钥 + labelEn: App key + required: true + type: password + - default: "admin" + edit: true + envKey: ATK_ADMIN_USERS_0_NAME + labelZh: 管理员用户名 + labelEn: Admin username + required: true + type: text + - default: "admin@admin.com" + edit: true + envKey: ATK_ADMIN_USERS_0_EMAIL + labelZh: 管理员邮箱 + labelEn: Admin email + required: true + type: text + - default: "(bcrypt)$2y$10$ti4vZYIrxVN8rLcYXVgXCO.GJND0dyI49r7IoF3xqIx8bBRmIBZRm" + edit: true + envKey: ATK_ADMIN_USERS_0_PASSWORD + labelZh: 管理员密码 + labelEn: Admin password + required: true + type: text + - default: "管理员" + edit: true + envKey: ATK_ADMIN_USERS_0_BADGE_NAME + labelZh: 管理员徽章名称 + labelEn: Admin badge name + required: true + type: text + - default: "#0083FF" + edit: true + envKey: ATK_ADMIN_USERS_0_BADGE_COLOR + labelZh: 管理员徽章颜色 + labelEn: Admin badge color + required: true + type: text + - default: "Artalk 的博客" + edit: true + envKey: ATK_SITE_DEFAULT + labelZh: 站点名称 + labelEn: Site name + required: true + type: text + - default: "" + edit: true + envKey: ATK_TRUSTED_DOMAINS + labelZh: 受信任的域名 (多个域名用空格分隔) + labelEn: Trusted domains (separated by spaces) + required: true + type: text + - default: 259200 + edit: true + envKey: ATK_LOGIN_TIMEOUT + labelZh: 登录超时时间 (秒) + labelEn: Login timeout (seconds) + required: true + type: number + - default: "zh-CN" + edit: true + envKey: ATK_LOCALE + labelZh: 站点语言 + labelEn: Site language + required: true + type: select + values: + - label: 简体中文 + value: "zh-CN" + - label: English + value: "en" + - label: 繁体中文 + value: "zh-TW" + - label: 日本語 + value: "ja" + - label: Français + value: "fr" + - label: Deutsch + value: "ko" + - label: Русский + value: "ru" + - default: "province" + edit: true + envKey: ATK_IP_REGION_PRECISION + labelZh: IP 地址精度 + labelEn: IP address precision + required: true + type: select + values: + - label: 国家 + value: "country" + - label: 省份 + value: "province" + - label: 城市 + value: "city" + - default: "pgsql" + edit: true + envKey: ATK_DB_TYPE + labelZh: 数据库 类型 + labelEn: Database Type + required: true + type: select + values: + - label: PostgreSQL + value: "pgsql" + - label: MySQL (MariaDB, Percona) + value: "mysql" + - default: "127.0.0.1" + edit: true + envKey: ATK_DB_HOST + labelZh: 数据库 主机地址 + labelEn: Database Host + required: true + type: text + - default: 5432 + edit: true + envKey: ATK_DB_PORT + labelZh: 数据库 端口 + labelEn: Database Port + required: true + rule: paramPort + type: number + - default: "artalk" + edit: true + envKey: ATK_DB_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + rule: paramCommon + type: text + - default: "artalk" + edit: true + envKey: ATK_DB_USER + labelZh: 数据库 用户名 + labelEn: Database Username + required: true + type: text + - default: "" + edit: true + envKey: ATK_DB_PASSWORD + labelZh: 数据库 密码 + labelEn: Database Password + random: true + required: true + rule: paramComplexity + type: password diff --git a/appstore/artalk/2.9.1/docker-compose.yml b/appstore/artalk/2.9.1/docker-compose.yml new file mode 100644 index 000000000..44b20e341 --- /dev/null +++ b/appstore/artalk/2.9.1/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true +services: + artalk: + container_name: artalk + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + - ATK_DEBUG=false + - ATK_HOST=0.0.0.0 + - ATK_PORT=23366 + - ATK_IP_REGION_ENABLED=true + - ATK_DB_TABLE_PREFIX=atk_ + image: artalk/artalk-go:2.9.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:23366 + restart: always + volumes: + - ${ARTALK_ROOT_PATH}/data:/data diff --git a/appstore/artalk/2.9.1/envs/default.env b/appstore/artalk/2.9.1/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/artalk/2.9.1/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/artalk/2.9.1/envs/global.env b/appstore/artalk/2.9.1/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/artalk/2.9.1/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/artalk/2.9.1/scripts/init.sh b/appstore/artalk/2.9.1/scripts/init.sh new file mode 100644 index 000000000..5e9dcca05 --- /dev/null +++ b/appstore/artalk/2.9.1/scripts/init.sh @@ -0,0 +1,30 @@ +#!/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 + + DATA_DIR="$ARTALK_ROOT_PATH/data" + + mkdir -p "$DATA_DIR" + + OUTPUT_FILE="$DATA_DIR/ip2region.xdb" + + URL1="https://gh-proxy.com/?q=https%3A%2F%2Fgithub.com%2Flionsoul2014%2Fip2region%2Fblob%2Fmaster%2Fdata%2Fip2region.xdb" + URL2="https://github.com/lionsoul2014/ip2region/raw/master/data/ip2region.xdb" + + curl -L "$URL1" -o "$OUTPUT_FILE" || curl -L "$URL2" -o "$OUTPUT_FILE" + + chmod -R 777 "$DATA_DIR" + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/artalk/2.9.1/scripts/uninstall.sh b/appstore/artalk/2.9.1/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/artalk/2.9.1/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/artalk/2.9.1/scripts/upgrade.sh b/appstore/artalk/2.9.1/scripts/upgrade.sh new file mode 100644 index 000000000..5e9dcca05 --- /dev/null +++ b/appstore/artalk/2.9.1/scripts/upgrade.sh @@ -0,0 +1,30 @@ +#!/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 + + DATA_DIR="$ARTALK_ROOT_PATH/data" + + mkdir -p "$DATA_DIR" + + OUTPUT_FILE="$DATA_DIR/ip2region.xdb" + + URL1="https://gh-proxy.com/?q=https%3A%2F%2Fgithub.com%2Flionsoul2014%2Fip2region%2Fblob%2Fmaster%2Fdata%2Fip2region.xdb" + URL2="https://github.com/lionsoul2014/ip2region/raw/master/data/ip2region.xdb" + + curl -L "$URL1" -o "$OUTPUT_FILE" || curl -L "$URL2" -o "$OUTPUT_FILE" + + chmod -R 777 "$DATA_DIR" + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/artalk/README.md b/appstore/artalk/README.md new file mode 100644 index 000000000..56cb2598e --- /dev/null +++ b/appstore/artalk/README.md @@ -0,0 +1,95 @@ +# Artalk + +一个自托管的评论系统 + +![Artalk](https://file.lifebus.top/imgs/artalk_cover.png) + +Artalk 是一款简单易用但功能丰富的评论系统,你可以开箱即用地部署并置入任何博客、网站、Web 应用。 + +![](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) + +## 亮点 + +🍃 前端 ~40KB,纯天然 Vanilla JS + +🍱 后端 Golang,高效轻量跨平台 + +🐳 通过 Docker 一键部署,方便快捷 + +🌈 开源程序,自托管,隐私至上 + +## 特性 + +| 特性 | 描述 | +|:---:|:-------------------------| +| 📚 | 侧边栏: 快速管理、直观浏览 | +| 🔐 | 社交登录: 通过社交账号快速登录 | +| 💌 | 邮件通知: 多种发送方式、邮件模板 | +| 📢 | 多元推送: 多种推送方式、通知模版 | +| 🔔 | 站内通知: 红点标记、提及列表 | +| 🔒 | 验证码: 多种验证类型、频率限制 | +| 🚫 | 评论审核: 内容检测、垃圾拦截 | +| 📸 | 图片上传: 自定义上传、支持图床 | +| 📝 | Markdown: 支持 Markdown 语法 | +| 😄 | 表情包: 兼容 OwO,快速集成 | +| 🌐 | 多站点: 站点隔离、集中管理 | +| 👤 | 管理员: 密码验证、徽章标识 | +| 📑 | 页面管理: 快速查看、标题一键跳转 | +| 📊 | 浏览量统计: 轻松统计网页浏览量 | +| 📖 | 层级结构: 嵌套分页列表、滚动加载 | +| 🔼 | 评论投票: 赞同或反对评论 | +| 🔄 | 评论排序: 多种排序方式,自由选择 | +| 🔍 | 评论搜索: 快速搜索评论内容 | +| 🔝 | 评论置顶: 重要消息置顶显示 | +| 👀 | 仅看作者: 仅显示作者的评论 | +| 🔗 | 评论跳转: 快速跳转到引用的评论 | +| 💾 | 自动保存: 输入内容防丢功能 | +| 🌍 | IP 属地: 用户 IP 属地展示 | +| 📦 | 数据迁移: 自由迁移、快速备份 | +| 🖼️ | 图片灯箱: 图片灯箱快速集成 | +| 📱 | 图片懒加载: 延迟加载图片,优化体验 | +| 📐 | Latex: Latex 公式解析集成 | +| 🌙 | 夜间模式: 夜间模式切换 | +| 🔧 | 扩展插件: 创造更多可能性 | +| 🌐 | 多语言: 多国语言切换 | +| 💻 | 命令行: 命令行操作管理能力 | +| 📜 | API 文档: 提供 OpenAPI 格式文档 | +| 🚀 | 程序升级: 版本检测,一键升级 | + +## 安装说明 + +### `应用密钥` 配置 + +数据加密密钥,非管理员密码。 + +### `管理员密码` 配置 + +管理员密码,用于登录后台管理。 + +基本格式:`(加密方式)加密后的密码` + +示例密码:`123456` + +#### 加密方式:`md5` + +填写案例:`(md5)e10adc3949ba59abbe56e057f20f883e` + +#### 加密方式:`bcrypt` + +填写案例:`(bcrypt)$2a$10$yS/EhHU1xqjNpboe8DWkb.AvWdBb5/.Ny3reXy8SltlVaquiSGwzu` + +### `受信任的域名 (多个域名用空格分隔)` 配置 + +填写允许访问的域名,多个域名用空格分隔。 + +如果您需要将插件使用在以下博客地址: + ++ `https://blog1.com` + ++ `https://blog2.com` + +填写案例:`https://blog1.com https://blog2.com` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/artalk/data.yml b/appstore/artalk/data.yml new file mode 100644 index 000000000..cac77a547 --- /dev/null +++ b/appstore/artalk/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: artalk + name: Artalk + tags: + - WebSite + - Tool + - Middleware + - Local + shortDescZh: 一个自托管的评论系统 + shortDescEn: A Self-hosted Comment System + type: website + crossVersionUpdate: true + limit: 0 + website: https://artalk.js.org/ + github: https://github.com/ArtalkJS/Artalk/ + document: https://artalk.js.org/guide/intro.html diff --git a/appstore/artalk/logo.png b/appstore/artalk/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c7a5bac93a87e016088444b295188b68ed297a8e GIT binary patch literal 9106 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 ImVMO!0G%mfVE_OC literal 0 HcmV?d00001 diff --git a/appstore/auto-lady/1.1.202/.env b/appstore/auto-lady/1.1.202/.env new file mode 100644 index 000000000..a6f1eb1e9 --- /dev/null +++ b/appstore/auto-lady/1.1.202/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +AUTO_LADY_ROOT_PATH=/home/auto-lady + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/appstore/auto-lady/1.1.202/data.yml b/appstore/auto-lady/1.1.202/data.yml new file mode 100644 index 000000000..668b067c0 --- /dev/null +++ b/appstore/auto-lady/1.1.202/data.yml @@ -0,0 +1,38 @@ +additionalProperties: + formFields: + - default: "/home/auto-lady" + edit: true + envKey: AUTO_LADY_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 + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_1 + labelEn: Custom mount directory 1 + labelZh: 自定义挂载目录 1 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_2 + labelEn: Custom mount directory 2 + labelZh: 自定义挂载目录 2 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_3 + labelEn: Custom mount directory 3 + labelZh: 自定义挂载目录 3 + required: false + type: text diff --git a/appstore/auto-lady/1.1.202/docker-compose.yml b/appstore/auto-lady/1.1.202/docker-compose.yml new file mode 100644 index 000000000..0b9cb9db9 --- /dev/null +++ b/appstore/auto-lady/1.1.202/docker-compose.yml @@ -0,0 +1,22 @@ +networks: + 1panel-network: + external: true +services: + auto-lady: + container_name: auto-lady + env_file: + - ./envs/global.env + - .env + image: orekiiiiiiiiiiiii/auto-lady:1.4.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + volumes: + - ${AUTO_LADY_ROOT_PATH}/config:/data + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/appstore/auto-lady/1.1.202/envs/default.env b/appstore/auto-lady/1.1.202/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/auto-lady/1.1.202/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/auto-lady/1.1.202/envs/global.env b/appstore/auto-lady/1.1.202/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/auto-lady/1.1.202/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/auto-lady/1.1.202/scripts/init.sh b/appstore/auto-lady/1.1.202/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/auto-lady/1.1.202/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/auto-lady/1.1.202/scripts/uninstall.sh b/appstore/auto-lady/1.1.202/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/auto-lady/1.1.202/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/auto-lady/1.1.202/scripts/upgrade.sh b/appstore/auto-lady/1.1.202/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/auto-lady/1.1.202/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/auto-lady/README.md b/appstore/auto-lady/README.md new file mode 100644 index 000000000..9f9b42551 --- /dev/null +++ b/appstore/auto-lady/README.md @@ -0,0 +1,22 @@ +# AutoLady + +自动化订阅AV影片 + +![AutoLady](https://file.lifebus.top/imgs/autolady_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) + +## 应用说明 + +> 目前仅支持 MT,FSM,PTT 三个 PT 站点的 AV 采集订阅 +> +> 账号密码可在 `日志` 查看 + +## 应用配置 + ++ qBittorrent 下载器 ++ PT 站点密钥 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/auto-lady/data.yml b/appstore/auto-lady/data.yml new file mode 100644 index 000000000..bd838efe6 --- /dev/null +++ b/appstore/auto-lady/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: auto-lady + name: AutoLady + tags: + - WebSite + - Tool + - Local + shortDescZh: 自动化订阅AV影片 + shortDescEn: AutoLady is a tool for automatically subscribing to AV movies + type: website + crossVersionUpdate: true + limit: 0 + website: https://catcat.blog/ + github: https://catcat.blog/ + document: https://catcat.blog/docker-autolady.html diff --git a/appstore/auto-lady/logo.png b/appstore/auto-lady/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2512e2b9c51ec76297a259267e8856d202b6695e GIT binary patch literal 11652 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 literal 0 HcmV?d00001 diff --git a/appstore/baota/9.0/.env b/appstore/baota/9.0/.env new file mode 100644 index 000000000..9bae1626e --- /dev/null +++ b/appstore/baota/9.0/.env @@ -0,0 +1,27 @@ +# 数据持久化路径 [必填] +BAOTA_ROOT_PATH=/home/baota + +# 网络模式 [必填] +NETWORK_MODE=host + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8888 + +# 网站服务 HTTP [必填] +PANEL_APP_PORT_WEB_HTTP=80 + +# 网站服务 HTTPS [必填] +PANEL_APP_PORT_WEB_HTTPS=443 + +# SSH 端口 [必填] +PANEL_APP_PORT_SSH=22 + +# FTP 端口 [必填] +PANEL_APP_PORT_FTP=21 + +# MySQL 端口 [必填] +PANEL_APP_PORT_MYSQL=3306 + +# phpMyAdmin 端口 [必填] +PANEL_APP_PORT_PHPADMIN=888 + diff --git a/appstore/baota/9.0/data.yml b/appstore/baota/9.0/data.yml new file mode 100644 index 000000000..4d13b5b69 --- /dev/null +++ b/appstore/baota/9.0/data.yml @@ -0,0 +1,81 @@ +additionalProperties: + formFields: + - default: "/home/baota" + edit: true + envKey: BAOTA_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "host" + edit: true + envKey: NETWORK_MODE + labelEn: Drive path + labelZh: 网络模式 + required: true + type: select + values: + - label: 主机网络模式 + value: "host" + - label: 桥接网络模式 + value: "bridge" + - label: 无网络模式 + value: "none" + - label: 1panel-network + value: "1panel-network" + - default: 8888 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 80 + edit: true + envKey: PANEL_APP_PORT_WEB_HTTP + labelZh: 网站服务 HTTP + labelEn: Website service HTTP + required: true + rule: paramPort + type: number + - default: 443 + edit: true + envKey: PANEL_APP_PORT_WEB_HTTPS + labelZh: 网站服务 HTTPS + labelEn: Website service HTTPS + required: true + rule: paramPort + type: number + - default: 22 + edit: true + envKey: PANEL_APP_PORT_SSH + labelZh: SSH 端口 + labelEn: SSH port + required: true + rule: paramPort + type: number + - default: 21 + edit: true + envKey: PANEL_APP_PORT_FTP + labelZh: FTP 端口 + labelEn: FTP port + required: true + rule: paramPort + type: number + - default: 3306 + edit: true + envKey: PANEL_APP_PORT_MYSQL + labelZh: MySQL 端口 + labelEn: MySQL port + required: true + rule: paramPort + type: number + - default: 888 + edit: true + envKey: PANEL_APP_PORT_PHPADMIN + labelZh: phpMyAdmin 端口 + labelEn: phpMyAdmin port + required: true + rule: paramPort + type: number diff --git a/appstore/baota/9.0/docker-compose.yml b/appstore/baota/9.0/docker-compose.yml new file mode 100644 index 000000000..01ec3d415 --- /dev/null +++ b/appstore/baota/9.0/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true +services: + baota: + container_name: baota + env_file: + - ./envs/global.env + - .env + image: btpanel/baota:9.0_lts_latest + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:8888 + - ${PANEL_APP_PORT_WEB_HTTP}:80 + - ${PANEL_APP_PORT_WEB_HTTPS}:443 + - ${PANEL_APP_PORT_FTP}:21 + - ${PANEL_APP_PORT_SSH}:22 + - ${PANEL_APP_PORT_MYSQL}:3306 + - ${PANEL_APP_PORT_PHPADMIN}:888 + restart: always + volumes: + - ${BAOTA_ROOT_PATH}/wwwroot:/www/wwwroot + - ${BAOTA_ROOT_PATH}/data:/www/server/data + - ${BAOTA_ROOT_PATH}/vhost:/www/server/panel/vhost diff --git a/appstore/baota/9.0/envs/default.env b/appstore/baota/9.0/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/baota/9.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/baota/9.0/envs/global.env b/appstore/baota/9.0/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/baota/9.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/baota/9.0/scripts/init.sh b/appstore/baota/9.0/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/baota/9.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/baota/9.0/scripts/uninstall.sh b/appstore/baota/9.0/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/baota/9.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/baota/9.0/scripts/upgrade.sh b/appstore/baota/9.0/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/baota/9.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/baota/README.md b/appstore/baota/README.md new file mode 100644 index 000000000..185fe7e96 --- /dev/null +++ b/appstore/baota/README.md @@ -0,0 +1,30 @@ +# 宝塔 + +宝塔,安全高效的服务器运维面板 + +![宝塔](https://file.lifebus.top/imgs/baota_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) + +## 简介 + +宝塔面板是一款服务器管理软件,支持windows和linux系统,可以通过Web端轻松管理服务器,提升运维效率。例如:创建管理网站、FTP、数据库,拥有可视化文件管理器,可视化软件管理器,可视化CPU、内存、流量监控图表,计划任务等功能。 + +## 安装说明 + +> 默认地址 `http://127.0.0.1:8888/btpanel` +> +> 默认用户:`btpanel` +> +> 默认密码:`btpaneldocker` +> +> 默认SSH密码:`btpaneldocker` + +### 网络模式 + +当使用 主机模式 时,所有端口映射都无效,直接访问默认端口即可。 + + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/baota/data.yml b/appstore/baota/data.yml new file mode 100644 index 000000000..3001aeaf7 --- /dev/null +++ b/appstore/baota/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: baota + name: 宝塔 + tags: + - WebSite + - Middleware + - Local + shortDescZh: 宝塔,安全高效的服务器运维面板 + shortDescEn: Baota, a secure and efficient server operation and maintenance panel + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.bt.cn/ + github: https://www.bt.cn/ + document: https://www.bt.cn/ diff --git a/appstore/baota/logo.png b/appstore/baota/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..26421c5b9e2d936b9c14eb2616bdffba1d3c4ca6 GIT binary patch literal 8280 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 .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/bark/2.1.5/scripts/uninstall.sh b/appstore/bark/2.1.5/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/bark/2.1.5/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/bark/2.1.5/scripts/upgrade.sh b/appstore/bark/2.1.5/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/bark/2.1.5/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/bark/README.md b/appstore/bark/README.md new file mode 100644 index 000000000..199d1359a --- /dev/null +++ b/appstore/bark/README.md @@ -0,0 +1,125 @@ +# Bark + +一款注重隐私、安全可控的自定义通知推送工具。 + +![Bark](https://file.lifebus.top/imgs/bark_logo.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) + +## 特性 + ++ 免费、轻量!简单调用接口即可给自己的iPhone发送推送。 ++ 依赖苹果APNs,及时、稳定、可靠 ++ 不会消耗设备的电量, 基于系统推送服务与推送扩展,APP本体并不需要运行。 ++ 隐私安全,可以通过一些方式确保包含作者本人在内的所有人都无法窃取你的隐私。 + +## 安装说明 + +### `数据库链接` 配置 + +MySQL DSN 数据库链接 + +格式: + +```shell +user:pass@tcp(host)/dbname + +# 例如 +root:123456@tcp(127.0.0.1:3306)/bark +``` + +#### 参数说明 + +| 参数 | 说明 | +|--------|--------| +| user | 数据库用户名 | +| pass | 数据库密码 | +| host | 数据库地址 | +| dbname | 数据库名称 | + +使用其他端口时 `host` 格式为 `host:port` + +## [URL格式](https://bark.day.app/#/tutorial?id=url格式) + +URL由推送key、参数 title、参数 body 组成。有下面两种组合方式 + +#### 服务基础验证 + +可选项,验证方式为 `Basic`,具体格式为 `Basic base64(username:password)`,其中 `base64(username:password)` +为 `username:password` 的 `base64` 编码结果。 + ++ 用户名 (服务基础验证) ++ 密码 (服务基础验证) + +``` +/:key/:body +/:key/:title/:body +``` + +## [请求方式](https://bark.day.app/#/tutorial?id=请求方式) + +##### [GET 请求参数拼接在 URL 后面,例如:](https://bark.day.app/#/tutorial?id=get-请求参数拼接在-url-后面,例如:) + +```sh +curl https://api.day.app/your_key/推送内容?group=分组©=复制 +``` + +*手动拼接参数到URL上时,请注意URL编码问题,可以参考阅读[常见问题:URL编码](https://bark.day.app/#/faq?id=推送特殊字符导致推送失败,比如-推送内容包含链接,或推送异常-比如-变成空格)* + +##### [POST 请求参数放在请求体中,例如:](https://bark.day.app/#/tutorial?id=post-请求参数放在请求体中,例如:) + +```sh +curl -X POST https://api.day.app/your_key \ + -d'body=推送内容&group=分组©=复制' +``` + +##### [POST 请求支持JSON,例如:](https://bark.day.app/#/tutorial?id=post-请求支持json,例如:) + +```sh +curl -X "POST" "https://api.day.app/your_key" \ + -H 'Content-Type: application/json; charset=utf-8' \ + -d $'{ + "body": "Test Bark Server", + "title": "Test Title", + "badge": 1, + "category": "myNotificationCategory", + "sound": "minuet.caf", + "icon": "https://day.app/assets/images/avatar.jpg", + "group": "test", + "url": "https://mritd.com" +}' +``` + +##### [JSON 请求 key 可以放进请求体中,URL 路径须为 /push,例如](https://bark.day.app/#/tutorial?id=json-请求-key-可以放进请求体中url-路径须为-push,例如) + +```sh +curl -X "POST" "https://api.day.app/push" \ + -H 'Content-Type: application/json; charset=utf-8' \ + -d $'{ + "body": "Test Bark Server", + "title": "Test Title", + "device_key": "your_key" +}' +``` + +## [请求参数](https://bark.day.app/#/tutorial?id=请求参数) + +支持的参数列表,具体效果可在APP内预览。 + +| 参数 | 说明 | +|-----------|---------------------------------------------------------------------------------------------| +| title | 推送标题 | +| body | 推送内容 | +| level | 推送中断级别。 active:默认值,系统会立即亮屏显示通知 timeSensitive:时效性通知,可在专注状态下显示通知。 passive:仅将通知添加到通知列表,不会亮屏提醒。 | +| badge | 推送角标,可以是任意数字 | +| autoCopy | iOS14.5以下自动复制推送内容,iOS14.5以上需手动长按推送或下拉推送 | +| copy | 复制推送时,指定复制的内容,不传此参数将复制整个推送内容。 | +| sound | 可以为推送设置不同的铃声 | +| icon | 为推送设置自定义图标,设置的图标将替换默认Bark图标。 图标会自动缓存在本机,相同的图标 URL 仅下载一次。 | +| group | 对消息进行分组,推送将按group分组显示在通知中心中。 也可在历史消息列表中选择查看不同的群组。 | +| isArchive | 传 1 保存推送,传其他的不保存推送,不传按APP内设置来决定是否保存。 | +| url | 点击推送时,跳转的URL ,支持URL Scheme 和 Universal Link | + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/bark/data.yml b/appstore/bark/data.yml new file mode 100644 index 000000000..fd1c11c34 --- /dev/null +++ b/appstore/bark/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: bark + name: Bark + tags: + - WebSite + - Middleware + - Tool + - Local + shortDescZh: 通知推送工具 + shortDescEn: Notification push tool + type: website + crossVersionUpdate: true + limit: 0 + website: https://bark.day.app/ + github: https://github.com/finb/bark/ + document: https://bark.day.app/ diff --git a/appstore/bark/logo.png b/appstore/bark/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..eba752a83d60091f600d90812fb4801b88620149 GIT binary patch literal 7260 zcma)B_fr#0v`qsNYUo`;N0A;nQUX##5d@T`2x0&!(mSDpAVoSzi8LdKg(zL30)h|- zO^Qg95<1dBk;nJmKk$Co-8(yb&g{&+duQjI6bmy023j6k006*XWTr%gv#$j$5Dud&0~l=a|`9Egs$hjoCxLMpM} zs$U@FPbE`hpFfw6!%EU`DM(jJkKq#o}JYA-;fh%p&ND}{Ym z7H53Um^m8glyeU-3!2-$hhY;2cS-0l%Ui@dN?1w?U)RymIT1|Wnm*A+PL09rfv;D36J%U!DnN+FRw7?H~_*|TC@ zjf&V%>l+qjmMlylvdZnxCatTFu})~e+Ss0}uMOrd;|?z4zV{Fz5@|bj7VfX5g~~Zl z>%A`#yXm$Sdue1f1&+G0tX$m05d@7Gw=?a!L?pYPsH}hzks&P)khz`rv{W zhmIy=yIo!)qY>OFGh{=sJg?Sw9)DOW75z;P7ifk7W51iJKV6{$ zazZ0&J~Jn3PDrQ!2bmu9@oo(awSXJ)#R##d%U=C#^VSqolKq~Z9Qwg7HwgmtVJ@ip zoP`T2B3#Fm@E3^{iw4c*Jb0Rj?N+gdH!C~+c?7%Q83%?SoOE}a5t#vyoJ;k)wu3KT zmD#}@TioAiti~GC#9|#GIRjQFwR@gnZ9%A&c&99W?N-A+|I4U3Yxea0M`#M>VPf~J zl}KfPFm%E|d)^~gppc~&g=XM?QskMu#DZ}Za0!)9fJ!{FN_(^Zy4Iv z!(TXuxAEXi;`Z(YjiuaVfmo(s_3v22=ha@<-4qWnqZk45D=np0P2j#MM5`-&%>;dv z!63jbr!LFIN_sxm1FwIV##nv|&%PabFVMkAcYT9wYSDCU%+e@27V8N?dfQNCso!H& z6DQc2J!nm|xpEpu{Bwn`w@#menW3*LJ2DVkwT2r4fUl@u#(w6UKo$1l{NG)oBGg)e zV97$(R56{*76tfS;V&=YY6KST{7(CP4oFOn@JJ<$Lh}*W3P7IKMh9qG1 z^R6W8Jr_$F=+$7b@Ch6HKoEu=W3~4QO@aa5%PN>9qvuQl)IyH5AZ)kEON5^{K9P|` zeM+Xp0y2l@;HhMFk;x`mp-pB9opkweZP!YTk+7*a zaWGT}#3@-aBFNNpi$iZ!PfUl%4O+9Q@^6ri`A*NBd%>s-nwA@F#-)&(q}mOHhUq{z zAbD3VY5|mR1C)%gpn-=NtUe<<0Kn_SyROh!q8-br6yPTnolZF;!a@(V*JJ%dO_qy0 z7GZ%#?M>MmsD@A}>mbUZe^ID)EUoxG7$}_?j#5uVUx9D~1p_i47`XbUVc}D9u9kv5 zP$(`=LtUuY1rkqA7tE&B(btCZFHSN~@(Cm2gXjxyLghgy3Suz5XPFBqNO0+?L}gyE z(S!!+DSf>F^XrPS$6m0h^)v{-Q@sFha>?W2t`}@NrTkeWIS>l-HPa{oAq?k3c{04P z^YLJmPZzS+hVNvMMP7dcd|(6HN6SX%Z%`l3&`fk(elzX_Fp?H6fcpLm+5kjNfc~D= z-q8QE$%IrV_pFahpXg#tSbdJ!RB%${BZs*+Ut*pQVq=$xHR~~^cYqAMJeft802^;< zEG$|2dtb>|-ggCb{H1?5c`vF_gR5r)$`?q#^TUU@c7#2mBRME}Z1hE(=u)T|u;yAo zYI=}&2h+rZvTr%Zi!O6o=hU?4;JVuke~*OcqU~eOia<0-@Zt0b22w`Qj-2-?gc&mQ zE3aN44G6%gV1Qo>*wG&wbf41#*x?PX)&OYuW`w5S!Lo5iLrFd%wKl}!^K`B0pRHJS z=ev`|#3?51`)zR7ET}cOc$_yne){*LfL*m5?4XPbhk98>r=Tuu^0IubQVW}eFTDm9H8Eu|Uk6MF3riZ{HC90wg$FS!7iP;aT z4-2tcBhQW*Ck|8Pc;A^*sRdK{wQ@In_MSYZ@^!oP=4hsS-_Y6U8qS?2`aN@qhctO} zzcaBVQa$rrX-5ZgJZLRd5=#$=TaVEM+SW_2QiF&JY@-aAPNs< zy0t4axBeO{5RJ4ehSaQ7YRX)#C>6cW5pc&x9>J2|HiGr;P!`c#BzLYX{*fYvwx`j! z&YrRO4C>JJiV~KlaP58LOuc&Je6X|Qhvi>yGwKB%OE|^|yrQy6j8WVM*V1Brl!|RH z>r{K)5_nvdf>(4mvk)Gk9$2S-_S7@V?(5r>l7)RoIo~LmyX!W0XCq6#n^8iyVP2Ci zgfB0snlS23xxa7kj`=X3rqslY45AG~406XKp;zqy8k%DTg8O+psW!HBD>139ro1Fj zM&;%NH>HSfF<`H>ll@U0Yy1a-oNf1yU;s@cWPk#u|HyW$k)uGCT4i6hq6&YxMhpDx zyTU<0SR}KoE8I846T9`L#m>;JMa#SwDBVooGeE_trlMF;#rc@$^y@kBPi1zZSc;Lw z6k037hw!`C5xaFQE%IS=@G^<2zKKm`S>+r?y1bOXzRLakr#ZebYCBx8FjWcAu?_2w zkUkKkvWA&<>12yn=nRj`4VW_aRhF}sh*5nKzJY%-sLG^*b3A~BxrxaJA$=EzmK6uB z5B49#Y{9}*r!D76#+?49aNIP&+`UwZ;UPKmL3OJsZjBUYs}<-KpV?+3ujJz6Rk7 zth;R@iklD*h)X1L@?w9PLk0vMIz1R|3i`IeO=PHu)5S!gy;s27_g{ zY}6Zmohewu&L+i)B}d?EgCMijyWcI1>^dfdk$0G<=~dtI?<~{~1V@*Kea2wa*6=uY zm!S`Rd#ejr+ZC|wQ*shFYH#z)9M4Cd3NdR2=enWudeP4J-5HegC!ct|-MT#+s-<7G z49!;gnAg%#M?Ps`Y+4rvsSE^!PJmHq8~cYldE{UF9A!~9z* z_8Q9n-Rihw6GUYTqOSY$Z+~_M_*Z=`nsVE}Kkuc$Qtk=y1#P?-ezj}~lwXoxd8Z#thvX1B#axI9v(nL}$x%K-gm_mSZUJjXVKRLZa6~e=QzWwEbm~^(c6| zbc?c3)Iii?mAFCQ^yn$C{5QAPVgRr2p8p`|oz+vLunvr$uRlp>pPWTp3?~_Kmy*xZ zDmSPua`&F5Vc<|Wy&9RkCf#X%JZ++(weFm9v zGQEco?hh1qt&p)L2#;%)cBW^_b-vC(GRu>p8c=6d+0rv_A@IC4z-W@jx#J?L(KOU| z7SPG7835&fZ*$14=*<3&Q0@HsfvMkXs|kD9T0_bg)6^TNLCEQ|U)D@`uayn~P~3ph z*U=^cZHCA*mAe}xeD0SuDGprH9U!`;=ADMF48+O)qVx$5?4~qv6?QEX4_~xhs*e<| zx{`*XEV4*C!rFxdD6=CHEmPAtMskBWMrjK1~J+y zyT*zyd2POeZW(B6J4)t_F>nL54<5eBW>e~#lkvcmGP+MsU?_5|{aeoj5`5Z#k$_9Y zH|X?vTTu2^y)=m`639~Q481flJODM7G8GVJIO*!!(Cx}3*>~HB?JJxkW6)7KCo-UM z2b)ie6HpB`R!VMl{6Aj?-}y;59Yf1K!0tpbR_@oC_IQCWJFIZZwev_dIDV$B_ZXgEN1z#ZiKg-9x2?xDMlospVIjZGZa;O>IvCy~D&`l!Rx2)OD5qOhQA%gyHN*x*sZ|iMDBTU}CuK@TH)l zt|W`b`NfayzFpXpl&_Rvr-+_-@^3lgMcA^mAP&zUg;J1B0UAf;c*Or><9ZZGimy&< zZv{I{U-G*}5`-vqFO-s}(|Xik1&u0E$|%Y)m*}n@8A{q2i-|;Y>12z!NorogogdKp zGXGlrAy!%SlX(hMHv6K`e_{KLX*gGtR|LNI?MSE9$YPJ0YLJ-+^2}#3r2_2s#G)z42#S>xQbHXI9-!VY22(%7*ys$ zDX@*haFd*Ic{3RWUpS>Xl2e$A?20}hZEIvYZtsx=PIzTk^>r~*)>Pl@g;5sDa z-*!$9q+3^OLjRsr)AF1e%n9tp^w;TC4@Lgu{0EfPb-SsXUn!QI9q#^XJmQFd?)krE zSH*0Kg|5GCdQh!^C3b}Zo!;gV`oMkk8 zzIRn|+{$vhMT>{_R_k)G%^kyu!e+OmETb`gjJpri)V>HPhnBlOQsKdj63@SdmWmi^ z{v?QO=b=|y$Wj#R3GnaEDg@Pkq=yCu1fctPQTBF4uUis)03{8Q=7@%t*{D>Q$J9x& zDg!#ZLRX@h)zNC*zYJL4F)Xr}UM=Rb+auztYdS`Gfos0}soy%USMEec4AGNenM*E< zq;*iBE|4Aih)f$@9~yIATKL3LY&WHjGVsU0q6s@tyq$H0Ly&Nm60qlbQL>E(RA>Fb zxobzDX?T%}tm6*~^YRp3F|KNcxurkPiKcB|EwjW{Q!%z(lu5grnXv(0fK!|JJ>OWiuDA@GsIGHV-r^PENWLI=$ zZ>5y_-z^1C7Y3Um11hfGm`#mz1n?wOX>-2IqsBXJ^LVAEe_mk{&mgqOYQs` z6aD2?IjmE|!`I7-I*}rTU@MkzVPeI=7p>9SL?+t zqC5mYlAN;sSdLS!W@^@U>gGGrErZNs?p(b(Hp1VunzrV*isw|UFMD}IjU+l?r0atB zKkUZKDitR&KI3Tl7q(P5{kRP~#)#MMj7s@8H^o3tn?O-BJjvJmH6+w9e~{kY94@ z1K(znqa(SRLJG7h{)ChWBCkoCvCdwNraK<5B|cAB-dFiz$UkkDr@>$<;hrI{rAv9dr;k$5PT?s!dN0zj^HSAqdESiYJ+UPN z8)wIJ#5CACHuhOrcsq6x#^D`Pb1GtHjT)&9yce!JbKj@%#~V9-%P23uSdn^_Cz|lE zR@KBVS*r{yygp6$AA3WmYEQ>zzFV!`fZkgGmdTbYP4!PFc{t6Z70eYPH#Ce!HR&it zF8yt;vmK;0mVOyZNTNy~CqTFi_$sU>+$NL{< zR=3kVez|qmY~VNyi?=~X;1?Q(59{y0cw6W#xhH~9aILTYU`ZRU`r>8$;k!*0uc}h= zC>Jt&S;}}r%+_h<1@$=z^&%JdSBK7W{Qy9EFKW-Ir6w(Ep&abw( z4x{xomxGiG^I4?mg)dFCM%*aCgfp(yl#(I2utCnY`RTq-2?HH;SoS{BLM&s%$B$fq z0d~JOM@1Uq=&HdhsUWAdFF#0J115V|8tDSN=T@AEh6=&9Via%79j0>bL6xofYO3)- zOLI)DQHSvBla}>=$FWw$J3Jq9o#)!E#k@f8P5Nw>#{WGQOV4oeGQZj0P?Bo=adqlK zP4c08_8m-_9>X}OFKro#AxK+YbwN{v6Z9I)^b^H-f&gpsp_TRZ4ZPtF9?2=^NN=Mf zZ#EbRHmqDYo-_^jtB$E zs6RM%*;^J z_Ym35nkx3;QyoA9E@QZ>7B^t0c1%OUVws-)Cqs9yIIWdsV#mp2qq)k^F zNeI4WYy#B25U#LBaOR60=q7*OuqEK)D9v3KJ;?S&5S~;;U;|vpQosTT^C$I-V8;2f z6cyk?5Ce$m=L>T2ry2)26DvQNpC2bX|PI`FYQfgFtYl>&0ej=GaQ+D$WYB7h5&XwMBvAu755 zZe_MCq+OD$Da>NDE&~dCOZ$4u`qAH9WB`6r@b}O`zTm2&pZ++zp4*r)rlP8W1JH6O z?1@?Bt2@va30E9Kg2v=*N61xnEv#&LAdF>)_S2zi80bg&kR!X^%-ib}3A}$px9)oD zuq#%`EfS@Thh6E|*}A2hj>o;C2@G21wOHFfjn7R}oP%Q8_1NpSZe-`YXH}D_qa*XwRk&_|ofbT8D4Fem2UwL<`*%#i<4d^>gQIs?e6^0VUOTlF z^|lO%=hsc0#hDP)gb-n9^mZShg!8q|i38ja1ZudcB0p-@`T^$X5yb|^c-J_G>ce-S z|9K6Bw?FcPQTb2p%#wdxw=Feci+M+kY-Lat3%HCgRC}2G(`->yho}njXr|>XT_coA zq6~~m_*;OqM=F~ZrJRrjq4M7aSCZ4x{y3!3IIyZ2uTA$mlRa9B)2q@E7GThLt?!~v zBSl1yVrjX8s)Yf%+Fc3Km#^Z{v_ZsPBG={NGt?8{K)`Mg(@gz;H-YR8=7&A{$ zSBZ_Y704+bjuT|Ud*L3zP8nkO_?u@@J?+0|E8|1d8N%gGn84gIDEb|J5Hi zmMwg5{1^>@9OI0t8`jDV;fl-69>g#e@LW_tCg HyRrWRHTY%v literal 0 HcmV?d00001 diff --git a/appstore/bitmagnet/0.9.5/.env b/appstore/bitmagnet/0.9.5/.env new file mode 100644 index 000000000..de3bd35e0 --- /dev/null +++ b/appstore/bitmagnet/0.9.5/.env @@ -0,0 +1,33 @@ +# Postgres 服务 (前置检查) [必填] +PANEL_POSTGRES_TYPE=postgresql + +# 数据持久化路径 [必填] +BITMAGNET_ROOT_PATH=/home/bitmagnet + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3333 + +# BitTorrent 端口 [必填] +PANEL_APP_PORT_BT=3334 + +# 数据库 主机地址 [必填] +POSTGRES_HOST=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 名称 [必填] +POSTGRES_NAME=bitmagnet + +# 数据库 用户名 [必填] +POSTGRES_USER=bitmagnet + +# 数据库 密码 [必填] +POSTGRES_PASSWORD= + +# 获取 TMDB 元数据 [必填] +TMDB_ENABLED=true + +# TMDB API 密钥 +TMDB_API_KEY= + diff --git a/appstore/bitmagnet/0.9.5/data.yml b/appstore/bitmagnet/0.9.5/data.yml new file mode 100644 index 000000000..328f0a772 --- /dev/null +++ b/appstore/bitmagnet/0.9.5/data.yml @@ -0,0 +1,97 @@ +additionalProperties: + formFields: + - 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/bitmagnet" + edit: true + envKey: BITMAGNET_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 3333 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 3334 + edit: true + envKey: PANEL_APP_PORT_BT + labelZh: BitTorrent 端口 + labelEn: BitTorrent port + required: true + rule: paramPort + type: number + - default: "127.0.0.1" + edit: true + envKey: POSTGRES_HOST + 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: "bitmagnet" + edit: true + envKey: POSTGRES_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + rule: paramCommon + type: text + - default: "bitmagnet" + edit: true + envKey: POSTGRES_USER + labelZh: 数据库 用户名 + labelEn: Database Username + required: true + type: text + - default: "" + edit: true + envKey: POSTGRES_PASSWORD + labelZh: 数据库 密码 + labelEn: Database Password + random: true + required: true + rule: paramComplexity + type: password + - default: "true" + edit: true + envKey: TMDB_ENABLED + labelZh: 获取 TMDB 元数据 + labelEn: Fetch TMDB metadata + required: true + type: select + values: + - label: 允许 + value: "true" + - label: 禁止 + value: "false" + - default: "" + edit: true + envKey: TMDB_API_KEY + labelZh: TMDB API 密钥 + labelEn: TMDB API Key + required: false + type: text diff --git a/appstore/bitmagnet/0.9.5/docker-compose.yml b/appstore/bitmagnet/0.9.5/docker-compose.yml new file mode 100644 index 000000000..989080b1f --- /dev/null +++ b/appstore/bitmagnet/0.9.5/docker-compose.yml @@ -0,0 +1,36 @@ +networks: + 1panel-network: + external: true +services: + bitmagnet: + command: + - worker + - run + - --all + container_name: bitmagnet + dns: + - 1.1.1.1 + - 114.114.114.114 + env_file: + - ./envs/global.env + - .env + environment: + - LOG_FILE_ROTATOR_ENABLED=true + - LOG_LEVEL=info + - LOG_DEVELOPMENT=false + - LOG_JSON=false + - DHT_CRAWLER_SAVE_FILES_THRESHOLD=100 + - PROCESSOR_CONCURRENCY=1 + image: ghcr.io/bitmagnet-io/bitmagnet:v0.9.5 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3333 + - ${PANEL_APP_PORT_BT}:3334/tcp + - ${PANEL_APP_PORT_BT}:3334/udp + restart: always + volumes: + - ${BITMAGNET_ROOT_PATH}/config:/root/.config/bitmagnet + - ${BITMAGNET_ROOT_PATH}/bitmagnet:/root/.local/share/bitmagnet diff --git a/appstore/bitmagnet/0.9.5/envs/default.env b/appstore/bitmagnet/0.9.5/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/bitmagnet/0.9.5/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/bitmagnet/0.9.5/envs/global.env b/appstore/bitmagnet/0.9.5/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/bitmagnet/0.9.5/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/bitmagnet/0.9.5/scripts/init.sh b/appstore/bitmagnet/0.9.5/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/bitmagnet/0.9.5/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/bitmagnet/0.9.5/scripts/uninstall.sh b/appstore/bitmagnet/0.9.5/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/bitmagnet/0.9.5/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/bitmagnet/0.9.5/scripts/upgrade.sh b/appstore/bitmagnet/0.9.5/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/bitmagnet/0.9.5/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/bitmagnet/README.md b/appstore/bitmagnet/README.md new file mode 100644 index 000000000..a2b7c3d9d --- /dev/null +++ b/appstore/bitmagnet/README.md @@ -0,0 +1,60 @@ +# Bitmagnet + +自托管的 BitTorrent 索引器,DHT 爬虫,内容分类器和带 Web UI,GraphQL API 以及 Servarr 堆栈集成的 torrent 搜索引擎。 + +![Bitmagnet](https://file.lifebus.top/imgs/bitmagnet_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) + +## 简介 + +DHT 爬虫是 Bitmagnet 的杀手锏,使其独一无二。那么它是什么呢? Translation: + +你可能知道,可以在你的 BitTorrent 客户端中启用 DHT,这允许你找到正在向分布式哈希表(DHT)宣布磁贴哈希的对等方,而不是向集中式跟踪器。 +DHT 的较不为人知的功能是,它允许您爬取它所知道的信息哈希。这就是 Bitmagnet 的 DHT 爬虫的工作方式 - 它爬取 DHT +网络,请求每个发现的信息哈希的元数据。然后通过尝试对其进行分类并将其与已知的内容关联(如电影和电视节目)进一步丰富这些元数据。 +然后允许你搜索它所索引的一切。 + +这意味着 Bitmagnet 不依赖于任何外部跟踪器或磁力链接索引器。它是一个自包含、自托管的磁力链接索引器,通过 DHT +连接到全球网络中的对等节点,并不断发现新的内容。 + +## 功能与路线图 + +### 当前已实现的功能 + +- [x] DHT 爬虫和协议实现 +- [x] 通用的 BitTorrent 索引器:bitmagnet 可以从任何来源索引磁力链接,而不仅仅是 DHT 网络——目前这仅可以通过 `/import` + 端点实现;更友好的方法正在开发中,请参见以下高优先级功能 +- [x] 一个高度可定制的内容分类器,目前可以识别多种类型的内容,以及与之相关的关键属性,如语言、分辨率、来源(蓝光、网络翻录等),并从包括电影数据库在内的多个数据源补充信息。 +- [x] [一个用于从任何来源摄入磁力链接的导入工具,例如 RARBG 备份](https://bitmagnet.io/guides/import.html) +- [x] 翻译文本: torrent 搜索引擎 +- [x] GraphQL API:当前提供单个搜索查询;还包含一个嵌入式 GraphQL playground 在 `/graphql` +- [x] 在 Angular 中实现的网络用户界面:当前这是一个简单的单页应用,通过 GraphQL API 提供搜索查询的用户界面 +- [x] [一个与 Torznab 兼容的端点,用于与 Serverr 堆栈集成](https://bitmagnet.io/guides/servarr- [ ]integration.html) + +### 高优先级功能尚未实现 + +- [ ] 一个 WebUI 仪表板,显示诸如爬虫吞吐量、任务队列、数据库大小等信息。 +- [ ] 认证,API 密钥,访问级别等。 +- [ ] 管理员 API,一般来说,一个更完整的 GraphQL API +- [ ] 更完整的网络 UI +- [ ] 保存了对特定内容的搜索,以启用除以下功能外的自定义 feeds +- [ ] 与 Prowlarr 索引器代理的双向集成:目前,Bitmagnet 可以作为 Prowlarr 中的索引器添加;双向集成将允许 Bitmagnet 从 + Prowlarr 中配置的任何索引器爬取内容,解锁许多新的内容来源 +- [ ] 更多文档和更多测试! + +### 管道梦想特性 + +事情开始变得有些模糊。目前所有关注点都在实现上述核心功能,但这些想法在未来可能会被探索: + +- [ ] 原地播种:在您的计算机上识别属于索引磁贴的文件,并在移动、重命名或删除磁贴的部分后,允许这些文件原地播种 +- [ ] 与流行的 BitTorrent 客户端集成 +- [ ] 某种联盟:允许朋友连接实例并汇集索引努力,可能涉及众包手动内容策展,以补充自动分类器 +- [ ] 看起来像是去中心化的私人追踪器;我可能指的是部分基于个人信任,并手动剔除任何不良行为者的东西;我可能会对创建看起来有点像 + Tribler 的东西持谨慎态度,尽管这是一个有趣的研究项目,但似乎已经证明,在协议层面上实现信任、声誉和隐私的开销太大,无法成为与原始的 + BitTorrent 相比具有吸引力的替代方案,尽管 BitTorrent 存在一些缺陷 +- [ ] BitTorrent v2 协议的支持:是否会有更广泛的采用使其成为有价值的功能还有待观察 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/bitmagnet/data.yml b/appstore/bitmagnet/data.yml new file mode 100644 index 000000000..2b5fc0fc1 --- /dev/null +++ b/appstore/bitmagnet/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: bitmagnet + name: Bitmagnet + tags: + - WebSite + - Middleware + - Local + shortDescZh: 自托管的 BitTorrent 索引器 + shortDescEn: Self-hosted BitTorrent indexer + type: website + crossVersionUpdate: true + limit: 0 + website: https://bitmagnet.io/ + github: https://github.com/bitmagnet-io/bitmagnet/ + document: https://bitmagnet.io/ diff --git a/appstore/bitmagnet/logo.png b/appstore/bitmagnet/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bbdbe1949fed79cdb0149fa7fa643221d1a8c0c1 GIT binary patch literal 13804 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 b1UftWN> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + echo "APP_ENV_FILE=${CURRENT_DIR}/envs/casdoor.env" >> .env + + if [ "$DB_TYPE" == "mysql" ]; then + echo "dataSourceName=$DB_USER:$DB_PASSWD@tcp($DB_HOSTNAME:$DB_PORT)/" >> .env + fi + + if [ "$DB_TYPE" == "postgres" ]; then + echo "dataSourceName=\"user=$DB_USER password=$DB_PASSWD host=$DB_HOSTNAME port=$DB_PORT sslmode=disable dbname=$DB_NAME\"" >> .env + fi + + if [ -n "$REDIS_PASSWORD" ]; then + echo "redisEndpoint=$REDIS_HOSTNAME:$REDIS_PORT,$REDIS_DBINDEX,$REDIS_PASSWORD" >> .env + else + echo "redisEndpoint=$REDIS_HOSTNAME:$REDIS_PORT,$REDIS_DBINDEX" >> .env + fi + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/casdoor/1.758.0/scripts/uninstall.sh b/appstore/casdoor/1.758.0/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/casdoor/1.758.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/casdoor/1.758.0/scripts/upgrade.sh b/appstore/casdoor/1.758.0/scripts/upgrade.sh new file mode 100644 index 000000000..e32cd1c69 --- /dev/null +++ b/appstore/casdoor/1.758.0/scripts/upgrade.sh @@ -0,0 +1,19 @@ +#!/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 + sed -i '/^APP_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + echo "APP_ENV_FILE=${CURRENT_DIR}/envs/casdoor.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/casdoor/README.md b/appstore/casdoor/README.md new file mode 100644 index 000000000..0ecb25d58 --- /dev/null +++ b/appstore/casdoor/README.md @@ -0,0 +1,95 @@ +# Casdoor + +Casdoor 是一个 UI 优先的身份访问管理 (IAM)/单点登录 (SSO) 平台,其 Web UI 支持 OAuth +2.0、OIDC、SAML、CAS、LDAP、SCIM、WebAuthn、TOTP、MFA、RADIUS、Google Workspace、活动目录和 Kerberos。 + +![Casdoor](https://file.lifebus.top/imgs/casdoor_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) + +## 简介 + +Casdoor是一个基于OAuth 2.0、OIDC、SAML 和 CAS 的,UI-first的身份和访问管理(IAM)/单点登录(SSO)平台。 + +Casdoor是由Casbin社区通过Golang和React进行开发。 + +Casdoor旨在提供一个强大的认证平台来处理用户管理问题。 + ++ ⚡️ 强大的功能和极简的配置。 支持使用 登录和传统的用户名/密码登录,只需几个步骤,Casdoor即可帮助您构建您的用户管理系统。 + ++ 💥 前后端分离架构。 Casdoor提供可随心所欲的网页界面并支持高并发。 + ++ 🥂 活跃的开源社区。 Casdoor是开源的,并有专业团队积极维护中。 + ++ 🌐 多语言支持。 Casdoor支持多种语言,包括中文、英文、法文、以及更多语言。 + +## 特性 + ++ Casdoor 遵循前后端分离架构,采用 Golang 进行开发。 它支持高同步,提供基于网页的用户界面管理,并支持10多种语言的本地化。 + ++ Casdoor 支持第三方应用登录,如 GitHub、谷歌、QQ、微信等,并支持通过插件扩展第三方登录。 + ++ Casdoor 支持基于 Cassbin 的授权管理。 它支持 ACL、RBAC、ABAC 和 RESTful鉴权管理模式。 + ++ Casdoor 提供了手机验证码、电子邮件验证码以及重置密码的功能。 + ++ Casdoor 支持日志的审计和记录。 + ++ Casdoor 可以使用阿里云、腾讯云、七牛云提供的图片CDN云存储功能。 + ++ Casdoor 允许自定义注册、登录以及找回密码页面。 + ++ 通过数据库同步支持与现有系统的集成,从而能够顺利过渡到 Casdoor。 + ++ Casdoor 支持主流数据库: MySQL、PostgreSQL、SQL Server 等, 并支持扩展插件以支持新的数据库。 + +## 安装说明 + +> 全局管理员账户:'built-in/admin' +> 解释:'built-in' 是内置的组织名,'admin' 是内置的用户名。 +> +> 默认用户名:`admin` +> 默认密码:`123` + +### 数据库支持 + +当前仅支持 `MySQL` 和 `PostgreSQL` 数据库。 + +官方支持使用 'SQLite' 数据库,但不建议在生产环境中使用。因此,我们放弃了 'SQLite' 数据库的配置选项。 + +同时还有一些其他数据库的支持,但是这些数据库的支持并不完善,因此我们也放弃了这些数据库的配置选项。 + +### 存储 `本地文件系统` + +Casdoor 支持将用户头像等文件存储在本地文件系统中。默认情况下,Casdoor 会将文件存储在容器内部 `/home/user/casdoor/files` +目录下。 + +我们将其挂载在 持久化目录 `/home/casdoor` 下,以便于数据的持久化。 + +### `Socks5 代理 (地区网络限制)` 配置 + +如果您的网络环境受到地区网络限制,您可以通过配置 `Socks5 代理` 来解决这个问题。 + +格式:host:port + +socks5Proxy 是 SOCKS 代理服务器 IP 地址。 +设置代理端口,因为我们有与Google相关的服务,或者使用Google、GitHub、Facebook、LinkedIn或Steam作为OAuth提供商,这在某些地区可能会受到网络限制。 + +### 数据初始化 `init_data.json` 配置 + +Casdoor 会在第一次启动时,自动初始化数据库。您可以通过配置 `init_data.json` 文件来初始化数据库。 + +配置自定义的 `init_data.json` 文件,需要挂载到容器中。 + +需要修改 `docker-compose.yml` 文件中的 `volumes` 部分,添加自定义配置的挂载,将 `init_data.json` 文件挂载到容器中,覆盖默认配置。 + +```yaml +volumes: + - ./config/init_data.json:/init_data.json +``` + +其中 `./config/init_data.json` 为默认配置文件所在路径,您可以根据实际情况进行修改为自定义绝对文件路径即可。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/casdoor/data.yml b/appstore/casdoor/data.yml new file mode 100644 index 000000000..cc551758c --- /dev/null +++ b/appstore/casdoor/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: casdoor + name: Casdoor + tags: + - WebSite + - Middleware + - Tool + - Local + shortDescZh: 身份和访问管理(IAM)/单点登录(SSO)平台 + shortDescEn: Identity and Access Management (IAM)/Single Sign-On (SSO) platform + type: website + crossVersionUpdate: true + limit: 0 + website: https://casdoor.org/ + github: https://github.com/casdoor/casdoor/ + document: https://casdoor.org/zh/docs/overview/ diff --git a/appstore/casdoor/logo.png b/appstore/casdoor/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..211148377989a895019f6d1082778aa9ec630fc8 GIT binary patch literal 38624 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 literal 0 HcmV?d00001 diff --git a/appstore/certimate/0.2.21/.env b/appstore/certimate/0.2.21/.env new file mode 100644 index 000000000..95ab5a0ab --- /dev/null +++ b/appstore/certimate/0.2.21/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +CERTIMATE_ROOT_PATH=/home/certimate + +# Web UI 端口 [必填] +PANEL_APP_PORT_HTTP=8090 + diff --git a/appstore/certimate/0.2.21/data.yml b/appstore/certimate/0.2.21/data.yml new file mode 100644 index 000000000..c01683633 --- /dev/null +++ b/appstore/certimate/0.2.21/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + formFields: + - default: "/home/certimate" + edit: true + envKey: CERTIMATE_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8090 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: Web UI 端口 + labelEn: Web UI port + required: true + rule: paramPort + type: number diff --git a/appstore/certimate/0.2.21/docker-compose.yml b/appstore/certimate/0.2.21/docker-compose.yml new file mode 100644 index 000000000..c750addaf --- /dev/null +++ b/appstore/certimate/0.2.21/docker-compose.yml @@ -0,0 +1,19 @@ +networks: + 1panel-network: + external: true +services: + certimate: + container_name: certimate + env_file: + - ./envs/global.env + - .env + image: usual2970/certimate:v0.2.21 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8090 + restart: always + volumes: + - ${CERTIMATE_ROOT_PATH}/data:/app/pb_data diff --git a/appstore/certimate/0.2.21/envs/default.env b/appstore/certimate/0.2.21/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/certimate/0.2.21/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/certimate/0.2.21/envs/global.env b/appstore/certimate/0.2.21/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/certimate/0.2.21/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/certimate/0.2.21/scripts/init.sh b/appstore/certimate/0.2.21/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/certimate/0.2.21/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/certimate/0.2.21/scripts/uninstall.sh b/appstore/certimate/0.2.21/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/certimate/0.2.21/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/certimate/0.2.21/scripts/upgrade.sh b/appstore/certimate/0.2.21/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/certimate/0.2.21/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/certimate/README.md b/appstore/certimate/README.md new file mode 100644 index 000000000..23b05c6c0 --- /dev/null +++ b/appstore/certimate/README.md @@ -0,0 +1,58 @@ +# Certimate + +SSL证书管理工具 + +![Certimate](https://file.lifebus.top/imgs/certimate_cover.png) + +开源的SSL证书管理工具,可以帮助你自动申请、部署SSL证书,并在证书即将过期时自动续期。 + +An open-source SSL certificate management tool that helps you automatically apply for and deploy SSL certificates, as +well as automatically renew them when they are about to expire. + +![](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) + +## 简介 + +做个人产品或在小企业负责运维的同学,需要管理多个域名,要给域名申请证书。但手动申请证书有以下缺点: + +😱麻烦:申请、部署证书虽不困难,但也挺麻烦的,尤其是维护多个域名的时候。 + +😭易忘:当前免费证书有效期仅90天,这就要求定期操作,增加工作量的同时,也很容易忘掉,导致网站无法访问。 + +Certimate 就是为了解决上述问题而产生的,它具有以下特点: + ++ 操作简单:自动申请、部署、续期 SSL 证书,全程无需人工干预。 ++ 支持私有部署:部署方法简单,只需下载二进制文件执行即可。二进制文件、docker 镜像全部用 github actions 生成,过程透明,可自行审计。 ++ 数据安全:由于是私有部署,所有数据均存储在本地,不会保存在服务商的服务器,确保数据的安全性。 + +## 概念 + +Certimate 的工作流程如下: + ++ 用户通过 Certimate 管理页面填写申请证书的信息,包括域名、dns 服务商的授权信息、以及要部署到的服务商的授权信息。 ++ Certimate 向证书场商的 API 发起申请请求,获取 SSL 证书。 ++ Certimate 存储证书信息,包括证书内容、私钥、证书有效期等,并在证书即将过期时自动续期。 ++ Certimate 向服务商的 API 发起部署请求,将证书部署到服务商的服务器上。 + +这就涉及域名、dns 服务商的授权信息、部署服务商的授权信息等。 + +## 支持的服务商列表 + +| 服务商 | 是否域名服务商 | 是否部署服务 | 备注 | +|------------|---------|--------|------------------------------------------| +| 阿里云 | 是 | 是 | 支持阿里云注册的域名,支持部署到阿里云 CDN,OSS | +| 腾讯云 | 是 | 是 | 支持腾讯云注册的域名,支持部署到腾讯云 CDN | +| 七牛云 | 否 | 是 | 七牛云没有注册域名服务,支持部署到七牛云 CDN | +| CloudFlare | 是 | 否 | 支持 CloudFlare 注册的域名,CloudFlare 服务自带SSL证书 | +| SSH | 否 | 是 | 支持部署到 SSH 服务器 | +| WEBHOOK | 否 | 是 | 支持回调到 WEBHOOK | + +## 安装说明 + +> 用户名 `admin@certimate.fun` +> +> 密码:`1234567890` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/certimate/data.yml b/appstore/certimate/data.yml new file mode 100644 index 000000000..9284f5490 --- /dev/null +++ b/appstore/certimate/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: certimate + name: Certimate + tags: + - WebSite + - Tool + - Middleware + - Local + shortDescZh: SSL证书管理工具 + shortDescEn: SSL Certificate Management Tool + type: website + crossVersionUpdate: true + limit: 0 + website: https://docs.certimate.me/ + github: https://github.com/usual2970/certimate/ + document: https://docs.certimate.me/docs/intro/ diff --git a/appstore/certimate/logo.png b/appstore/certimate/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e95ace5ca795543a199e2b9607c7ec5d68e96fb2 GIT binary patch literal 17936 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,BO5VlzKO`iv8dP!{HG`+f^X>^9z%3b_^+ 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 .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/cookie-cloud/latest/scripts/uninstall.sh b/appstore/cookie-cloud/latest/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/cookie-cloud/latest/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/cookie-cloud/latest/scripts/upgrade.sh b/appstore/cookie-cloud/latest/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/cookie-cloud/latest/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/cookie-cloud/logo.png b/appstore/cookie-cloud/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..00c7408cb0d6f904ca8c44b3402e33ea0dd8541d GIT binary patch literal 35850 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 .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/deeplx/0.9.8.3/scripts/uninstall.sh b/appstore/deeplx/0.9.8.3/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/deeplx/0.9.8.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/deeplx/0.9.8.3/scripts/upgrade.sh b/appstore/deeplx/0.9.8.3/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/deeplx/0.9.8.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/deeplx/README.md b/appstore/deeplx/README.md new file mode 100644 index 000000000..01a62fe95 --- /dev/null +++ b/appstore/deeplx/README.md @@ -0,0 +1,121 @@ +# DeepLX + +强大的 DeepL 翻译 API + +![DeepLX](https://file.lifebus.top/imgs/deeplx_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) + +## 简介 + +DeepLX 最初由 zu1k 命名并发布,尽管 zu1k 此后已停止维护它并删除了相关存储库。 + +感谢zu1k的贡献。 + +这是zu1k设计的DeepLX Docker镜像的备份,没有任何修改。 + +## 安装说明 + +### http代理服务器地址 + +> 基本格式 + +```shell +# 无鉴权代理 +http://127.0.0.1:7890 +# 有鉴权代理 +http://:@127.0.0.1:7890 +``` + +### 访问令牌以保护您的 API + +> 请注意,如果您不使用访问令牌,您的 API 可能会被滥用。 + +接口调用时,您可以使用 `X-Access-Token` 请求头来传递访问令牌。 + +### DeepL官方提供的API Auth Key + +开通DeepL API后,您将获得一个API Auth Key,您可以使用它来访问DeepL API。 + +### DeepL Pro 帐户 dl_session cookie + +如果您有DeepL Pro帐户,您可以使用 `dl_session` cookie 来访问DeepL API。 + +## 接口简介 + +### 免费端点 + +模拟DeepL iOS客户端发起翻译请求。无限制,但在一定时间内频繁请求会导致429错误。 + +接口:`/translate` +请求方式:POST +请求头: + +| Header | Description | Value | +|:----------------|:--------------------------------------|:---------------------------| +| `Content-Type` | The content type of the request body. | `application/json` | +| `Authorization` | The access token to protect your API. | `Bearer your_access_token` | + +> 如果无法使用 `Authorization` 请求头,您可以使用 `URL Params` 传递 `Authorization`。 +> +> 例如:`/translate?token=your_access_token` + +请求体: + +| 参数名 | 字段类型 | 描述 | 是否必须 | +|:--------------|:---------|:--------|:-------| +| `text` | `string` | 待翻译字段。 | `true` | +| `source_lang` | `string` | 源语言代码 | `true` | +| `target_lang` | `string` | 目标语言代码。 | `true` | + +请求体 JSON 示例: + +```json +{ + "text": "你听说过这个吗?", + "source_lang": "ZH", + "target_lang": "EN" +} +``` + +响应体: + +```json +{ + "alternatives": [ + "Did you hear about this?", + "You've heard about this?", + "You've heard of this?" + ], + "code": 200, + "data": "Have you heard about this?", + "id": 8356681003, + "method": "Free", + "source_lang": "ZH", + "target_lang": "EN" +} +``` + +### 专业端点 + +模拟 DeepL 专业版账户发起翻译请求。无限制,可有效避免 429 问题,但需要提供专业账户的 dl_session 参数,否则无法使用。 + +接口:`/v1/translate` +请求方式:POST + +> 其他参数与免费端点相同。 + +### 官方端点 + +模拟 DeepL 官方 API 发起翻译请求。无限制,但在一定时间内频繁请求将导致 429 错误。 + +接口:`/v2/translate` +请求方式:POST + +> 其他参数与免费端点相同。 +> +> 更多官方API配置请参考 [DeepL 官方文档](https://developers.deepl.com/docs/api-reference/translate) + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/deeplx/data.yml b/appstore/deeplx/data.yml new file mode 100644 index 000000000..a2e0b8a1e --- /dev/null +++ b/appstore/deeplx/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: deeplx + name: DeepLX + tags: + - Tool + - Middleware + - Local + shortDescZh: DeepL 免费API + shortDescEn: DeepL Free API + type: tool + crossVersionUpdate: true + limit: 0 + website: https://www.deepl.com/ + github: https://github.com/OwO-Network/DeepLX + document: https://deeplx.owo.network/ diff --git a/appstore/deeplx/logo.png b/appstore/deeplx/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..3314de2b121b716d16faa8f07ad3bf832a73b574 GIT binary patch literal 29851 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 .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/dockge/1.4.2/scripts/uninstall.sh b/appstore/dockge/1.4.2/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/dockge/1.4.2/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/dockge/1.4.2/scripts/upgrade.sh b/appstore/dockge/1.4.2/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/dockge/1.4.2/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/dockge/README.md b/appstore/dockge/README.md new file mode 100644 index 000000000..e5594a3b0 --- /dev/null +++ b/appstore/dockge/README.md @@ -0,0 +1,25 @@ +# Dockge + +一个花哨、易用、反应灵敏的自托管 docker compose.yaml 堆栈型管理器。 + +![Dockge](https://file.lifebus.top/imgs/dockge_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) + +## 特性 + ++ 🧑‍💼 管理您的 compose.yaml 文件 + + 创建/编辑/启动/停止/重新启动/删除 + + 更新 Docker 镜像 ++ ⌨️ compose.yaml 的交互式编辑器 ++ 🦦 交互式网络终端 ++ 🕷️ (1.4.0 🆕) 多代理支持 - 您可以在一个界面中管理来自不同 Docker 主机的多个堆栈 ++ 🏪 将 docker run ... 命令转换为 compose.yaml ++ 📙 基于文件的结构 - Dockge 不会劫持您的撰写文件,它们会像往常一样存储在您的驱动器上。您可以使用普通的 docker compose + 命令与它们交互 ++ 🚄 反应式 - 一切都是响应式的。进度(Pull/Up/Down)和终端输出是实时的 ++ 🐣 易于使用且精美的 UI - 如果您喜欢 Uptime Kuma 的 UI/UX,您也会喜欢这个 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/dockge/data.yml b/appstore/dockge/data.yml new file mode 100644 index 000000000..b906bb5b1 --- /dev/null +++ b/appstore/dockge/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: dockge + name: Dockge + tags: + - WebSite + - Middleware + - Tool + - Local + shortDescZh: 面向堆栈的管理器 + shortDescEn: Stack-oriented manager + type: website + crossVersionUpdate: true + limit: 0 + website: https://dockge.kuma.pet/ + github: https://github.com/louislam/dockge/ + document: https://github.com/louislam/dockge/wiki/ diff --git a/appstore/dockge/logo.png b/appstore/dockge/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a58944c218053c7c6f5e2e6ae86799acb9777144 GIT binary patch literal 28382 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 L7$VBGY$N^$9)cWN literal 0 HcmV?d00001 diff --git a/appstore/dozzle/8.8.2/.env b/appstore/dozzle/8.8.2/.env new file mode 100644 index 000000000..b4dd4db5f --- /dev/null +++ b/appstore/dozzle/8.8.2/.env @@ -0,0 +1,3 @@ +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + diff --git a/appstore/dozzle/8.8.2/data.yml b/appstore/dozzle/8.8.2/data.yml new file mode 100644 index 000000000..482f7b275 --- /dev/null +++ b/appstore/dozzle/8.8.2/data.yml @@ -0,0 +1,10 @@ +additionalProperties: + formFields: + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number diff --git a/appstore/dozzle/8.8.2/docker-compose.yml b/appstore/dozzle/8.8.2/docker-compose.yml new file mode 100644 index 000000000..bdead699f --- /dev/null +++ b/appstore/dozzle/8.8.2/docker-compose.yml @@ -0,0 +1,32 @@ +networks: + 1panel-network: + external: true +services: + dozzle: + container_name: dozzle + env_file: + - ./envs/global.env + - .env + environment: + - DOZZLE_ADDR=:8080 + - DOZZLE_BASE=/ + - DOZZLE_LEVEL=info + healthcheck: + interval: 3s + retries: 5 + start_period: 30s + test: + - CMD + - /dozzle + - healthcheck + timeout: 30s + image: amir20/dozzle:v8.8.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + restart: always + volumes: + - /var/run/docker.sock:/var/run/docker.sock diff --git a/appstore/dozzle/8.8.2/envs/default.env b/appstore/dozzle/8.8.2/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/dozzle/8.8.2/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/dozzle/8.8.2/envs/global.env b/appstore/dozzle/8.8.2/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/dozzle/8.8.2/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/dozzle/8.8.2/scripts/init.sh b/appstore/dozzle/8.8.2/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/dozzle/8.8.2/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/dozzle/8.8.2/scripts/uninstall.sh b/appstore/dozzle/8.8.2/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/dozzle/8.8.2/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/dozzle/8.8.2/scripts/upgrade.sh b/appstore/dozzle/8.8.2/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/dozzle/8.8.2/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/dozzle/README.md b/appstore/dozzle/README.md new file mode 100644 index 000000000..f5b791371 --- /dev/null +++ b/appstore/dozzle/README.md @@ -0,0 +1,33 @@ +# Dozzle + +Dozzle是一个轻量级的小应用程序,有一个基于web的界面来监控Docker日志。它不存储任何日志文件。它仅用于实时监视容器日志。 + +![Dozzle](https://file.lifebus.top/imgs/dozzle_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) + +## 特性 + +🔍 智能模糊搜索容器名称 + +🔦 使用正则表达式,搜索日志 + +📊 使用 SQL 查询搜索日志 + +🏎 小的内存占用 + +📓 多日志查看的分屏 + +🈷️ 实时统计,包括内存和 CPU 使用情况 + +🚨 多用户身份验证,支持代理转发授权 + +🐳 集群模式支持 + +🛜 监控多个 Docker 主机的代理模式 + +🌙 深色模式 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/dozzle/data.yml b/appstore/dozzle/data.yml new file mode 100644 index 000000000..fedd68544 --- /dev/null +++ b/appstore/dozzle/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: dozzle + name: Dozzle + tags: + - WebSite + - Middleware + - Tool + - Local + shortDescZh: 一个轻量级的小应用程序,有一个基于web的界面来监控Docker日志 + shortDescEn: web-based interface to monitor Docker logs + type: website + crossVersionUpdate: true + recommend: 0 + website: https://dozzle.dev/ + github: https://github.com/amir20/dozzle/ + document: https://dozzle.dev/ diff --git a/appstore/dozzle/logo.png b/appstore/dozzle/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e21fa789b318dd545a1d8a4caa3f36fd6b622a0b GIT binary patch literal 7525 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 LciCmzdPe;hnvT=J literal 0 HcmV?d00001 diff --git a/appstore/dpanel-lite/1.3.0/.env b/appstore/dpanel-lite/1.3.0/.env new file mode 100644 index 000000000..0ea1a5745 --- /dev/null +++ b/appstore/dpanel-lite/1.3.0/.env @@ -0,0 +1,12 @@ +# 数据持久化路径 [必填] +DPANEL_ROOT_PATH=/home/dpanel + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 管理员 用户名 [必填] +INSTALL_USERNAME=admin + +# 管理员 密码 [必填] +INSTALL_PASSWORD=admin + diff --git a/appstore/dpanel-lite/1.3.0/data.yml b/appstore/dpanel-lite/1.3.0/data.yml new file mode 100644 index 000000000..5950bd50a --- /dev/null +++ b/appstore/dpanel-lite/1.3.0/data.yml @@ -0,0 +1,31 @@ +additionalProperties: + formFields: + - default: "/home/dpanel" + edit: true + envKey: DPANEL_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 + - default: "admin" + edit: true + envKey: INSTALL_USERNAME + labelZh: 管理员 用户名 + labelEn: Admin Username + required: true + type: text + - default: "admin" + edit: true + envKey: INSTALL_PASSWORD + labelZh: 管理员 密码 + labelEn: Admin Password + required: true + type: text diff --git a/appstore/dpanel-lite/1.3.0/docker-compose.yml b/appstore/dpanel-lite/1.3.0/docker-compose.yml new file mode 100644 index 000000000..4465fbb52 --- /dev/null +++ b/appstore/dpanel-lite/1.3.0/docker-compose.yml @@ -0,0 +1,33 @@ +networks: + 1panel-network: + external: true +services: + dpanel: + container_name: dpanel-lite + env_file: + - ./envs/global.env + - .env + environment: + - APP_NAME=${CONTAINER_NAME} + image: dpanel/dpanel:1.3.0-lite + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + restart: always + volumes: + - ${DPANEL_ROOT_PATH}/data:/dpanel + - ${DPANEL_ROOT_PATH}/compose:/dpanel/compose + - /var/run/docker.sock:/var/run/docker.sock + dpanel-plugin-explorer: + command: + - sh + - -c + - tail -f /dev/null + container_name: dpanel-plugin-explorer + image: alpine:latest + pid: host + privileged: true + restart: unless-stopped diff --git a/appstore/dpanel-lite/1.3.0/envs/default.env b/appstore/dpanel-lite/1.3.0/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/dpanel-lite/1.3.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/dpanel-lite/1.3.0/envs/global.env b/appstore/dpanel-lite/1.3.0/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/dpanel-lite/1.3.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/dpanel-lite/1.3.0/scripts/init.sh b/appstore/dpanel-lite/1.3.0/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/dpanel-lite/1.3.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/dpanel-lite/1.3.0/scripts/uninstall.sh b/appstore/dpanel-lite/1.3.0/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/dpanel-lite/1.3.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/dpanel-lite/1.3.0/scripts/upgrade.sh b/appstore/dpanel-lite/1.3.0/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/dpanel-lite/1.3.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/dpanel-lite/README.md b/appstore/dpanel-lite/README.md new file mode 100644 index 000000000..053ceecea --- /dev/null +++ b/appstore/dpanel-lite/README.md @@ -0,0 +1,33 @@ +# DPanel + +Docker可视化管理面板 + +![Dockge](https://file.lifebus.top/imgs/dpanel_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) + +## 简介 + +Docker 可视化面板系统,提供完善的 docker 管理功能。 + +该应用为 轻量版 DPanel,不包含域名管理、证书管理等功能。 + +## 安装说明 + +