From 68010fc429f1875703a8313cc7dbade05d34df4d Mon Sep 17 00:00:00 2001 From: QYG2297248353 Date: Fri, 18 Jul 2025 06:34:48 +0000 Subject: [PATCH] Synced apps from source repository via GitHub Actions --- apps/bark/{2.2.3 => 2.2.5}/.env | 0 apps/bark/{2.2.3 => 2.2.5}/data.yml | 0 apps/bark/{2.2.3 => 2.2.5}/docker-compose.yml | 2 +- apps/bark/{2.2.3 => 2.2.5}/envs/default.env | 0 apps/bark/{2.2.3 => 2.2.5}/envs/global.env | 0 apps/bark/{2.2.3 => 2.2.5}/scripts/init.sh | 0 .../{2.2.3 => 2.2.5}/scripts/uninstall.sh | 0 apps/bark/{2.2.3 => 2.2.5}/scripts/upgrade.sh | 0 apps/garage-hq/2.0.0/.env | 15 ++ apps/garage-hq/2.0.0/data.yml | 41 +++++ apps/garage-hq/2.0.0/docker-compose.yml | 26 +++ .../2.0.0}/envs/default.env | 0 .../3.4.6 => garage-hq/2.0.0}/envs/global.env | 0 apps/garage-hq/2.0.0/scripts/init.sh | 68 ++++++++ .../2.0.0}/scripts/uninstall.sh | 0 .../2.0.0}/scripts/upgrade.sh | 0 apps/garage-hq/README.md | 15 ++ apps/garage-hq/data.yml | 14 ++ apps/garage-hq/logo.png | Bin 0 -> 53472 bytes apps/garage-hq/logo.svg | 8 + apps/jproxy/{3.4.6 => 3.4.7}/.env | 0 apps/jproxy/{3.4.6 => 3.4.7}/data.yml | 0 .../{3.4.6 => 3.4.7}/docker-compose.yml | 2 +- .../3.4.7}/envs/default.env | 0 .../3.4.7}/envs/global.env | 0 apps/jproxy/{3.4.6 => 3.4.7}/scripts/init.sh | 0 .../3.4.7}/scripts/uninstall.sh | 0 .../3.4.7}/scripts/upgrade.sh | 0 apps/libretv/202507110114/.env | 6 + apps/libretv/202507110114/data.yml | 17 ++ apps/libretv/202507110114/docker-compose.yml | 19 ++ apps/libretv/202507110114/envs/default.env | 2 + apps/libretv/202507110114/envs/global.env | 2 + .../202507110114}/scripts/init.sh | 0 .../libretv/202507110114/scripts/uninstall.sh | 10 ++ apps/libretv/202507110114/scripts/upgrade.sh | 17 ++ apps/libretv/README.md | 41 +++++ apps/libretv/data.yml | 14 ++ apps/libretv/latest/.env | 6 + apps/libretv/latest/data.yml | 17 ++ apps/libretv/latest/docker-compose.yml | 19 ++ apps/libretv/latest/envs/default.env | 2 + apps/libretv/latest/envs/global.env | 2 + apps/libretv/latest/scripts/init.sh | 17 ++ apps/libretv/latest/scripts/uninstall.sh | 10 ++ apps/libretv/latest/scripts/upgrade.sh | 17 ++ apps/libretv/logo.png | Bin 0 -> 10825 bytes apps/readeck-pg/0.19.2/.env | 60 +++++++ apps/readeck-pg/0.19.2/data.yml | 164 ++++++++++++++++++ apps/readeck-pg/0.19.2/docker-compose.yml | 35 ++++ apps/readeck-pg/0.19.2/envs/default.env | 2 + apps/readeck-pg/0.19.2/envs/global.env | 2 + apps/readeck-pg/0.19.2/scripts/init.sh | 17 ++ apps/readeck-pg/0.19.2/scripts/uninstall.sh | 10 ++ apps/readeck-pg/0.19.2/scripts/upgrade.sh | 17 ++ apps/readeck-pg/README.md | 66 +++++++ apps/readeck-pg/data.yml | 14 ++ apps/readeck-pg/logo.png | Bin 0 -> 16970 bytes apps/readeck-pg/logo.svg | 16 ++ apps/readeck/0.19.2/.env | 42 +++++ apps/readeck/0.19.2/data.yml | 111 ++++++++++++ apps/readeck/0.19.2/docker-compose.yml | 34 ++++ apps/readeck/0.19.2/envs/default.env | 2 + apps/readeck/0.19.2/envs/global.env | 2 + apps/readeck/0.19.2/scripts/init.sh | 17 ++ apps/readeck/0.19.2/scripts/uninstall.sh | 10 ++ apps/readeck/0.19.2/scripts/upgrade.sh | 17 ++ apps/readeck/README.md | 66 +++++++ apps/readeck/data.yml | 14 ++ apps/readeck/logo.png | Bin 0 -> 16970 bytes apps/readeck/logo.svg | 16 ++ apps/rsshub/{2025-07-17 => 2025-07-18}/.env | 0 .../{2025-07-17 => 2025-07-18}/data.yml | 0 .../docker-compose.yml | 2 +- apps/rsshub/2025-07-18/envs/default.env | 2 + apps/rsshub/2025-07-18/envs/global.env | 2 + apps/rsshub/2025-07-18/scripts/init.sh | 17 ++ apps/rsshub/2025-07-18/scripts/uninstall.sh | 10 ++ apps/rsshub/2025-07-18/scripts/upgrade.sh | 17 ++ apps/seaweedfs/3.94/.env | 51 ++++++ apps/seaweedfs/3.94/config/prometheus.yml | 14 ++ apps/seaweedfs/3.94/data.yml | 134 ++++++++++++++ apps/seaweedfs/3.94/docker-compose.yml | 138 +++++++++++++++ apps/seaweedfs/3.94/envs/default.env | 2 + apps/seaweedfs/3.94/envs/global.env | 2 + apps/seaweedfs/3.94/scripts/init.sh | 22 +++ apps/seaweedfs/3.94/scripts/uninstall.sh | 10 ++ apps/seaweedfs/3.94/scripts/upgrade.sh | 17 ++ apps/seaweedfs/README.md | 16 ++ apps/seaweedfs/data.yml | 14 ++ apps/seaweedfs/logo.png | Bin 0 -> 11652 bytes 91 files changed, 1610 insertions(+), 3 deletions(-) rename apps/bark/{2.2.3 => 2.2.5}/.env (100%) rename apps/bark/{2.2.3 => 2.2.5}/data.yml (100%) rename apps/bark/{2.2.3 => 2.2.5}/docker-compose.yml (92%) rename apps/bark/{2.2.3 => 2.2.5}/envs/default.env (100%) rename apps/bark/{2.2.3 => 2.2.5}/envs/global.env (100%) rename apps/bark/{2.2.3 => 2.2.5}/scripts/init.sh (100%) rename apps/bark/{2.2.3 => 2.2.5}/scripts/uninstall.sh (100%) rename apps/bark/{2.2.3 => 2.2.5}/scripts/upgrade.sh (100%) create mode 100644 apps/garage-hq/2.0.0/.env create mode 100644 apps/garage-hq/2.0.0/data.yml create mode 100644 apps/garage-hq/2.0.0/docker-compose.yml rename apps/{jproxy/3.4.6 => garage-hq/2.0.0}/envs/default.env (100%) rename apps/{jproxy/3.4.6 => garage-hq/2.0.0}/envs/global.env (100%) create mode 100644 apps/garage-hq/2.0.0/scripts/init.sh rename apps/{jproxy/3.4.6 => garage-hq/2.0.0}/scripts/uninstall.sh (100%) rename apps/{jproxy/3.4.6 => garage-hq/2.0.0}/scripts/upgrade.sh (100%) create mode 100644 apps/garage-hq/README.md create mode 100644 apps/garage-hq/data.yml create mode 100644 apps/garage-hq/logo.png create mode 100644 apps/garage-hq/logo.svg rename apps/jproxy/{3.4.6 => 3.4.7}/.env (100%) rename apps/jproxy/{3.4.6 => 3.4.7}/data.yml (100%) rename apps/jproxy/{3.4.6 => 3.4.7}/docker-compose.yml (91%) rename apps/{rsshub/2025-07-17 => jproxy/3.4.7}/envs/default.env (100%) rename apps/{rsshub/2025-07-17 => jproxy/3.4.7}/envs/global.env (100%) rename apps/jproxy/{3.4.6 => 3.4.7}/scripts/init.sh (100%) rename apps/{rsshub/2025-07-17 => jproxy/3.4.7}/scripts/uninstall.sh (100%) rename apps/{rsshub/2025-07-17 => jproxy/3.4.7}/scripts/upgrade.sh (100%) create mode 100644 apps/libretv/202507110114/.env create mode 100644 apps/libretv/202507110114/data.yml create mode 100644 apps/libretv/202507110114/docker-compose.yml create mode 100644 apps/libretv/202507110114/envs/default.env create mode 100644 apps/libretv/202507110114/envs/global.env rename apps/{rsshub/2025-07-17 => libretv/202507110114}/scripts/init.sh (100%) create mode 100644 apps/libretv/202507110114/scripts/uninstall.sh create mode 100644 apps/libretv/202507110114/scripts/upgrade.sh create mode 100644 apps/libretv/README.md create mode 100644 apps/libretv/data.yml create mode 100644 apps/libretv/latest/.env create mode 100644 apps/libretv/latest/data.yml create mode 100644 apps/libretv/latest/docker-compose.yml create mode 100644 apps/libretv/latest/envs/default.env create mode 100644 apps/libretv/latest/envs/global.env create mode 100644 apps/libretv/latest/scripts/init.sh create mode 100644 apps/libretv/latest/scripts/uninstall.sh create mode 100644 apps/libretv/latest/scripts/upgrade.sh create mode 100644 apps/libretv/logo.png create mode 100644 apps/readeck-pg/0.19.2/.env create mode 100644 apps/readeck-pg/0.19.2/data.yml create mode 100644 apps/readeck-pg/0.19.2/docker-compose.yml create mode 100644 apps/readeck-pg/0.19.2/envs/default.env create mode 100644 apps/readeck-pg/0.19.2/envs/global.env create mode 100644 apps/readeck-pg/0.19.2/scripts/init.sh create mode 100644 apps/readeck-pg/0.19.2/scripts/uninstall.sh create mode 100644 apps/readeck-pg/0.19.2/scripts/upgrade.sh create mode 100644 apps/readeck-pg/README.md create mode 100644 apps/readeck-pg/data.yml create mode 100644 apps/readeck-pg/logo.png create mode 100644 apps/readeck-pg/logo.svg create mode 100644 apps/readeck/0.19.2/.env create mode 100644 apps/readeck/0.19.2/data.yml create mode 100644 apps/readeck/0.19.2/docker-compose.yml create mode 100644 apps/readeck/0.19.2/envs/default.env create mode 100644 apps/readeck/0.19.2/envs/global.env create mode 100644 apps/readeck/0.19.2/scripts/init.sh create mode 100644 apps/readeck/0.19.2/scripts/uninstall.sh create mode 100644 apps/readeck/0.19.2/scripts/upgrade.sh create mode 100644 apps/readeck/README.md create mode 100644 apps/readeck/data.yml create mode 100644 apps/readeck/logo.png create mode 100644 apps/readeck/logo.svg rename apps/rsshub/{2025-07-17 => 2025-07-18}/.env (100%) rename apps/rsshub/{2025-07-17 => 2025-07-18}/data.yml (100%) rename apps/rsshub/{2025-07-17 => 2025-07-18}/docker-compose.yml (97%) create mode 100644 apps/rsshub/2025-07-18/envs/default.env create mode 100644 apps/rsshub/2025-07-18/envs/global.env create mode 100644 apps/rsshub/2025-07-18/scripts/init.sh create mode 100644 apps/rsshub/2025-07-18/scripts/uninstall.sh create mode 100644 apps/rsshub/2025-07-18/scripts/upgrade.sh create mode 100644 apps/seaweedfs/3.94/.env create mode 100644 apps/seaweedfs/3.94/config/prometheus.yml create mode 100644 apps/seaweedfs/3.94/data.yml create mode 100644 apps/seaweedfs/3.94/docker-compose.yml create mode 100644 apps/seaweedfs/3.94/envs/default.env create mode 100644 apps/seaweedfs/3.94/envs/global.env create mode 100644 apps/seaweedfs/3.94/scripts/init.sh create mode 100644 apps/seaweedfs/3.94/scripts/uninstall.sh create mode 100644 apps/seaweedfs/3.94/scripts/upgrade.sh create mode 100644 apps/seaweedfs/README.md create mode 100644 apps/seaweedfs/data.yml create mode 100644 apps/seaweedfs/logo.png diff --git a/apps/bark/2.2.3/.env b/apps/bark/2.2.5/.env similarity index 100% rename from apps/bark/2.2.3/.env rename to apps/bark/2.2.5/.env diff --git a/apps/bark/2.2.3/data.yml b/apps/bark/2.2.5/data.yml similarity index 100% rename from apps/bark/2.2.3/data.yml rename to apps/bark/2.2.5/data.yml diff --git a/apps/bark/2.2.3/docker-compose.yml b/apps/bark/2.2.5/docker-compose.yml similarity index 92% rename from apps/bark/2.2.3/docker-compose.yml rename to apps/bark/2.2.5/docker-compose.yml index 71ff960..b7addff 100644 --- a/apps/bark/2.2.3/docker-compose.yml +++ b/apps/bark/2.2.5/docker-compose.yml @@ -12,7 +12,7 @@ services: - BARK_SERVER_URL_PREFIX=/ - BARK_SERVER_DATA_DIR=/data - BARK_SERVER_SERVERLESS=false - image: finab/bark-server:v2.2.3 + image: finab/bark-server:v2.2.5 labels: createdBy: Apps networks: diff --git a/apps/bark/2.2.3/envs/default.env b/apps/bark/2.2.5/envs/default.env similarity index 100% rename from apps/bark/2.2.3/envs/default.env rename to apps/bark/2.2.5/envs/default.env diff --git a/apps/bark/2.2.3/envs/global.env b/apps/bark/2.2.5/envs/global.env similarity index 100% rename from apps/bark/2.2.3/envs/global.env rename to apps/bark/2.2.5/envs/global.env diff --git a/apps/bark/2.2.3/scripts/init.sh b/apps/bark/2.2.5/scripts/init.sh similarity index 100% rename from apps/bark/2.2.3/scripts/init.sh rename to apps/bark/2.2.5/scripts/init.sh diff --git a/apps/bark/2.2.3/scripts/uninstall.sh b/apps/bark/2.2.5/scripts/uninstall.sh similarity index 100% rename from apps/bark/2.2.3/scripts/uninstall.sh rename to apps/bark/2.2.5/scripts/uninstall.sh diff --git a/apps/bark/2.2.3/scripts/upgrade.sh b/apps/bark/2.2.5/scripts/upgrade.sh similarity index 100% rename from apps/bark/2.2.3/scripts/upgrade.sh rename to apps/bark/2.2.5/scripts/upgrade.sh diff --git a/apps/garage-hq/2.0.0/.env b/apps/garage-hq/2.0.0/.env new file mode 100644 index 0000000..a3be5c3 --- /dev/null +++ b/apps/garage-hq/2.0.0/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +GARAGE_ROOT_PATH=/home/garage + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3902 + +# S3 API 接口 [必填] +PANEL_APP_PORT_S3_API=3900 + +# RPC 通信 [必填] +PANEL_APP_PORT_RPC=3901 + +# 管理 API [必填] +PANEL_APP_PORT_API=3903 + diff --git a/apps/garage-hq/2.0.0/data.yml b/apps/garage-hq/2.0.0/data.yml new file mode 100644 index 0000000..df9ce99 --- /dev/null +++ b/apps/garage-hq/2.0.0/data.yml @@ -0,0 +1,41 @@ +additionalProperties: + formFields: + - default: "/home/garage" + edit: true + envKey: GARAGE_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 3902 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 3900 + edit: true + envKey: PANEL_APP_PORT_S3_API + labelZh: S3 API 接口 + labelEn: S3 API + required: true + rule: paramPort + type: number + - default: 3901 + edit: true + envKey: PANEL_APP_PORT_RPC + labelZh: RPC 通信 + labelEn: RPC Communication + required: true + rule: paramPort + type: number + - default: 3903 + edit: true + envKey: PANEL_APP_PORT_API + labelZh: 管理 API + labelEn: Manage API + required: true + rule: paramPort + type: number diff --git a/apps/garage-hq/2.0.0/docker-compose.yml b/apps/garage-hq/2.0.0/docker-compose.yml new file mode 100644 index 0000000..182bd31 --- /dev/null +++ b/apps/garage-hq/2.0.0/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true +services: + garage: + container_name: garage-hq + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + image: dxflrs/garage:v2.0.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_S3_API}:3900 + - ${PANEL_APP_PORT_RPC}:3901 + - ${PANEL_APP_PORT_HTTP}:3902 + - ${PANEL_APP_PORT_API}:3903 + restart: always + volumes: + - ${GARAGE_ROOT_PATH}/config/garage.toml:/etc/garage.toml + - ${GARAGE_ROOT_PATH}/meta:/var/lib/garage/meta + - ${GARAGE_ROOT_PATH}/data:/var/lib/garage/data diff --git a/apps/jproxy/3.4.6/envs/default.env b/apps/garage-hq/2.0.0/envs/default.env similarity index 100% rename from apps/jproxy/3.4.6/envs/default.env rename to apps/garage-hq/2.0.0/envs/default.env diff --git a/apps/jproxy/3.4.6/envs/global.env b/apps/garage-hq/2.0.0/envs/global.env similarity index 100% rename from apps/jproxy/3.4.6/envs/global.env rename to apps/garage-hq/2.0.0/envs/global.env diff --git a/apps/garage-hq/2.0.0/scripts/init.sh b/apps/garage-hq/2.0.0/scripts/init.sh new file mode 100644 index 0000000..88bb39b --- /dev/null +++ b/apps/garage-hq/2.0.0/scripts/init.sh @@ -0,0 +1,68 @@ +#!/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 + + # 检查 GARAGE_ROOT_PATH 是否存在 + if [ -z "${GARAGE_ROOT_PATH}" ]; then + echo "Error: GARAGE_ROOT_PATH is not set in .env." + exit 1 + fi + + # 创建 config 目录 + CONFIG_DIR="${GARAGE_ROOT_PATH}/config" + mkdir -p "${CONFIG_DIR}" + CONFIG_FILE="${CONFIG_DIR}/garage.toml" + + # 检查文件是否存在并包含 admin_token + if [ -f "${CONFIG_FILE}" ] && grep -q '^admin_token' "${CONFIG_FILE}"; then + echo "garage.toml already exists and contains admin_token. Skipping creation." + else + echo "Creating or updating garage.toml..." + + cat > "${CONFIG_FILE}" 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 ag8naw71IlXV?|H^0000 + + + diff --git a/apps/jproxy/3.4.6/.env b/apps/jproxy/3.4.7/.env similarity index 100% rename from apps/jproxy/3.4.6/.env rename to apps/jproxy/3.4.7/.env diff --git a/apps/jproxy/3.4.6/data.yml b/apps/jproxy/3.4.7/data.yml similarity index 100% rename from apps/jproxy/3.4.6/data.yml rename to apps/jproxy/3.4.7/data.yml diff --git a/apps/jproxy/3.4.6/docker-compose.yml b/apps/jproxy/3.4.7/docker-compose.yml similarity index 91% rename from apps/jproxy/3.4.6/docker-compose.yml rename to apps/jproxy/3.4.7/docker-compose.yml index ad35238..7d539ef 100644 --- a/apps/jproxy/3.4.6/docker-compose.yml +++ b/apps/jproxy/3.4.7/docker-compose.yml @@ -11,7 +11,7 @@ services: - PUID=0 - PGID=0 - TZ=Asia/Shanghai - image: luckypuppy514/jproxy:v3.4.6 + image: luckypuppy514/jproxy:v3.4.7 labels: createdBy: Apps networks: diff --git a/apps/rsshub/2025-07-17/envs/default.env b/apps/jproxy/3.4.7/envs/default.env similarity index 100% rename from apps/rsshub/2025-07-17/envs/default.env rename to apps/jproxy/3.4.7/envs/default.env diff --git a/apps/rsshub/2025-07-17/envs/global.env b/apps/jproxy/3.4.7/envs/global.env similarity index 100% rename from apps/rsshub/2025-07-17/envs/global.env rename to apps/jproxy/3.4.7/envs/global.env diff --git a/apps/jproxy/3.4.6/scripts/init.sh b/apps/jproxy/3.4.7/scripts/init.sh similarity index 100% rename from apps/jproxy/3.4.6/scripts/init.sh rename to apps/jproxy/3.4.7/scripts/init.sh diff --git a/apps/rsshub/2025-07-17/scripts/uninstall.sh b/apps/jproxy/3.4.7/scripts/uninstall.sh similarity index 100% rename from apps/rsshub/2025-07-17/scripts/uninstall.sh rename to apps/jproxy/3.4.7/scripts/uninstall.sh diff --git a/apps/rsshub/2025-07-17/scripts/upgrade.sh b/apps/jproxy/3.4.7/scripts/upgrade.sh similarity index 100% rename from apps/rsshub/2025-07-17/scripts/upgrade.sh rename to apps/jproxy/3.4.7/scripts/upgrade.sh diff --git a/apps/libretv/202507110114/.env b/apps/libretv/202507110114/.env new file mode 100644 index 0000000..bf720e2 --- /dev/null +++ b/apps/libretv/202507110114/.env @@ -0,0 +1,6 @@ +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 密码 [必填] +PASSWORD=libretv + diff --git a/apps/libretv/202507110114/data.yml b/apps/libretv/202507110114/data.yml new file mode 100644 index 0000000..b24844e --- /dev/null +++ b/apps/libretv/202507110114/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + formFields: + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "libretv" + edit: true + envKey: PASSWORD + labelZh: 密码 + labelEn: Password + required: true + type: password diff --git a/apps/libretv/202507110114/docker-compose.yml b/apps/libretv/202507110114/docker-compose.yml new file mode 100644 index 0000000..702e74b --- /dev/null +++ b/apps/libretv/202507110114/docker-compose.yml @@ -0,0 +1,19 @@ +networks: + 1panel-network: + external: true +services: + libretv: + container_name: libretv + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + image: bestzwei/libretv:202507110114 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + restart: always diff --git a/apps/libretv/202507110114/envs/default.env b/apps/libretv/202507110114/envs/default.env new file mode 100644 index 0000000..cd05f46 --- /dev/null +++ b/apps/libretv/202507110114/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/apps/libretv/202507110114/envs/global.env b/apps/libretv/202507110114/envs/global.env new file mode 100644 index 0000000..e10989f --- /dev/null +++ b/apps/libretv/202507110114/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/apps/rsshub/2025-07-17/scripts/init.sh b/apps/libretv/202507110114/scripts/init.sh similarity index 100% rename from apps/rsshub/2025-07-17/scripts/init.sh rename to apps/libretv/202507110114/scripts/init.sh diff --git a/apps/libretv/202507110114/scripts/uninstall.sh b/apps/libretv/202507110114/scripts/uninstall.sh new file mode 100644 index 0000000..c86c4fb --- /dev/null +++ b/apps/libretv/202507110114/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/apps/libretv/202507110114/scripts/upgrade.sh b/apps/libretv/202507110114/scripts/upgrade.sh new file mode 100644 index 0000000..07fb8c3 --- /dev/null +++ b/apps/libretv/202507110114/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/apps/libretv/README.md b/apps/libretv/README.md new file mode 100644 index 0000000..44dec34 --- /dev/null +++ b/apps/libretv/README.md @@ -0,0 +1,41 @@ +# LibreTV + +自由观影,畅享精彩 + +![LibreTV](https://file.lifebus.top/imgs/libretv_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) + +## 简介 + +LibreTV 是一个轻量级、免费的在线视频搜索与观看平台,提供来自多个视频源的内容搜索与播放服务。无需注册,即开即用,支持多种设备访问。项目结合了前端技术和后端代理功能,可部署在支持服务端功能的各类网站托管服务上。 + +## 特性 + +### 完全免费 + +100%免费使用,无任何付费功能,无会员制度,让每个人都能享受自由观影。 + +### 智能广告过滤 + +内置HLS广告切片过滤逻辑,尽可能减少视频播放中的广告干扰,提供更纯净的观影体验。 + +### 开源透明 + +完全开源,代码透明,社区驱动开发,安全可信赖。 + +### 多源聚合 + +聚合多个优质视频源,智能搜索,丰富的内容库满足不同用户的观影需求。支持标准苹果CMS V10 API格式,可自定义接口源。 + +### 响应式设计 + +完美适配手机、平板、电脑等各种设备,支持键盘快捷键操作,随时随地享受观影。 + +### 易于部署 + +支持Docker、Vercel、Netlify、Cloudflare等多种部署方式,快速搭建个人实例。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/apps/libretv/data.yml b/apps/libretv/data.yml new file mode 100644 index 0000000..1bf1ad1 --- /dev/null +++ b/apps/libretv/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: libretv + name: LibreTV + tags: + - WebSite + - Local + shortDescZh: 免费在线视频搜索与观看平台 + shortDescEn: Free online video search and viewing platform + type: website + crossVersionUpdate: true + limit: 0 + website: https://libretv.is-an.org/ + github: https://github.com/LibreSpark/LibreTV/ + document: https://libretv.is-an.org/ diff --git a/apps/libretv/latest/.env b/apps/libretv/latest/.env new file mode 100644 index 0000000..bf720e2 --- /dev/null +++ b/apps/libretv/latest/.env @@ -0,0 +1,6 @@ +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 密码 [必填] +PASSWORD=libretv + diff --git a/apps/libretv/latest/data.yml b/apps/libretv/latest/data.yml new file mode 100644 index 0000000..b24844e --- /dev/null +++ b/apps/libretv/latest/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + formFields: + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "libretv" + edit: true + envKey: PASSWORD + labelZh: 密码 + labelEn: Password + required: true + type: password diff --git a/apps/libretv/latest/docker-compose.yml b/apps/libretv/latest/docker-compose.yml new file mode 100644 index 0000000..61f39a4 --- /dev/null +++ b/apps/libretv/latest/docker-compose.yml @@ -0,0 +1,19 @@ +networks: + 1panel-network: + external: true +services: + libretv: + container_name: libretv + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + image: bestzwei/libretv:latest + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + restart: always diff --git a/apps/libretv/latest/envs/default.env b/apps/libretv/latest/envs/default.env new file mode 100644 index 0000000..cd05f46 --- /dev/null +++ b/apps/libretv/latest/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/apps/libretv/latest/envs/global.env b/apps/libretv/latest/envs/global.env new file mode 100644 index 0000000..e10989f --- /dev/null +++ b/apps/libretv/latest/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/apps/libretv/latest/scripts/init.sh b/apps/libretv/latest/scripts/init.sh new file mode 100644 index 0000000..07fb8c3 --- /dev/null +++ b/apps/libretv/latest/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/apps/libretv/latest/scripts/uninstall.sh b/apps/libretv/latest/scripts/uninstall.sh new file mode 100644 index 0000000..c86c4fb --- /dev/null +++ b/apps/libretv/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/apps/libretv/latest/scripts/upgrade.sh b/apps/libretv/latest/scripts/upgrade.sh new file mode 100644 index 0000000..07fb8c3 --- /dev/null +++ b/apps/libretv/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/apps/libretv/logo.png b/apps/libretv/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1d96ad75671f46837f96abc96f7b9c50cf190d84 GIT binary patch literal 10825 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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/apps/readeck-pg/0.19.2/scripts/uninstall.sh b/apps/readeck-pg/0.19.2/scripts/uninstall.sh new file mode 100644 index 0000000..c86c4fb --- /dev/null +++ b/apps/readeck-pg/0.19.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/apps/readeck-pg/0.19.2/scripts/upgrade.sh b/apps/readeck-pg/0.19.2/scripts/upgrade.sh new file mode 100644 index 0000000..07fb8c3 --- /dev/null +++ b/apps/readeck-pg/0.19.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/apps/readeck-pg/README.md b/apps/readeck-pg/README.md new file mode 100644 index 0000000..c73d8c4 --- /dev/null +++ b/apps/readeck-pg/README.md @@ -0,0 +1,66 @@ +# Readeck + +Readeck 是一个简单的网络应用程序,可让您保存您喜欢并希望永久保留的网页的宝贵可读内容。 +将其视为书签管理器和稍后阅读工具。 + +![Readeck](https://file.lifebus.top/imgs/readeck_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) + +## 简介 + +Readeck 是一个开源的网页内容存档工具,它不仅能像普通书签管理器一样保存链接,还能将网页内容(包括文字、图片甚至视频)完整打包成离线文件。 +就算原网站倒闭跑路,你保存的内容依然妥妥存在自己的服务器里! + +## 特性 + +### 🔖 书签 + +喜欢你正在阅读的页面?把链接粘贴到 Readeck 就完成了! + +### 📸 文章、图片和视频 + +Readeck 会保存网页的可读内容,方便您稍后阅读。它还能检测页面内容是图片还是视频,并相应地调整处理方式。 + +### ⭐ 标签、收藏、存档 + +将书签移动到档案或收藏夹并添加任意数量的标签。 + +### 🖍️ 亮点 + +突出显示书签的重要内容,以便以后轻松找到。 + +### 🗃️ 收藏集 + +如果您需要一个专门的部分来存储过去两周内标有“cat”的所有书签,Readeck 可让您将此搜索查询保存到一个集合中,以便您以后访问它。 + +### 📖 电子书导出 + +还有什么比在电子阅读器上阅读你收藏的文章更棒的呢?你可以将任何文章导出为电子书文件 (EPUB)。你甚至可以将整个收藏集导出为一本书! + +除此之外,如果您的电子阅读器支持 OPDS,您可以直接从电子阅读器访问 Readeck 的目录和收藏。 + +### 🔎 全文搜索 + +无论您需要从文章中查找模糊的文字,还是查找具有特定标签或来自特定网站的所有文章,我们都能满足您的需求! + +### 🚀 快! + +Readeck 是对那些看似枯燥乏味却久经考验的技术产品的现代诠释。它保证了极快的响应时间和流畅的用户体验。 + +### 🔒 专为保护您的隐私和长期存档而打造 + +你喜欢的这篇文章明年还会上线吗?十年后呢?也许不会;也许它连文字和图片都消失了。出于这个原因,也为了保护你的隐私,当你保存链接时,所有文字和图片都会存储在你的 +Readeck 实例中。 +除视频外,您的浏览器不会向外部网站发出任何请求。 + +### 🧩 浏览器扩展 + +想在浏览时保存一些内容以供日后使用?无需复制粘贴链接。安装浏览器扩展程序,一键保存书签! + ++ [Mozilla Firefox](https://addons.mozilla.org/en-US/firefox/addon/readeck/) ++ [Google Chrome](https://chromewebstore.google.com/detail/readeck/jnmcpmfimecibicbojhopfkcbmkafhee) + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/apps/readeck-pg/data.yml b/apps/readeck-pg/data.yml new file mode 100644 index 0000000..2b7419f --- /dev/null +++ b/apps/readeck-pg/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: readeck-pg + name: Readeck (PostgreSQL版) + tags: + - WebSite + - Local + shortDescZh: 网页内容存档工具 + shortDescEn: web content archiving tool + type: website + crossVersionUpdate: true + limit: 0 + website: https://readeck.org/ + github: https://codeberg.org/readeck/readeck/ + document: https://readeck.org/ diff --git a/apps/readeck-pg/logo.png b/apps/readeck-pg/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a32d613d7ce6b5e9e5d39b1e0db242dac1afb3a4 GIT binary patch literal 16970 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 literal 0 KcmV+b0RR6000031 diff --git a/apps/readeck-pg/logo.svg b/apps/readeck-pg/logo.svg new file mode 100644 index 0000000..7335416 --- /dev/null +++ b/apps/readeck-pg/logo.svg @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/apps/readeck/0.19.2/.env b/apps/readeck/0.19.2/.env new file mode 100644 index 0000000..37c34c5 --- /dev/null +++ b/apps/readeck/0.19.2/.env @@ -0,0 +1,42 @@ +# 数据持久化路径 [必填] +READECK_ROOT_PATH=/home/readeck + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8000 + +# 前缀路径 +READECK_SERVER_PREFIX=/ + +# HTTP 请求中允许的主机名列表 +READECK_ALLOWED_HOSTS= + +# 绑定域名 +READECK_SERVER_BASE_URL= + +# 分享有效期 [必填] +READECK_PUBLIC_SHARE_TTL=24 + +# 邮件服务器 +READECK_MAIL_HOST=smtp.qq.com + +# 邮件服务器 端口 +READECK_MAIL_PORT=465 + +# 邮件鉴权 用户名 +READECK_MAIL_USERNAME= + +# 邮件鉴权 密码 +READECK_MAIL_PASSWORD= + +# 邮件发送者 +READECK_MAIL_FROM= + +# 邮件发送者 (无回复) +READECK_MAIL_FROMNOREPLY= + +# 服务器证书验证 +READECK_MAIL_INSECURE=false + +# SMTP 主机 加密方式 +READECK_MAIL_ENCRYPTION= + diff --git a/apps/readeck/0.19.2/data.yml b/apps/readeck/0.19.2/data.yml new file mode 100644 index 0000000..a522211 --- /dev/null +++ b/apps/readeck/0.19.2/data.yml @@ -0,0 +1,111 @@ +additionalProperties: + formFields: + - default: "/home/readeck" + edit: true + envKey: READECK_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8000 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "/" + edit: true + envKey: READECK_SERVER_PREFIX + labelZh: 前缀路径 + labelEn: Prefix path + required: false + type: text + - default: "" + edit: true + envKey: READECK_ALLOWED_HOSTS + labelZh: HTTP 请求中允许的主机名列表 + labelEn: HTTP request allowed host name list + required: false + type: text + - default: "" + edit: true + envKey: READECK_SERVER_BASE_URL + labelZh: 绑定域名 + labelEn: Binding domain + required: false + type: text + - default: 24 + edit: true + envKey: READECK_PUBLIC_SHARE_TTL + labelZh: 分享有效期 + labelEn: Share validity period + required: true + type: number + - default: "smtp.qq.com" + edit: true + envKey: READECK_MAIL_HOST + labelZh: 邮件服务器 + labelEn: Mail Server + required: false + type: text + - default: 465 + edit: true + envKey: READECK_MAIL_PORT + labelZh: 邮件服务器 端口 + labelEn: Mail Server Port + required: false + type: number + - default: "" + edit: true + envKey: READECK_MAIL_USERNAME + labelZh: 邮件鉴权 用户名 + labelEn: Mail Username + required: false + type: text + - default: "" + edit: true + envKey: READECK_MAIL_PASSWORD + labelZh: 邮件鉴权 密码 + labelEn: Mail Password + required: false + type: password + - default: "" + edit: true + envKey: READECK_MAIL_FROM + labelZh: 邮件发送者 + labelEn: Mail Sender + required: false + type: text + - default: "" + edit: true + envKey: READECK_MAIL_FROMNOREPLY + labelZh: 邮件发送者 (无回复) + labelEn: Mail Sender (No Reply) + required: false + type: text + - default: "false" + edit: true + envKey: READECK_MAIL_INSECURE + labelZh: 服务器证书验证 + labelEn: Server certificate verification + required: false + type: select + values: + - label: 不验证 + value: "true" + - label: 验证 + value: "false" + - default: "" + edit: true + envKey: READECK_MAIL_ENCRYPTION + labelZh: SMTP 主机 加密方式 + labelEn: SMTP Host Encryption Method + required: false + type: select + values: + - label: StartTLS + value: "starttls" + - label: SSL/TLS + value: "ssltls" diff --git a/apps/readeck/0.19.2/docker-compose.yml b/apps/readeck/0.19.2/docker-compose.yml new file mode 100644 index 0000000..7218dac --- /dev/null +++ b/apps/readeck/0.19.2/docker-compose.yml @@ -0,0 +1,34 @@ +networks: + 1panel-network: + external: true +services: + readeck: + container_name: readeck + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + - READECK_LOG_LEVEL=info + - READECK_SERVER_HOST=0.0.0.0 + - READECK_SERVER_PORT=${PANEL_APP_PORT_HTTP} + healthcheck: + interval: 30s + retries: 3 + test: + - CMD + - /bin/readeck + - healthcheck + - -config + - config.toml + timeout: 2s + image: codeberg.org/readeck/readeck:0.19.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP} + restart: always + volumes: + - ${READECK_ROOT_PATH}/data:/data diff --git a/apps/readeck/0.19.2/envs/default.env b/apps/readeck/0.19.2/envs/default.env new file mode 100644 index 0000000..cd05f46 --- /dev/null +++ b/apps/readeck/0.19.2/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/apps/readeck/0.19.2/envs/global.env b/apps/readeck/0.19.2/envs/global.env new file mode 100644 index 0000000..e10989f --- /dev/null +++ b/apps/readeck/0.19.2/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/apps/readeck/0.19.2/scripts/init.sh b/apps/readeck/0.19.2/scripts/init.sh new file mode 100644 index 0000000..07fb8c3 --- /dev/null +++ b/apps/readeck/0.19.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/apps/readeck/0.19.2/scripts/uninstall.sh b/apps/readeck/0.19.2/scripts/uninstall.sh new file mode 100644 index 0000000..c86c4fb --- /dev/null +++ b/apps/readeck/0.19.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/apps/readeck/0.19.2/scripts/upgrade.sh b/apps/readeck/0.19.2/scripts/upgrade.sh new file mode 100644 index 0000000..07fb8c3 --- /dev/null +++ b/apps/readeck/0.19.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/apps/readeck/README.md b/apps/readeck/README.md new file mode 100644 index 0000000..c73d8c4 --- /dev/null +++ b/apps/readeck/README.md @@ -0,0 +1,66 @@ +# Readeck + +Readeck 是一个简单的网络应用程序,可让您保存您喜欢并希望永久保留的网页的宝贵可读内容。 +将其视为书签管理器和稍后阅读工具。 + +![Readeck](https://file.lifebus.top/imgs/readeck_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) + +## 简介 + +Readeck 是一个开源的网页内容存档工具,它不仅能像普通书签管理器一样保存链接,还能将网页内容(包括文字、图片甚至视频)完整打包成离线文件。 +就算原网站倒闭跑路,你保存的内容依然妥妥存在自己的服务器里! + +## 特性 + +### 🔖 书签 + +喜欢你正在阅读的页面?把链接粘贴到 Readeck 就完成了! + +### 📸 文章、图片和视频 + +Readeck 会保存网页的可读内容,方便您稍后阅读。它还能检测页面内容是图片还是视频,并相应地调整处理方式。 + +### ⭐ 标签、收藏、存档 + +将书签移动到档案或收藏夹并添加任意数量的标签。 + +### 🖍️ 亮点 + +突出显示书签的重要内容,以便以后轻松找到。 + +### 🗃️ 收藏集 + +如果您需要一个专门的部分来存储过去两周内标有“cat”的所有书签,Readeck 可让您将此搜索查询保存到一个集合中,以便您以后访问它。 + +### 📖 电子书导出 + +还有什么比在电子阅读器上阅读你收藏的文章更棒的呢?你可以将任何文章导出为电子书文件 (EPUB)。你甚至可以将整个收藏集导出为一本书! + +除此之外,如果您的电子阅读器支持 OPDS,您可以直接从电子阅读器访问 Readeck 的目录和收藏。 + +### 🔎 全文搜索 + +无论您需要从文章中查找模糊的文字,还是查找具有特定标签或来自特定网站的所有文章,我们都能满足您的需求! + +### 🚀 快! + +Readeck 是对那些看似枯燥乏味却久经考验的技术产品的现代诠释。它保证了极快的响应时间和流畅的用户体验。 + +### 🔒 专为保护您的隐私和长期存档而打造 + +你喜欢的这篇文章明年还会上线吗?十年后呢?也许不会;也许它连文字和图片都消失了。出于这个原因,也为了保护你的隐私,当你保存链接时,所有文字和图片都会存储在你的 +Readeck 实例中。 +除视频外,您的浏览器不会向外部网站发出任何请求。 + +### 🧩 浏览器扩展 + +想在浏览时保存一些内容以供日后使用?无需复制粘贴链接。安装浏览器扩展程序,一键保存书签! + ++ [Mozilla Firefox](https://addons.mozilla.org/en-US/firefox/addon/readeck/) ++ [Google Chrome](https://chromewebstore.google.com/detail/readeck/jnmcpmfimecibicbojhopfkcbmkafhee) + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/apps/readeck/data.yml b/apps/readeck/data.yml new file mode 100644 index 0000000..be5edb2 --- /dev/null +++ b/apps/readeck/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: readeck + name: Readeck + tags: + - WebSite + - Local + shortDescZh: 网页内容存档工具 + shortDescEn: web content archiving tool + type: website + crossVersionUpdate: true + limit: 0 + website: https://readeck.org/ + github: https://codeberg.org/readeck/readeck/ + document: https://readeck.org/ diff --git a/apps/readeck/logo.png b/apps/readeck/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a32d613d7ce6b5e9e5d39b1e0db242dac1afb3a4 GIT binary patch literal 16970 zcmV-QLbbh#P)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H1AOJ~3 zK~#90?cI5NRp)*0`|q>%q*(|_fDjTAgCS-fZ3bh5huAT(lQbbsLY$_jO>^$+-p=hk zr}rjpI-J+NCvAFqZhA7DX7Jckr*&d%C-KmDHelw#1|tj@&;$}_9`^LyKR}q7E$v~g zz4zz+PXgL|?O$R`>#Jw2@3V}xR!E##|AmTx<20JMX)wk%#HCteR4J)SR+W+}CHW+k zOLAo7$g14cp#dP<7!5X9ECS)mdY-FK+EVS!b`D_})lwV7Gnw zM?-E8=0ya6^UMREuL@e{Hfx+!#>Q7lW{ISr+j9W`k`k8e4r`pZjO-g>#on-+p6GCU zC@;v{0ARlH4JWYe&>|z}E^F*vM&=Glez)fW0Hjr1GP`8#OHSN*X{i7BEB57=qizr7 zhP(;@<{RH|{5y`UG&c4bW6Wn{Rpa(d0038YO7`bQ&QFH>PW&RD!a!aGfYALL=UGR; z#YrCka2+jH`iY6#9}GYD*gm(1Nw=I00A}r%3xdV5k6RP}ijld??RfwI*~ILyR^N{l z4LxC>e6r8&Y0@F*0zk?AU!D|kqFIA*)YIGH%ZU z0LX1t_9Z#KKMgm?jsI5o z*~fRdJ;;rCIsllpUoHriME{ed|19?92LNP;sFnR6k+Ab;_W4Kp-5%yzJR1Ol_dm4M zIQB6~v)rBq0Dv)g&l>y1@TSMMxjo3$crE}KV@zoM#^1Hle-*#=0|2sHRMOvs3y1&8 zYxf3tDgYFH;&XNJnEz2L-R|}*005+lkzRFTcH_X$A3N#xEF(M<00Q@aVU2N|Cyg}G z?O6Z-NHrsM80&m)@Y#o7a(foZBOB-h*FW?X$LGAn$sYiatE^NNH}PMF)_?K;G{(5T zbFHf@0A|C6!r(yY$1>XB+7JK$WSsezaG&ot?8`qIa%}>)0)Y9{mnuV%_)o2Ln=1nV z0N^I0twFzep!caqPPy{&ZUlgWkNw7U>x=zd(oGrvZ~y?ja=llZ}_=KwrBD~GkOzX;DIl#Ha`23IQatrFrv~p_T|C{9$J^l z56xHr2t4r6?T(HATvp|o`b+=-vP4PT+Gh$L*mzH-J}@Hzpm6<{?sBaCrKHkKd>#M* zS*XZb^K`+3U%WdLAC~re00JNX(h5iM7bKOW^@9Ka$PEMWc>KP|bC184&JRgz00`dy zg@wj(ekG|QZ65*vK3(#%vJ8vuYj(-@A} zXUzk@QL$R#2Oe4%xAu8S{*)XL003MpW{myV(5A;;NX5ZY5&()m@wvKq%)i4* z)hU<>003Ntkxo0l=#qh-{qu=rkCpT#0P~G+IMI0EVNU)40Hl|ds^c;L<7UGKU$Vza zIsgQBH2r5|?b>9I0{{SS%u2Tf2Mhi*+2bU22_U%s3rmb~-jWndb`Ssnkg%wYo7Lgx z9@#q91B`hEz--u1XpHlOIQatrkZFG7*hkEU4TWPpz?cI-aIoO(l5QI7`vCwzQf>+k zh5qlczIjZS074IbX})ZHyQ~6Z{a^q9khG|EoaN!CAKo?EH;#G*z^q;CSKR)PlRp3e zuJfB%{QF~R1&lfXgi5A-RkBM)`#t~wkOoFe0|TM2jQVY(xddR=f1x5|oI_Ts8tn%G z0DyEcXTkwQOA0DzRT zR$3H(=FvSjdSQYm^!Q&V{#pP4;1Xk`KTqg|H(CJ*KJdlG#%jAHlZwdz06o`kp zv^mfXf2%iEe)qc6#Ok005bAy>t0h13>7(FU^%UVioYlr4Bio!CT31y7=#}2mscY4NB|@!9d4sB}x8ZP}5eeRl}`o zbgJoqPVU^QzSHe4PYM86vT?gXmj!@J_5m;(Huyq=p;jwZXL>lmt19XnG-J)(Dz3co zw?*%%RyFV5uJ%Lk$j0Ism<|AL%t#%>g~OBVlTXGj{N2R?Ah7<6D;=XZU6~H>n9>O~ zn!e^vjjOF6^?Sqp{c1a~SIv93Yq+;J4buU@=)|p7MV@{1t&u-patXk3bT7;Q$akTV zGEH5+N;UHqj`>EvU~#ePm#)y1#mm+Cev?}E@6_4j$5J~e0E~j;=w3-z4*-hmK5lGA zz6yj2RJU}6rYu}0$A87`F=OI5K2^`0t?HSx)qAQ^-*L{+{ zKJv#4mjFsX_0WWH#I`DdM+5`8#P}T5+`K>yD{fb?uqf@H7abl_`+@yBv2&}2db`v9 zc>r);JmAD8_dWeYyL8bCKsc=1WjOgGj~Jus8M8EPnyKt!{FI=Lo z;~(hc?rrKkc38U3qqzYf1)NCCzedteq>BQ8HFg!N|Hv0*lWH}6%{rCW)VVf;kx@l` zgDUD9G}v`Ut?%qn>%Luz3=g?B6M)=ija{Y71AviMx;7DzA%zv=HEqQms-8L9?NKgK zIBvYAty-)4Wvg`Ry?4~SXS@14PrE%9fE;72R(<&2t(DoZp)fcY>XH<6aV{Wj0tJPt zTXL(WEM6|h@wq)tLb_W|=;W?#>UjT0Hj1TTsT}|pM0{F4;9_y|M-KA& z{iEnTW(YR(v|8w(xekRx2mVD+3m3aWGSC9 z^EDCxWbHiq|Hu^;^$nW7`c9Qp=hic=9N)!z3bd+q|8BJ%*rzyq3IG@lYv)PlZvwPN z^W2>VNM7;yDotCxR+Wu2-5w?FN+;B)bX|=aZ(XC-clWA!&khau^|(D2fGl8*oiBaZ z0+{RKEI?9%C8cUuzFIYN7s#0W+R7qObZ*Pxx<$9B5au4f>zSHe$*|(D|hXGtuI2M>-0w4dvGGoo#ZVv+_$~cZ{ z<}6UdEo&4kE_Qny&$_VX@UFKt)YIkmH~>7vDt?RK$TYe=2#~0X`UcHdbGM2stKA;O z^Vo72z_l3TH27srgQx()Dp(zWO$?^Md{05AQKN!^Hd5bi8 z-XgXf2J(=J+bX{luN1og!6S^%QO(T@)Ue`q1q+MZ9w#qc*mAhPS1tS5au~=9MwKSG z{)^isyTt8Tkmrn1^^94XwsM^c$BlD)n!FZ|#ngGENhf!0Rd*{}4g)!Ar(d!aZcl;y zRyL_t)7Pw1c}<<$qd;sq4CIMQ6a4tb7FpG}JqhwpQAMR1SKO}ZnX}y<1vd~G=s&mR z@ZKF7?q$niAlq4~-2~Tf?2uIH_AtmFfr3KSExA=w7B83M_}m@`qhM`ZXO6wEle@RE zhbl6{=l832;WE`PT_Jy{!0mA`2F5t5Y@Dge#+e#8+o9&YyVUm1Zp9)I zw?_joIw2EWzi~)X$n8mxyNrygX3o;|)px3(tlaH!kYdr{A)PvOKqq%?)4WOZTf;6+TY&i^M5q4NXS`?43(zMlURoOVx?NN{+ zmuxxQeO9gecdK>(ZbgO$-5w3VRj>kplnR!Vs$uzR)y!QWV;r}~fy-i%u-Xs4qvpLk z)Zf8V#{n-P03aoNfq-fkEY;NItKj80l=75)Hi6xn!8n8S?%^H$U+yk9Nzu5x?4`VJr0m} z2mlzhvWYdCcH5mAS6lD)D98~XZaKVP@hE!=0GU7lK*B<$Wole`hbGOMBN?6`iPVb> z4yg5=J#0A)WB>sGHxvjJsBY;BO$+si;jS*VzO#!hhk-F*1t8A_3JO)Xl<7Uys^;C>)qdz5 z*%+4xfNLQDFh>u5IdWJ>m8^fM*Z@@<8$UDotCxR+Wu2-5v#S6TU6sPWb{3KSK)Jr3Y`SKo4Yk7ALq+oJ(##|l7>sHkty zj5T+wxU$;qQGl#AvgL5|?rrKn)8Y0wK-v%hvRv838cnIgIQ<0PwJ~Nwu23W}V7w>f9a$zzvLSIoz^;r_LTf=Jq(i4G{o5sHmb+jVo?f z^~~9Bj{;x}dQY{fb^k84AK0f@H0t&^z*P|dJS0$9q=x0IHF^GG8HcTVfovBY9#;E- zeLAsotA={nav0u10Pu*LYA0y%0~^#9EOUDl04Zi|TpjN>sd>+Kbu}Mn%VBr|Ju;7& zP!!ZB2M=o~P^AN9b$YwcD9+CaASW2(sCvdMRnM5E!Lw)7`tG?05k-fG-5w2j%;&pl z{?{e3-t4ma$}-(jKSBQC0oC-hX@PH09!je%U@4+b@P-Xcw&yHICOu;nl^ zj{x9tzTp8iHt$!1Kd9E~X?i1CqRucsAb^}>H}KA*-{RA}0?29=bQsHeL} zkw_$=WBDS(s_JdmeA}(+ab;?Y2NY&kAt2|3ic3`4I8(I?mMBzQs(~{diiX)-2#Mh) zK#y}AM|D$bHKlg4+S^a-;CqME)t%U$;#XD(i`5w>2mrapA1YAo!ljzLaEZE(f1s1Q zx2f~kVYVE`brArvgfT{wCQZmd2@h zh~+{c*BE`cr@&y>8MVH%N3HvIDKb3d_Gs`RE&+JN<(B}ir>LkIMTq=^$1i^bI2 z+n3mfSgWG`GnzfnrkN!{4HXpYOoZPMfLs(P7};`o30n^1st5ocF`57{qM)EalWQia zZc43;G3xH_8C8XFT3?H9E|N@9nc5S(y#PR#aeO|NPOMSw{3WWG+MrlCtii4`Tpj=c zz$?ZQ07e9Z=b8gk>+9wB`_b$zpmHjNKu+@oLmD?_s-`Sl zrjn|O8t(1Ua9^+6VT0t7&lIRef=65POKyB#3HKbJ*D}P4%Ln;QHO#W zq&NWNtdT8;Yv-Qda`@~S#n@9Irx5@=A{_x>gfT`XCBc*=sMDyf>lmcu!WeE{-IW#xEPR*qL!SGV3ja#Saq zTM}yyoPP@81LvPYxGhknCZ0kF?AxjK1N#(;eucSB0LW=qZaLh| zmcv!&DSQYRfE&+Ii zS1tiu4^JTkFdCO{IUMd|%V94e0C+?;1b`7#2my@7g)N8YoZE8P7^D6(9b6u883Di} zvMB(J7^x68Or=5yATgohQdKt2)a1Df&uux}#g@ZvApm$pHU@wZsdx(EJZC_q<>hMQ zDTF{?xUl8${H5~w{W^Q%nA;=e9c}_d%J}_$O`q1N#)heCZfVtf?=>a-%z@xQx8@A& z(db#3o~j0I4^-;V0G9>; zAX(h}hm0yOFVm963w77JJ2ZV-qkKMJLhmz@$~%tf&ek1z$Z6HWVk48*NdX|Yu>t^B z6c-n1-rSpY)6D5QdhEE~fB&c=(Zn_dC_dY&6=z$uxU@>|me*-ppQBhp`w##CMi2nt zs!%A2rx5mbXi;y6<`tId@c2faLI?n(KmdRzBvT>u5B6ww^B&C%7U_8PG`%$xQV$hE z0Jts!06ZnB3SszMg>b4rptkDiR0sj!ItT#pq+}|DPBd~!g>Z|;=>!!*0JsDJ0G^j@ zh46k+Aq0TSQ3FKQph5@$sly5YvQ8>1gxmWZMX3-1$U_7GWUW+G2cdfc!%MK+Z@>h0qsJ+l1+QD_Ww{R0sj&FaiK_PEr-Z z*trVfr+q%1uAHhZ8n2VX1OWiKhX8<_mQ01P`qUAv*Abnmn4(>w32GWl|GWT@DbxUw z7m}$ER-QenyV`bYqnb6p$WkE$kP}z|Kwe3vLRi|}u2tRbT3lSA*EC-5n^GAc85%%# z;-?q#(ny8yqxY=Syty~4AXJd>dkg!|YVtd;Y0KaLg-&jJOR-2|0RjNLgcShfwaY7n zhYlT9Z(mes-rJFttq$Nr76o-D^O6F=7|9yH3$HJlB*C#`g(Nq7fb&cw7yGxT7FPG!v+Yf+y_*DcLrBEoO`i7};swc~ojgu1GR7jErPq*sOQ;%x% z-+o<3Uw=u_1fO0A0I9~WAi!7|BU4l=Q&=K9G$`BOBPF=0&~VpT9sT*g>BO&op_&!9 zYwD_X3Ko~7d0+te5CH&4mN7DgMKXm&vcrQ?f3IwKIH9*jhX!=w zxkrT+R0sj29{~VJArmT;LWMHnVcGuPbAccM@km6iTV7S$*4NKf2-n@G(n(YZ0i+KB z07!>mNG2GPiAK%^fx-TS-bRHGK&B7?fOPT)WXi|Ol$6O1^vMqNNr^m;SQl3ar>SoB z-Bbtxq!a-F$ONBXrgWT4ajEP;zwAKoC@O?U^zH}W`>;Z|Xt^9e-?{*j!%q<)lN_H+ zN!hs|FxV&C-z&vp3B7fsLioYIKdZ^B)~Rm!YWYX;6hi>G7y$rqLoyY@ZYqQTl1Bgl z+(d;CfJ+DffJaav1dvGt0KjXg5CX^m0s!DuR0sj25di@3x|CE1C#mkXyQvTYxPV^? zfNXKTLO8ak5Vq;iQ;+JcZ+`9kQwS5g(GWoH;#UD6+aysT4EJyQ$FChQ`IUrRP!iIJCsf-FCkQWF5KrW#|2p~ZO03a8oph8$u zKTY+wQ6U6!6#)RqWl2;B`;H&cyN^>L1acLz9>@n&2mxG%I1l6#Due*eBLD#TD1{Zm zskhywqVZK}9vDEX5deTZm$C}s+Iv-2Q=8^#0i+560Khp^2!Xsp003|)Duh5@AOHZk zx(gM;ksvVo3gMCJNvgl?ZcSdaOpZU0=79l>2GJbA^*PR%D}+NADuiFBLI`*aD*ylz zlgbL=$~zP+DNFOf0Ir7s0AO@dQ6YT&MNM3~iV7j%A_4$_F&lG*FdC&o2)K*@03dmn zR|tm&5^N5{Rdafq*6rD<+0Jb3n|Po0=p$(#7XSeOKq@6zA@n=as;P0U|43YQ<>$ZN z{;qCme^(2~H|k*Rz1n6LDb9V$K-v%h0HoeEDue}oY3=m5?w=i3RngT~2tsF$YQdTB z=;qQI9j&`ZoBg+HSX2msR3iWYNT2f+!s_Z$eP(8lZmsH8z{V1KYoNDPH@*9?W)wcH z6I1Wj8=>3PZwt~qFpxh8007daew@|su8irS#W58J3lxus)O>nSO&|2Bw?DB8p)=T} zsRw_e`p|P~t6QtLitkjXr9ucKivR#13;!``v?F4Qf6g+Tz|MGrh8|` zWz6+oJE^ijlPU|;*&Wv5Jxit(8VgtgQ}cYsh<9b4j=DR^Ql3_<2OEzwK0`7Z_}O4+q7ch z&DuBdKJC?PS=}Ic0FXog05C=YpR{3KOn>)wdQ&t?%;*V5lc4L{2ob1!F zmVU)zi3N(H^A*BH;~R9K_C9Slixi_m2wWEd0Klje2c<79iRpJ&#y;%ur%+LWPjhFK z>!zutI@;W?BPaV5jwBW^f@hAMuMkes(YlXPAp|?lChq_MAOJ~3K~%1T001B%RYlV8 z+!E98+!|A5Vd_u(mkS0Q&1xvsjQSFN(9*BNC;BuvlxT&pjS3-f0|Wp7*ELe*`_huQ ziUR3B@n6p87)_f}qK3)EYCb)v!^iv7(>K-%;W~BN@-$BjWCsEOfUBA_(dzfFQsr~Y z?gk0C}h+C_S_! zrr%o?)s!6CR=*(V)2xP4O`B4z6Kw-(I^L(D;l!E)Au5E(GXwx2k7T;a=azuqxuiL8 z=vc4%2BL|*_p%D%o1r!8vxRA%7|1*V0FVdVuJXBMq&YBULXq0f4C%e2z3S=>C-&Zv z3SsbBwbieqLWrD00045>NR@BHyqNrXd|BI=u|IssgaOzI^9yQwuX`UEJ3;_V}D5`wklWc|Xe!Zri+9gy7 z;Ryr)z(X7(-Fs79f4nB9Tk5FtdDU1egi@ReAv}Ws0C+&qCw*pKOn-D+OtYx+WeqBX z$Yulpz(pffzTaONQ*AjX{%l2s5ZQZVo&vdfk9x8-LI|2ZZK~pQN z{*M(@`EuRm6~aTudUduZu?nGYs9RGH{zP?wXVgCRPAY^*8v+230aW?&Q!*7oCo*)t zLioHo>sC`CM9L8WfHb1YhY=$c!tTC^-aj##3Sm^0$6nFL^s0Jmmug4ly=v0b^bd@j zM*sj)Y^2KfC$~qnd!i< z{^PAtRnXQ#l9H(q`g%{Ds}L6cR41o?RBwfDQ?I38it8f)0Ao-Zk`De+SOt6sA;pra z5Dxa7uMloh`_#L%xpiSDW4Pvz^h>rvcpnu)Tm`p{0%PG1>9@LmPfritsxUbk88T8Kyz`a`nqF5TpD(cr z;Drj|-oMhu_HSu{4#uEg?8)Hg|Dm9>2-T7xHkX*4OFwSjYoOJ%zCMlx7`xSknuBs^j(d zXlvmbDuj80005*|#QOEC;RSj*JYUQFhxGZPS2WY#;`Ug`1Ibhf{X;#PcIaO<)&GoI z>(=S*vb(4d<~RZXkS5j|y&ajQx4UQQ=D=}%y5J4n5`53?v5*InsSx_2!=W{LJx->W7yq<>&!jL&z|{I82Tpz9hZRcYfL%iSIW32N)=)=S;KQNQnO zyi}XRAJNOh3nWR?0&VgU1dss*L7!@>3pHh8p^P!=>5nLptptpu!oC(Yw!fxX@g}Kc zoKBmn^Iu7gq3$lVAKag^;~_Du001taLI}4cQz0xleLyQtAJD?`dL5i{zjpbk5N0z1 z0N|pL3gJ%&R_g8oDul?KWGaM(-N&`4`#YLjGC?0qxl3C@t2AIkX`UFVMgRajU{L2O zgg+l%sx`s=`t`!sRO{<-do1LEWGaM#zEhfU@Ci)|KCSlpJM?<--RiO>X`UFVLI40f zBx-$^R0uy;^r~+1H@iI+@<1{bLMPm>n#0fOGrkverf!wq9Cx4E;+1Kh7|9|403Jkz z5N=7PLTF+URUUgq51QB2J$bRVR|##j*m0FN7~5Ki;A=@SK;sSqM###$k? zHm0)XZMwU8n+7J{tbG&j(;j^!0~2F3r~!HeHNfmL)*4_k&c;j5R|w}zGHML8%TEwM z28^{rC`p0-)0)!0S#zTAs-Uz`t!9$!WfekdfbL)g0LU_J@$vfpz#2eMSxWfj6-D||y$PLJDTArB-|Aq@1i z>ZW%e){Np!I#G9*UJu=_cqqZ;1f&!J0LXGw2;r8CD}*Q72Gn%CPyK_5RS2E_vzmJF zCz?|5yk3ki(Q9d*6;~nv06F6F3gNF8y{1|IlWvcNJm5G+QzsXzzNUB-6+)w<1BLpR zeI?r4@j*uB#H9!TK#sXug>ZTBkc?PnMS3MtA&gl^2YZY3#Ni4Z?GCs!DI@{_kkc-& z5Z)2m%fp9|5tmm8kG2hI_t_FXerTN92RQY30sj<$Ja8mBN#E-Gq@EbKT@Ms&)xCu~ z6jH?Pv5*Ib6x1)#NnqhQt!waqwj3>>4)2V8cOWG zKx7yJ0LVjB2$3$kT8zH4#i#$Z$EO&#op>4n0LWvPR|r2__`0U}PP;u8ve4$^M&Ekf zub;oi#ulcq4IKS=Z0|Eemq+DJh{A|%{noWf; zYeZtwPxkxtt=AnLI7Np)pAY~5qy!bh?9v~W9@**BKfLMFiEe)5&qo9R04Ya>(7QSY zr0;L_>$_VVbq;dk&u0Vx0BJ*o&^wNI8U25oeR_C@PyJ!Hr-2s`005-jNQLlUhSuo* zg17ZRXsb${LAS@s3-7iY{kJ!LdUBsnk(k@lz)J`K05Ya~q(V5jN_U5LQ6Wqts(iQ+ z0sw%F8??boDuf#fUsIj0!|k!M9#uY!1_1zoYp4*W230!=Wp4OKoQg8%@) zQ${L;4Zb#gs&F$E!mFUlhg2W{0Pv(^u}S(?-zW9h;97kmv|0BS>`=($cZG1I%J<{# zjs_x}_>mj}002)r6&siL6~cGgjsD?HpZ;a9Pf->_kRk*C09oPk3gM>;-%xdqR|u){ zA)N>S0J6%J6~fn5mqSk>9I5jC?Q1@5InEvZNFM?KfUI<7h46LF_MdQjtT7v@^8MXw zJ{>&G^?jrt0RTW&%k~OkUs!r{r%(Uw4Zlw2_7x3y3;_T@&d8<;;pu*(|M|90-`VQZ znE|(_K|Ue?0LVFBt`L6EW%O;TeDDAQ0Dzq3r3&Hxc1QpHO@}HUJc9rLAm_PRA*9L& zuOa{d$Qu_bghR`;CbTbY6~efco^NvW%~yTedV(q+yomq+An!!woU0HH&)2fRA#Esn zLm%-UPx`pwnDnny`H&?D008oqRcb1PRQZsN2mk<}iz|ff`c&at2~`NG@*$fM007`3 z$6^z2SRtg!hg?7a0D!BwP$3+=UH2Dm)yE6o*6~wARQZrI2mk`~HF@4*wKu)16WiZXe`kl=V*z7E004kdFg{0< zX3y26S##8R?68h+->mMIlWva%j2Zy|0LH=?RW{C4W#deBx1P}PZCliN?6BDG57~kM z002oUuc_0#2kO+{aY`q4ZdLoCcVuJSB?xb0k4gYYk>aWentjj5b<0ElQMC(~$rlK? zJrZzDtN;K&iWQWVYv%2Dt6}*nHSgV_=H1&B8FJ?-gut~B001CO0)<6txaBt0ExuK4 z@9fd>om({AON9{LKmY)MH1h=lR0!cY1ONcYkSi*L+qS5?^@Q7FAx{wi03g$-5W)ip z007{k3l+l7(>k$Z3l&0S3^hOi@POjVYAS@tC{_Rfz(c4IB2x$e0N_DX2$60C008i? z3l+kJOLXSwVIAA@hI&u6x;++h00961vVhT5ngd6h+#U;Ai~s-tS!Sd;(0i&?&AYd& z{lI=%Q6a?W&;kH}ELA$8MzinvxR(FMS5>=knH-+FEMLN}VKp$*3MKmf=?r4uHds}O$acg|G^{rou#Y5;&Sp+cD52mkl^B6 zr$Xp81ONa)T2LYMHUaRZZ>LV~dRx)qVYkQ1D+B-lfNKIpmsbckE8O4f_E>p=0001R z9TmdNBLDyZJc9~h<`4h?0G>mIF#Tu&002C#yrxcb*Z-O(ePq7dqvRA;0001<*42Dm zhhKR?eI2LV9wny`0001<6z=cSkvCsf+rj;kwQi4-a|i$c08g>8xLWq@)X~kaDjH^Q zfOH`M002Cr>*NP&dgXcbcXqfvO3oty003M!+}oq0n_pGifqia|k~atd007s-<1w}F z-K8UMy`oqo?DjZ$g#Z8ma7E|QCN;hKl7_m^x;;u>A^-pYGHS5nN5N$X004lLi$x+jv2%-#zx|ft@tE7=;3^0Jz!(fgjoTvt-ej%X-g`$! z-uQQg`}^IV2G>CV0LCB^cY6ZBd-_hdtLfzz)ZKc*?NN{b0ssIYDUqQ;9ee8)wd~t1 zD<0aDEeHU>7(|B#wQtkURKIMc%4=%f9tUuRl~wz}cXZ^nmlPfxaC;n#5&-}hqt2sE z>O9({^2t+FzjTEv8)is`djpUkdfQvo^vd(s8e)zD1MfE|kyD zw-|DRjmOopcc+eSc}>ybA-Bgt3h>hjNU@>bZZ*C7fqRy-PYdmLmC0RZrTekz1; zLFdsXHNEnphI+c(9tAGoCk)^rBNf79Z@-~hDuhUr!LBoEdi6z}IrhHWqrgQ30KkJH zR0xp05CDK2 zcSVJ8*{v$CsdIZQq)GAkDs?p(s$aT7r4wr09t#O7 zs;p9X%SpG#fX5L409=!e#dW&rpiVa({IEIDIMeO1a05jZ1OVI^0RTWkMw$bq6KYhu zXqhI?o+BeFgkDrUp8EiBW3&JOj7smRRvmnPlivREch$UmyW+8!+auvJQ~{9)RsaBu z$zbc->+j^Uf0Q;Z)@Vs^EGwp z3I&Tx+#V~hg-S~04+a$thut0p9!3BFkP^}Gu$p&oQ|rE+nsC$2n!0?I3dfCid#wCq zjEX8M)zjYU_9XBy0sw%NipOGVJFrjf2li`x;|w+2vRb7RsSsvbQDrp&0M|tT0FV|| zS9$ml6~c@us-Ovg>mvXFNV^X!gp*XeXt^fNx>?3hLP{rY1jLQ-9S9&}dQY{Ts}Mf? zy>k`9Xw>bIa#m3VRX|)HD*ym8jtXJ=6^tvF&+k`^kcDet1pt6+Mk<6`e)x}Sdi6zx z`}^D;DQ6fN6>=W{u7ec-0Is{DLbz;|3M;4(CabuzN`0r>-5vuTMF0Tc8JAZGr{1z! zWmE{qtY|zp0^-^T002CP3Snv#698}>1ONb@Mul+fSOLKG@LdETD_p1$KJr~Egb6Av zuaM*OxjhCviU0s0s|sAF4SS9EyT?U6joI1Wt!ToVBRKvs$jj8q7} zeZE52>-I>V#C-s`7VZH6kkzOVUSH98Rse8y1ONazfePW(6_002U|bym06Mf0GH_SONIad011i=4qRFxTym>|CEl+PvL!GsWjg#;w$sSCJqZA0 zl?xTZy*o8wmiH@!TmrzwtWl@m7`4&@0D!TH$FrkCSTw#`Mn;w&_>g22Z}H3OsM~`8 zK(@PTg|K0UWW2G$>ht>*Dl6AePnX-HzzgEeF~5yF$BaWF1b|ezqC$An%`%Sr6~f}m zDgpo`N!IG96AG~c008N5p+fkGH!6f)zDEI>6$>^ckzsfC zU!w_t^ZNRJ`snHNYf^TY%7o+>Wq7Xkoer9>-)qq$^&+;RCi{*nL??LEFlQfEdd0sy4ca&VUgQoA%m`VZoi}jAW3G!247$>)MBIw z8Ji3MkTH(qlN={yy9>hGjC6Xq@8skgt^n94pNu(H|C+hc005a3kHD)f`}?Z~fbg@A?~t@JtrGzNfOOk?{+xb=s|El`vR40; zzIgxuK)P9Dzjv*#T{8eghKHY!)R&ft002O`^+$YxC$9CyYp(#j_++=0kQG_^AU0D!cz z`nRE<|M>muz2v$9;M_6nH&Zte002lgYt0SM-8T#X;Z2WilhJdj83_OYq}em!=N{R9 zqZi#U07#ORzJBgM004l8S!?WHCGx_A0zi1vqdO)2EUA$I06@Au72fpNwnSc-Pymo5 z8Q<4LBLDyZuZqfNzn13tv4*%@2cN2Ym;wu1>hNHt@ zlhirtsQ>^#I-QM}*f&P=hEW9o`^zWK7%8Ef3jhE>W*F(~cGD9bqj}G$0)Qk9w-)^m zNqa{7J^%oa7Q2W0PJVZ^ZyI#~u-m^EvBv(kq}XWR3jhF8DrRl`x9rO=kNPJ4Q3n9& z+~z=5`iHT+7XSdHh}GYRpM8ACSl&9O03b<`u=%>ABV&C(002nJk#NNP#aQ1w<^W)y zf22R|*oVa40001FT0CydZ`$V{=^yI>#vA}7Df0AVZ%X=`WR3v<07mVvBAXt0HJJk> z6#yhD+;{S?CA&G<;{X7Fglr497A5`5chUjCzWj33G0qnxb0*ni0RVvOF=rgVe}mor zy-2c0N;&{Y(%_~?jyl$SR#XE407#d(G4YLqKmF0MR2(cN0YH)lpMCfxY3z3+0sw&P zF!t+1n;!c`>JDdZs*WXNj0vva_>`nir0k#o0N`igXCM2NP2ov9Wh(%ZWUaN~!r{+L z+LFrS0sxS|%#Lu_Y)s|JUrKQRkRyzpGUrWjZ zfF$)j_oFr$-~E!h(s6tM0P;YW{JOvIxgWKqBsL_WABsHm#)tM03b&V z#H}6}{@G*irt1UJ762qEyy>wmjxi5P8cOHq0059f!X~a?i#+@2>*@TEv<3i48r<~A zuZ-2FC56-dSpWcJHKT};`Sj3pkNz^k1AW1{dKKh)I`J|-5One>y09j~Q)_!*A znMa<<#D}GHAAlPPJn+!%j`j(7uwb&;B0DxvI-I3{&zvMyykj_;E z19AVYvfA#(=K}!X0egHgdu#ZaNB6k#;jRP#>D*>P;fT3I(k8cN006)h);=8$n^glp zf9#}NBV_y@fGY+t#su%*_@^@Z8%aJ_hXDW}y{wG>Yk0|wKeK=S=W#a&aXkQxD7gQN z_gcq1F4^&J&jJ8I>X|bpZoiO;j(;Lty998#q30g`rDL>IJV_7$kbAZ`MoYbN@|Qfc z0x-g?UF#1PPx&J``YTxl+@1#jfF#6Z^ta)bqOaNQ-;20C%*8wx07e8J+_=h#n@1%z zx;+a30Ap}8?$|Fzo__32w+Fcz&s+kyT;%D;-V7HG&ymspD=FsoJOBVBC~l0tA9jKZ zyn6DNJiG#MvEcn*SZEyIKS_3p+p_=wa7{-0Y|Q+2__;^6x;@H`cy*Q7 zj|T(JANM}>$SJpn8I7z903$-{ADS!0|60a8Aj!Br4*(#qSV>RIny(E%`^bK`hZ&2k z4FDrT_ivmhpZS`sJ}rU(03fGRD#!o;0l!H^K~&AG>`OBGv+$bT#M&>_ADt3Dw064}4G50gqc7XU_>yEl{vLIs~S#(q`OBDd!O0A!T|vU)h|#C~8mJ<;Lz zFzJx90pMc6kAGpgW1Zi$MxT~c>GnJT08i>PvOkF%{V?0F?B8fVS~>G>&snM3?U?`ouIiHPGe*u&hFc4N>9zg((qoGE&xDM zVv_b-**A>QTYeLJrT^)FZgG1kFCYM1gZbFTvI4)e)W+lUt#Rhb+W9iNSyGYPvjG6E zYCu-+%9y>z#`hV=**g@CZ?`{xtjF!ayodlW3dR^y^uVvzgym~=VrrCe8jP`%tyE>L zs*O>ltSTiHo`1_YaajQX#>(o$=f4cfsMA_?8l%%j>af3QeZlCrT_o{07*qoM6N<$f)5-!#{d8T literal 0 KcmV+b0RR6000031 diff --git a/apps/readeck/logo.svg b/apps/readeck/logo.svg new file mode 100644 index 0000000..7335416 --- /dev/null +++ b/apps/readeck/logo.svg @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/apps/rsshub/2025-07-17/.env b/apps/rsshub/2025-07-18/.env similarity index 100% rename from apps/rsshub/2025-07-17/.env rename to apps/rsshub/2025-07-18/.env diff --git a/apps/rsshub/2025-07-17/data.yml b/apps/rsshub/2025-07-18/data.yml similarity index 100% rename from apps/rsshub/2025-07-17/data.yml rename to apps/rsshub/2025-07-18/data.yml diff --git a/apps/rsshub/2025-07-17/docker-compose.yml b/apps/rsshub/2025-07-18/docker-compose.yml similarity index 97% rename from apps/rsshub/2025-07-17/docker-compose.yml rename to apps/rsshub/2025-07-18/docker-compose.yml index 46d152d..fe7deb3 100644 --- a/apps/rsshub/2025-07-17/docker-compose.yml +++ b/apps/rsshub/2025-07-18/docker-compose.yml @@ -57,7 +57,7 @@ services: - -f - http://localhost:1200/healthz?key=${ACCESS_KEY} timeout: 10s - image: diygod/rsshub:2025-07-17 + image: diygod/rsshub:2025-07-18 labels: createdBy: Apps networks: diff --git a/apps/rsshub/2025-07-18/envs/default.env b/apps/rsshub/2025-07-18/envs/default.env new file mode 100644 index 0000000..cd05f46 --- /dev/null +++ b/apps/rsshub/2025-07-18/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/apps/rsshub/2025-07-18/envs/global.env b/apps/rsshub/2025-07-18/envs/global.env new file mode 100644 index 0000000..e10989f --- /dev/null +++ b/apps/rsshub/2025-07-18/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/apps/rsshub/2025-07-18/scripts/init.sh b/apps/rsshub/2025-07-18/scripts/init.sh new file mode 100644 index 0000000..07fb8c3 --- /dev/null +++ b/apps/rsshub/2025-07-18/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/apps/rsshub/2025-07-18/scripts/uninstall.sh b/apps/rsshub/2025-07-18/scripts/uninstall.sh new file mode 100644 index 0000000..c86c4fb --- /dev/null +++ b/apps/rsshub/2025-07-18/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/apps/rsshub/2025-07-18/scripts/upgrade.sh b/apps/rsshub/2025-07-18/scripts/upgrade.sh new file mode 100644 index 0000000..07fb8c3 --- /dev/null +++ b/apps/rsshub/2025-07-18/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/apps/seaweedfs/3.94/.env b/apps/seaweedfs/3.94/.env new file mode 100644 index 0000000..c999c70 --- /dev/null +++ b/apps/seaweedfs/3.94/.env @@ -0,0 +1,51 @@ +# 数据持久化路径 [必填] +SEAWEEDFS_ROOT_PATH=/home/seaweedfs + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8333 + +# S3 监控端口 [必填] +PANEL_APP_PORT_S3_METRICS=9327 + +# 集群服务端口 [必填] +PANEL_APP_PORT_MASTER_SERVER=9333 + +# 集群通讯端口 [必填] +PANEL_APP_PORT_MASTER_API=19333 + +# 集群监控端口 [必填] +PANEL_APP_PORT_MASTER_METRICS=9324 + +# 存储服务端口 [必填] +PANEL_APP_PORT_VOLUME_SERVER=8080 + +# 存储通讯端口 [必填] +PANEL_APP_PORT_VOLUME_API=18080 + +# 存储监控端口 [必填] +PANEL_APP_PORT_VOLUME_METRICS=9325 + +# 索引服务端口 [必填] +PANEL_APP_PORT_FILER_SERVER=8888 + +# 索引通讯端口 [必填] +PANEL_APP_PORT_FILER_API=18888 + +# 索引监控端口 [必填] +PANEL_APP_PORT_FILER_METRICS=9326 + +# WebDAV 端口 [必填] +PANEL_APP_PORT_WEBDAV=7333 + +# Prometheus 端口 [必填] +PANEL_APP_PORT_METRICS=9090 + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/apps/seaweedfs/3.94/config/prometheus.yml b/apps/seaweedfs/3.94/config/prometheus.yml new file mode 100644 index 0000000..2f0ead4 --- /dev/null +++ b/apps/seaweedfs/3.94/config/prometheus.yml @@ -0,0 +1,14 @@ +global: + scrape_interval: 30s + scrape_timeout: 10s + +scrape_configs: + - job_name: services + metrics_path: /metrics + static_configs: + - targets: + - 'prometheus:9090' + - 'master:9324' + - 'volume:9325' + - 'filer:9326' + - 's3:9327' \ No newline at end of file diff --git a/apps/seaweedfs/3.94/data.yml b/apps/seaweedfs/3.94/data.yml new file mode 100644 index 0000000..fd2e8aa --- /dev/null +++ b/apps/seaweedfs/3.94/data.yml @@ -0,0 +1,134 @@ +additionalProperties: + formFields: + - default: "/home/seaweedfs" + edit: true + envKey: SEAWEEDFS_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8333 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 9327 + edit: true + envKey: PANEL_APP_PORT_S3_METRICS + labelZh: S3 监控端口 + labelEn: S3 Metrics port + required: true + rule: paramPort + type: number + - default: 9333 + edit: true + envKey: PANEL_APP_PORT_MASTER_SERVER + labelZh: 集群服务端口 + labelEn: Cluster service port + required: true + rule: paramPort + type: number + - default: 19333 + edit: true + envKey: PANEL_APP_PORT_MASTER_API + labelZh: 集群通讯端口 + labelEn: Cluster communication port + required: true + rule: paramPort + type: number + - default: 9324 + edit: true + envKey: PANEL_APP_PORT_MASTER_METRICS + labelZh: 集群监控端口 + labelEn: Cluster Metrics port + required: true + rule: paramPort + type: number + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_VOLUME_SERVER + labelZh: 存储服务端口 + labelEn: Storage service port + required: true + rule: paramPort + type: number + - default: 18080 + edit: true + envKey: PANEL_APP_PORT_VOLUME_API + labelZh: 存储通讯端口 + labelEn: Storage communication port + required: true + rule: paramPort + type: number + - default: 9325 + edit: true + envKey: PANEL_APP_PORT_VOLUME_METRICS + labelZh: 存储监控端口 + labelEn: Storage Metrics port + required: true + rule: paramPort + type: number + - default: 8888 + edit: true + envKey: PANEL_APP_PORT_FILER_SERVER + labelZh: 索引服务端口 + labelEn: Index service port + required: true + rule: paramPort + type: number + - default: 18888 + edit: true + envKey: PANEL_APP_PORT_FILER_API + labelZh: 索引通讯端口 + labelEn: Index communication port + required: true + rule: paramPort + type: number + - default: 9326 + edit: true + envKey: PANEL_APP_PORT_FILER_METRICS + labelZh: 索引监控端口 + labelEn: Index Metrics port + required: true + rule: paramPort + type: number + - default: 7333 + edit: true + envKey: PANEL_APP_PORT_WEBDAV + labelZh: WebDAV 端口 + labelEn: WebDAV port + required: true + rule: paramPort + type: number + - default: 9090 + edit: true + envKey: PANEL_APP_PORT_METRICS + labelZh: Prometheus 端口 + labelEn: Prometheus 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/apps/seaweedfs/3.94/docker-compose.yml b/apps/seaweedfs/3.94/docker-compose.yml new file mode 100644 index 0000000..157af1a --- /dev/null +++ b/apps/seaweedfs/3.94/docker-compose.yml @@ -0,0 +1,138 @@ +networks: + 1panel-network: + external: true + seaweedfs-network: + external: true +services: + seaweedfs-filer: + command: filer -master="master:9333" -ip.bind=0.0.0.0 -metricsPort=9326 + container_name: seaweedfs-filer + depends_on: + - seaweedfs-master + - seaweedfs-volume + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + image: chrislusf/seaweedfs:3.94 + networks: + - seaweedfs-network + ports: + - ${PANEL_APP_PORT_FILER_SERVER}:8888 + - ${PANEL_APP_PORT_FILER_API}:18888 + - ${PANEL_APP_PORT_FILER_METRICS}:9326 + restart: always + stdin_open: true + tty: true + volumes: + - ${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} + seaweedfs-master: + command: master -ip=master -ip.bind=0.0.0.0 -metricsPort=9324 + container_name: seaweedfs-master + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + image: chrislusf/seaweedfs:3.94 + networks: + - seaweedfs-network + ports: + - ${PANEL_APP_PORT_MASTER_SERVER}:9333 + - ${PANEL_APP_PORT_MASTER_API}:19333 + - ${PANEL_APP_PORT_MASTER_METRICS}:9324 + restart: always + volumes: + - ${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} + seaweedfs-prometheus: + command: --web.enable-lifecycle --config.file=/etc/prometheus/prometheus.yml + container_name: seaweedfs-prometheus + depends_on: + - seaweedfs-s3 + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + image: prom/prometheus:v2.21.0 + networks: + - seaweedfs-network + ports: + - ${PANEL_APP_PORT_METRICS}:9090 + restart: always + volumes: + - ${SEAWEEDFS_ROOT_PATH}/prometheus:/etc/prometheus + seaweedfs-s3: + command: s3 -filer="filer:8888" -ip.bind=0.0.0.0 -metricsPort=9327 + container_name: seaweedfs + depends_on: + - seaweedfs-master + - seaweedfs-volume + - seaweedfs-filer + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + image: chrislusf/seaweedfs:3.94 + labels: + createdBy: Apps + networks: + - seaweedfs-network + ports: + - ${PANEL_APP_PORT_HTTP}:8333 + - ${PANEL_APP_PORT_S3_METRICS}:9327 + restart: always + volumes: + - ${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} + seaweedfs-volume: + command: volume -mserver="master:9333" -ip.bind=0.0.0.0 -port=8080 -metricsPort=9325 + container_name: seaweedfs-volume + depends_on: + - seaweedfs-master + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + image: chrislusf/seaweedfs:3.94 + networks: + - seaweedfs-network + ports: + - ${PANEL_APP_PORT_VOLUME_SERVER}:8080 + - ${PANEL_APP_PORT_VOLUME_API}:18080 + - ${PANEL_APP_PORT_VOLUME_METRICS}:9325 + restart: always + volumes: + - ${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} + seaweedfs-webdav: + command: webdav -filer="filer:8888" + container_name: seaweedfs-webdav + depends_on: + - seaweedfs-master + - seaweedfs-volume + - seaweedfs-filer + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + image: chrislusf/seaweedfs:3.94 + networks: + - seaweedfs-network + ports: + - ${PANEL_APP_PORT_WEBDAV}:7333 + restart: always + volumes: + - ${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/apps/seaweedfs/3.94/envs/default.env b/apps/seaweedfs/3.94/envs/default.env new file mode 100644 index 0000000..cd05f46 --- /dev/null +++ b/apps/seaweedfs/3.94/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/apps/seaweedfs/3.94/envs/global.env b/apps/seaweedfs/3.94/envs/global.env new file mode 100644 index 0000000..e10989f --- /dev/null +++ b/apps/seaweedfs/3.94/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/apps/seaweedfs/3.94/scripts/init.sh b/apps/seaweedfs/3.94/scripts/init.sh new file mode 100644 index 0000000..e660471 --- /dev/null +++ b/apps/seaweedfs/3.94/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 + + if [ ! -d $SEAWEEDFS_ROOT_PATH/prometheus ]; then + mkdir -p $SEAWEEDFS_ROOT_PATH/prometheus + fi + cp -rn ./config/* $SEAWEEDFS_ROOT_PATH/prometheus/ + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/seaweedfs/3.94/scripts/uninstall.sh b/apps/seaweedfs/3.94/scripts/uninstall.sh new file mode 100644 index 0000000..c86c4fb --- /dev/null +++ b/apps/seaweedfs/3.94/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/apps/seaweedfs/3.94/scripts/upgrade.sh b/apps/seaweedfs/3.94/scripts/upgrade.sh new file mode 100644 index 0000000..07fb8c3 --- /dev/null +++ b/apps/seaweedfs/3.94/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/apps/seaweedfs/README.md b/apps/seaweedfs/README.md new file mode 100644 index 0000000..1198a7f --- /dev/null +++ b/apps/seaweedfs/README.md @@ -0,0 +1,16 @@ +# SeaweedFS + +分布式存储系统 + +![SeaweedFS](https://file.lifebus.top/imgs/seaweedfs_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) + +## 简介 + +SeaweedFS 是一个快速的分布式存储系统,适用于 Blob、对象、文件和数据湖,可存储数十亿个文件!Blob 存储具有 O(1) +磁盘寻道和云分层功能。Filer 支持 Cloud Drive、xDC 复制、Kubernetes、POSIX FUSE 挂载、S3 API、S3 网关、Hadoop、WebDAV、加密和纠删码。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/apps/seaweedfs/data.yml b/apps/seaweedfs/data.yml new file mode 100644 index 0000000..c9537f9 --- /dev/null +++ b/apps/seaweedfs/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: seaweedfs + name: SeaweedFS + tags: + - WebSite + - Local + shortDescZh: 分布式存储系统 + shortDescEn: distributed storage system + type: website + crossVersionUpdate: true + limit: 0 + website: https://seaweedfs.com/ + github: https://github.com/seaweedfs/seaweedfs/ + document: https://github.com/seaweedfs/seaweedfs/ diff --git a/apps/seaweedfs/logo.png b/apps/seaweedfs/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2512e2b9c51ec76297a259267e8856d202b6695e GIT binary patch literal 11652 zcmV-~Eql_5P)~w6QAOdQmD=~>3AwrzHoj^^3Xheu3F(N}W zinPms8lxtfIFhKXiKJU5WiZ;2MxY85gPKSK4N5@9xBocj;-#$NoO}0ozWwd}{MM?K zsjU01%B{2CyU%mJ9hr$FNg9{C)E+>RBrTo`fFwyH@fFwyHw&9*OMtbR`R|LLR??zGX4alTQimeq@xU{H z{ej(p9ai{9T>)GK{3Gz?%=~sY6H4j>7XYbo5pj3m*QURo0X(eGm-->_CE&}zmooE) zLSIMH0=NK3jf#jz0*3-G1GZoAm%k492=JcF{N94UwxkZY07#9Ah^GRt2A)a%koPv= z^T3Ij`PIs^NScESfYgYH*aJA0$$R^KbT)8QW}a1h5J{Wo0wDEVMC=OuG4O04DvvXZ z(}34z<^{C}k+g9x08&py#6y9%0574vkL=zKdt^6DfH!C6m6d0aw2TXY)Dsc04e3HVt0;v-e%0w7fs5o>^V0{hgSWx>t|UYD6?)E-0{tJ}(-*e@AI4BnS|}F) zX#pZ)E8xXULb&@?9;dIa1&(8Ks^HIR4BV<;#UjhdmLM$ZL6qh#QxDMLYxmJ5JJ#lTM+VJN84F#^;m_=sL@hL0ZB=y(S}gJ$5T z6)+UkD7XMp`ZrE2vE&4@Y8}A3TjZi z1E6LZ_^Bd8K{d|>K+Q4mQ;!%5s#z`oYKnoMddg5x&2a%x6Ab*+2tz?N!w68l<|BI5 z7#}^XX1D;Tmm*^Oh=wy!;mv?0C)pk6WX zEA9s1B;dHrycQrLwgr9{cq4Gnin9%sp`d!n1wg%F;8)b`z+VAJW#*4I^cy1L{!Bu) zR{>itaJI296jZOc0I0f%*oR5rx2E~RQ1GnU zgJ|4b08~vxJOcP*-~~Wb9%qQY!Q?`7`bz%85wRDO#q3F)PNgMZ0A8D!>uL|8adH9B z!g+#UaX(fRGgupI^hDK6*KTFu1et7 z6+^+|3iNYC|I1KpjN~MKr{2!ZgIT}{JLT&Se&7t=H>#R%`)&S zuJ?goR}2MyGg|v3Tm@l0JK2{e#JE%_;tllusB0OZIlau z?!>^axIqPeT`?3a&QMUlzy&~nw`3P!uz_D!3^Fw1Hn¥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ʗZKGcRmSpDVfyV+z;RA)b=A(zDP4E%D#oY)T z5A2qiA06t!KJ)U0c$v(+Av2F>^5n3O;VFV$GZd88W8hcZ7l6lQ=24mX)7r!Ii3`96 zWabYt^F>U~4mhv&JOgAXsL?ak>*b6uq_-^HKhR9G* zqhsJ#+!er~z~0l>aBYMOz-CMzEc7WRZwnmGw!N49-Wz|WTqeS z-V7Ij8D-|pnRz0x6O)+arphA?jiI0h$-u9;TYyu5oig+2%=Ec0Gx9}tPMLX4W*!AR z9{3c7f?YEd)LhJwWz3aS$Z ze#II1RpyIhC5D2<847B}4E%~S@aq8=fXWO7i!&6|%nbaBGw|yX7l58H6fDkAP#b07 zSDb-g54iyJh@oI{hJv~i1Ha-7{CdmM-8)Yb1+~`6<1Ha-7{4_Hc z0Bx3`U~z*F1r7X)Gw{>g2KPdvatsBF8)PVG;8&c1pH{>LKyxz`EN&2?pn+d;27X!< z7XYo8pJYz@2;I2uDiX}Rl}+$lTG zz)y?f0-%L66qN2@;HPR_091{kphnKXPgS`9sJe*Q7kDSIXYE;}1vrmM;CE*2K{Reg zfU0i#Lbw-(f*Q7^z;ACa{^|qo0H{|C1vNkhe(EI`0QFKtY!AGJ$uh82<#D8yxCMAW z@V3mny7n;A`dk3iYtvBhc;JBAvq*FJ9B^c2uB$zWv@tFKYJw*Usu7;xr)C%dstKMb zsGjo#KQ+fY0BVk*pnAl>Pt9@xP_sNyP!)NCpPJ_apyqj^pcc#%{4@wI02&NKK^11; zr$I3S)LVSct2F(RPgJvkG6)^DAD7XM<6buD5BLhE;h6{j3 z#ZXWiVc@6HF#^=67z%1V27VeX?*M4DB4QihFyIXs3XaXSz&n8VX68+`hmmS<0nq3f z3XY0_pETtHAWiw`;lc9}z0xu+0MdFQVqf5$z@D{dQ76u068N22dl0Eli~yzeOfM9B z0nY<2uRD!a;c_PbKitcUzx0c|10ZdJCki&n6a1tZxBy5qh=}chw=h`-wyHdiHtZJQ z{lMEY^Xl5eNPXu5AkD#0u(u5Sq&c|&NGo6{*c%3Z(h3;?N-MA|6!b*FI+jlG+uMu3 zv@+fSkXFeP1sBQ_{G^V!07xD2M8Tpw!B6U#3xL!yL&44&_(=u007!)x3a*-gpHz?$ zpj3#V;EEaeNekc|0BHdX1!rR5CoPZ*fV4oKD7ZnM;3rk!0w7f|4F!(@o()9hacVjZ zI6N~itUZV{HZA~CMI#Oc4g93ai~yyIM)>IA%kdGtQZIN1K zQSd0>_kg=q9%r>~1pYg4TxMQVdl*SS=K>)0R75XQb<1wb0Oh`0yv=;^QRroZk5Y&-oe*8@M9{<<1i3#`q| z8x}vUq(yN7kR)k@d=`KtNh9O}AW6~)xd2F#G(s)_k|d3g3xFg^Bjf@gNzw?p07#NF zLM{N3B#n>@fFwyH