From 35c7d1f9616d081f1c3aaa1321ed7c37163f0a34 Mon Sep 17 00:00:00 2001 From: QYG2297248353 Date: Thu, 12 Mar 2026 04:49:08 +0000 Subject: [PATCH] Processed apps directory via GitHub Actions --- appstore/ani-rss/{3.0.8 => 3.0.9}/.env | 0 appstore/ani-rss/{3.0.8 => 3.0.9}/data.yml | 0 .../{3.0.8 => 3.0.9}/docker-compose.yml | 2 +- .../ani-rss/{3.0.8 => 3.0.9}/envs/default.env | 0 .../ani-rss/{3.0.8 => 3.0.9}/envs/global.env | 0 .../ani-rss/{3.0.8 => 3.0.9}/scripts/init.sh | 0 .../{3.0.8 => 3.0.9}/scripts/uninstall.sh | 0 .../{3.0.8 => 3.0.9}/scripts/upgrade.sh | 0 .../astrbot-napcat/{4.17.46 => 4.17.47}/.env | 0 .../{4.17.46 => 4.17.47}/data.yml | 0 .../{4.17.46 => 4.17.47}/docker-compose.yml | 2 +- .../{4.17.46 => 4.17.47}/envs/default.env | 0 .../{4.17.46 => 4.17.47}/envs/global.env | 0 .../{4.17.46 => 4.17.47}/scripts/init.sh | 0 .../{4.17.46 => 4.17.47}/scripts/uninstall.sh | 0 .../{4.17.46 => 4.17.47}/scripts/upgrade.sh | 0 appstore/dujiaonext/0.1.0/.env | 39 ++ appstore/dujiaonext/0.1.0/config/config.yml | 124 ++++ appstore/dujiaonext/0.1.0/data.yml | 103 +++ appstore/dujiaonext/0.1.0/docker-compose.yml | 71 +++ .../0.1.0}/envs/default.env | 0 .../0.1.0}/envs/global.env | 0 appstore/dujiaonext/0.1.0/scripts/init.sh | 30 + .../0.1.0}/scripts/uninstall.sh | 0 .../0.1.0}/scripts/upgrade.sh | 0 appstore/dujiaonext/README.md | 81 +++ appstore/dujiaonext/data.yml | 17 + appstore/dujiaonext/logo.png | Bin 0 -> 77309 bytes appstore/dujiaonext/logo.svg | 602 ++++++++++++++++++ appstore/napcat/{4.17.46 => 4.17.47}/.env | 0 appstore/napcat/{4.17.46 => 4.17.47}/data.yml | 0 .../{4.17.46 => 4.17.47}/docker-compose.yml | 2 +- appstore/napcat/4.17.47/envs/default.env | 2 + appstore/napcat/4.17.47/envs/global.env | 2 + .../{4.17.46 => 4.17.47}/scripts/init.sh | 0 appstore/napcat/4.17.47/scripts/uninstall.sh | 10 + appstore/napcat/4.17.47/scripts/upgrade.sh | 17 + dockge/ani-rss/docker-compose.yml | 2 +- dockge/astrbot-napcat/docker-compose.yml | 2 +- dockge/dujiaonext/.env | 39 ++ dockge/dujiaonext/config/config.yml | 124 ++++ dockge/dujiaonext/docker-compose.yml | 71 +++ dockge/dujiaonext/envs/default.env | 2 + dockge/dujiaonext/envs/global.env | 2 + dockge/napcat/docker-compose.yml | 2 +- 45 files changed, 1342 insertions(+), 6 deletions(-) rename appstore/ani-rss/{3.0.8 => 3.0.9}/.env (100%) rename appstore/ani-rss/{3.0.8 => 3.0.9}/data.yml (100%) rename appstore/ani-rss/{3.0.8 => 3.0.9}/docker-compose.yml (95%) rename appstore/ani-rss/{3.0.8 => 3.0.9}/envs/default.env (100%) rename appstore/ani-rss/{3.0.8 => 3.0.9}/envs/global.env (100%) rename appstore/ani-rss/{3.0.8 => 3.0.9}/scripts/init.sh (100%) rename appstore/ani-rss/{3.0.8 => 3.0.9}/scripts/uninstall.sh (100%) rename appstore/ani-rss/{3.0.8 => 3.0.9}/scripts/upgrade.sh (100%) rename appstore/astrbot-napcat/{4.17.46 => 4.17.47}/.env (100%) rename appstore/astrbot-napcat/{4.17.46 => 4.17.47}/data.yml (100%) rename appstore/astrbot-napcat/{4.17.46 => 4.17.47}/docker-compose.yml (96%) rename appstore/astrbot-napcat/{4.17.46 => 4.17.47}/envs/default.env (100%) rename appstore/astrbot-napcat/{4.17.46 => 4.17.47}/envs/global.env (100%) rename appstore/astrbot-napcat/{4.17.46 => 4.17.47}/scripts/init.sh (100%) rename appstore/astrbot-napcat/{4.17.46 => 4.17.47}/scripts/uninstall.sh (100%) rename appstore/astrbot-napcat/{4.17.46 => 4.17.47}/scripts/upgrade.sh (100%) create mode 100644 appstore/dujiaonext/0.1.0/.env create mode 100644 appstore/dujiaonext/0.1.0/config/config.yml create mode 100644 appstore/dujiaonext/0.1.0/data.yml create mode 100644 appstore/dujiaonext/0.1.0/docker-compose.yml rename appstore/{napcat/4.17.46 => dujiaonext/0.1.0}/envs/default.env (100%) rename appstore/{napcat/4.17.46 => dujiaonext/0.1.0}/envs/global.env (100%) create mode 100644 appstore/dujiaonext/0.1.0/scripts/init.sh rename appstore/{napcat/4.17.46 => dujiaonext/0.1.0}/scripts/uninstall.sh (100%) rename appstore/{napcat/4.17.46 => dujiaonext/0.1.0}/scripts/upgrade.sh (100%) create mode 100644 appstore/dujiaonext/README.md create mode 100644 appstore/dujiaonext/data.yml create mode 100644 appstore/dujiaonext/logo.png create mode 100644 appstore/dujiaonext/logo.svg rename appstore/napcat/{4.17.46 => 4.17.47}/.env (100%) rename appstore/napcat/{4.17.46 => 4.17.47}/data.yml (100%) rename appstore/napcat/{4.17.46 => 4.17.47}/docker-compose.yml (93%) create mode 100644 appstore/napcat/4.17.47/envs/default.env create mode 100644 appstore/napcat/4.17.47/envs/global.env rename appstore/napcat/{4.17.46 => 4.17.47}/scripts/init.sh (100%) create mode 100644 appstore/napcat/4.17.47/scripts/uninstall.sh create mode 100644 appstore/napcat/4.17.47/scripts/upgrade.sh create mode 100644 dockge/dujiaonext/.env create mode 100644 dockge/dujiaonext/config/config.yml create mode 100644 dockge/dujiaonext/docker-compose.yml create mode 100644 dockge/dujiaonext/envs/default.env create mode 100644 dockge/dujiaonext/envs/global.env diff --git a/appstore/ani-rss/3.0.8/.env b/appstore/ani-rss/3.0.9/.env similarity index 100% rename from appstore/ani-rss/3.0.8/.env rename to appstore/ani-rss/3.0.9/.env diff --git a/appstore/ani-rss/3.0.8/data.yml b/appstore/ani-rss/3.0.9/data.yml similarity index 100% rename from appstore/ani-rss/3.0.8/data.yml rename to appstore/ani-rss/3.0.9/data.yml diff --git a/appstore/ani-rss/3.0.8/docker-compose.yml b/appstore/ani-rss/3.0.9/docker-compose.yml similarity index 95% rename from appstore/ani-rss/3.0.8/docker-compose.yml rename to appstore/ani-rss/3.0.9/docker-compose.yml index ded3b5a5e..b09ec631a 100644 --- a/appstore/ani-rss/3.0.8/docker-compose.yml +++ b/appstore/ani-rss/3.0.9/docker-compose.yml @@ -14,7 +14,7 @@ services: - PORT=7789 - CONFIG=/config - TZ=Asia/Shanghai - image: wushuo894/ani-rss:v3.0.8 + image: wushuo894/ani-rss:v3.0.9 labels: createdBy: Apps networks: diff --git a/appstore/ani-rss/3.0.8/envs/default.env b/appstore/ani-rss/3.0.9/envs/default.env similarity index 100% rename from appstore/ani-rss/3.0.8/envs/default.env rename to appstore/ani-rss/3.0.9/envs/default.env diff --git a/appstore/ani-rss/3.0.8/envs/global.env b/appstore/ani-rss/3.0.9/envs/global.env similarity index 100% rename from appstore/ani-rss/3.0.8/envs/global.env rename to appstore/ani-rss/3.0.9/envs/global.env diff --git a/appstore/ani-rss/3.0.8/scripts/init.sh b/appstore/ani-rss/3.0.9/scripts/init.sh similarity index 100% rename from appstore/ani-rss/3.0.8/scripts/init.sh rename to appstore/ani-rss/3.0.9/scripts/init.sh diff --git a/appstore/ani-rss/3.0.8/scripts/uninstall.sh b/appstore/ani-rss/3.0.9/scripts/uninstall.sh similarity index 100% rename from appstore/ani-rss/3.0.8/scripts/uninstall.sh rename to appstore/ani-rss/3.0.9/scripts/uninstall.sh diff --git a/appstore/ani-rss/3.0.8/scripts/upgrade.sh b/appstore/ani-rss/3.0.9/scripts/upgrade.sh similarity index 100% rename from appstore/ani-rss/3.0.8/scripts/upgrade.sh rename to appstore/ani-rss/3.0.9/scripts/upgrade.sh diff --git a/appstore/astrbot-napcat/4.17.46/.env b/appstore/astrbot-napcat/4.17.47/.env similarity index 100% rename from appstore/astrbot-napcat/4.17.46/.env rename to appstore/astrbot-napcat/4.17.47/.env diff --git a/appstore/astrbot-napcat/4.17.46/data.yml b/appstore/astrbot-napcat/4.17.47/data.yml similarity index 100% rename from appstore/astrbot-napcat/4.17.46/data.yml rename to appstore/astrbot-napcat/4.17.47/data.yml diff --git a/appstore/astrbot-napcat/4.17.46/docker-compose.yml b/appstore/astrbot-napcat/4.17.47/docker-compose.yml similarity index 96% rename from appstore/astrbot-napcat/4.17.46/docker-compose.yml rename to appstore/astrbot-napcat/4.17.47/docker-compose.yml index a786409d8..d23cc0aa3 100644 --- a/appstore/astrbot-napcat/4.17.46/docker-compose.yml +++ b/appstore/astrbot-napcat/4.17.47/docker-compose.yml @@ -36,7 +36,7 @@ services: - MODE=astrbot - NAPCAT_UID=${NAPCAT_UID:-1000} - NAPCAT_GID=${NAPCAT_GID:-1000} - image: mlikiowa/napcat-docker:v4.17.46 + image: mlikiowa/napcat-docker:v4.17.47 mac_address: ${NAPCAT_MAC_ADDRESS:-02:42:ac:11:00:02} networks: - 1panel-network diff --git a/appstore/astrbot-napcat/4.17.46/envs/default.env b/appstore/astrbot-napcat/4.17.47/envs/default.env similarity index 100% rename from appstore/astrbot-napcat/4.17.46/envs/default.env rename to appstore/astrbot-napcat/4.17.47/envs/default.env diff --git a/appstore/astrbot-napcat/4.17.46/envs/global.env b/appstore/astrbot-napcat/4.17.47/envs/global.env similarity index 100% rename from appstore/astrbot-napcat/4.17.46/envs/global.env rename to appstore/astrbot-napcat/4.17.47/envs/global.env diff --git a/appstore/astrbot-napcat/4.17.46/scripts/init.sh b/appstore/astrbot-napcat/4.17.47/scripts/init.sh similarity index 100% rename from appstore/astrbot-napcat/4.17.46/scripts/init.sh rename to appstore/astrbot-napcat/4.17.47/scripts/init.sh diff --git a/appstore/astrbot-napcat/4.17.46/scripts/uninstall.sh b/appstore/astrbot-napcat/4.17.47/scripts/uninstall.sh similarity index 100% rename from appstore/astrbot-napcat/4.17.46/scripts/uninstall.sh rename to appstore/astrbot-napcat/4.17.47/scripts/uninstall.sh diff --git a/appstore/astrbot-napcat/4.17.46/scripts/upgrade.sh b/appstore/astrbot-napcat/4.17.47/scripts/upgrade.sh similarity index 100% rename from appstore/astrbot-napcat/4.17.46/scripts/upgrade.sh rename to appstore/astrbot-napcat/4.17.47/scripts/upgrade.sh diff --git a/appstore/dujiaonext/0.1.0/.env b/appstore/dujiaonext/0.1.0/.env new file mode 100644 index 000000000..e77160ab5 --- /dev/null +++ b/appstore/dujiaonext/0.1.0/.env @@ -0,0 +1,39 @@ +# Redis 服务 (前置检查) [必填] +PANEL_REDIS_TYPE=redis + +# 数据持久化路径 [必填] +DUJIAONEXT_ROOT_PATH=/home/dujiaonext + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# WebUI 后台端口 [必填] +PANEL_APP_PORT_ADMIN=8081 + +# API 端口 [必填] +PANEL_APP_PORT_API=8082 + +# 管理员用户名 [必填] +DJ_DEFAULT_ADMIN_USERNAME= + +# 管理员密码 [必填] +DJ_DEFAULT_ADMIN_PASSWORD= + +# JWT 密钥 [必填] +JWT_SECRET=efd8bd2b3ecdca06dba6b6213bf46e7a16b9045bda6420828eeeb8f7e36c755f + +# 用户 JWT 密钥 [必填] +USER_JWT_SECRET=d13e38a2b2d582a4f5bcfda44ae5aa9c4bd93643ff308f0e5b45833aec28af20 + +# Redis 主机 [必填] +REDIS_HOST=127.0.0.1 + +# Redis 端口 [必填] +REDIS_PORT=6379 + +# Redis 连接密码 +REDIS_PASSWORD= + +# Redis 数据库索引 [必填] +REDIS_DB=0 + diff --git a/appstore/dujiaonext/0.1.0/config/config.yml b/appstore/dujiaonext/0.1.0/config/config.yml new file mode 100644 index 000000000..f5d0712de --- /dev/null +++ b/appstore/dujiaonext/0.1.0/config/config.yml @@ -0,0 +1,124 @@ +server: + host: 0.0.0.0 + port: 8080 + mode: debug + +log: + dir: "" + filename: app.log + max_size_mb: 100 + max_backups: 7 + max_age_days: 30 + compress: true + +database: + driver: sqlite + dsn: ./db/dujiao.db + pool: + max_open_conns: 1 + max_idle_conns: 1 + conn_max_lifetime_seconds: 0 + conn_max_idle_time_seconds: 0 + +jwt: + secret: your-secret-key-change-in-production-please + expire_hours: 24 + +user_jwt: + secret: user-secret-key-change-in-production-please + expire_hours: 24 + remember_me_expire_hours: 168 + +telegram_auth: + enabled: false + bot_username: "" + bot_token: "" + login_expire_seconds: 300 + replay_ttl_seconds: 300 + +redis: + enabled: true + host: 127.0.0.1 + port: 6379 + password: "" + db: 0 + prefix: "dj" + +queue: + enabled: true + host: 127.0.0.1 + port: 6379 + password: "" + db: 1 + concurrency: 10 + queues: + default: 10 + critical: 5 + +upload: + max_size: 10485760 + allowed_types: + - image/jpeg + - image/png + - image/gif + - image/webp + allowed_extensions: + - .jpg + - .jpeg + - .png + - .gif + - .webp + max_width: 4096 + max_height: 4096 + +cors: + allowed_origins: + - "*" + allowed_methods: + - GET + - POST + - PUT + - PATCH + - DELETE + - OPTIONS + allowed_headers: + - Content-Type + - Content-Length + - Accept-Encoding + - Authorization + - Cache-Control + - X-Requested-With + - X-CSRF-Token + allow_credentials: true + max_age: 600 + +security: + login_rate_limit: + window_seconds: 300 + max_attempts: 5 + block_seconds: 900 + password_policy: + min_length: 8 + require_upper: true + require_lower: true + require_number: true + require_special: false + +email: + enabled: true + host: smtp.xxx.com + port: 465 + username: your-username + password: your-password + from: your-email + from_name: your-name + use_tls: false + use_ssl: true + verify_code: + expire_minutes: 10 + send_interval_seconds: 60 + max_attempts: 5 + length: 6 + +order: + payment_expire_minutes: 15 diff --git a/appstore/dujiaonext/0.1.0/data.yml b/appstore/dujiaonext/0.1.0/data.yml new file mode 100644 index 000000000..37121984e --- /dev/null +++ b/appstore/dujiaonext/0.1.0/data.yml @@ -0,0 +1,103 @@ +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/dujiaonext" + edit: true + envKey: DUJIAONEXT_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: 8081 + edit: true + envKey: PANEL_APP_PORT_ADMIN + labelZh: WebUI 后台端口 + labelEn: WebUI Admin Port + required: true + rule: paramPort + type: number + - default: 8082 + edit: true + envKey: PANEL_APP_PORT_API + labelZh: API 端口 + labelEn: API Port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: DJ_DEFAULT_ADMIN_USERNAME + labelZh: 管理员用户名 + labelEn: Admin Username + required: true + type: text + - default: "" + edit: true + envKey: DJ_DEFAULT_ADMIN_PASSWORD + labelZh: 管理员密码 + labelEn: Admin Password + required: true + type: password + - default: "efd8bd2b3ecdca06dba6b6213bf46e7a16b9045bda6420828eeeb8f7e36c755f" + edit: true + envKey: JWT_SECRET + labelZh: JWT 密钥 + labelEn: JWT Secret + required: true + type: text + - default: "d13e38a2b2d582a4f5bcfda44ae5aa9c4bd93643ff308f0e5b45833aec28af20" + edit: true + envKey: USER_JWT_SECRET + labelZh: 用户 JWT 密钥 + labelEn: User JWT Secret + required: true + type: text + - default: "127.0.0.1" + edit: true + envKey: REDIS_HOST + labelZh: Redis 主机 + labelEn: Redis Host + required: true + type: text + - default: 6379 + edit: true + envKey: REDIS_PORT + labelZh: Redis 端口 + labelEn: Redis Port + required: true + type: number + - default: "" + edit: true + envKey: REDIS_PASSWORD + labelZh: Redis 连接密码 + labelEn: Redis Connection Password + required: false + type: password + - default: 0 + edit: true + envKey: REDIS_DB + labelZh: Redis 数据库索引 + labelEn: Redis Database Index + required: true + type: number diff --git a/appstore/dujiaonext/0.1.0/docker-compose.yml b/appstore/dujiaonext/0.1.0/docker-compose.yml new file mode 100644 index 000000000..d7e4b1832 --- /dev/null +++ b/appstore/dujiaonext/0.1.0/docker-compose.yml @@ -0,0 +1,71 @@ +networks: + 1panel-network: + external: true + dujiao-net: + driver: bridge +services: + dujiaonext-admin: + container_name: admin-dujiaonext + depends_on: + dujiaonext-api: + condition: service_healthy + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + image: dujiaonext/admin:v0.1.0 + networks: + - dujiao-net + ports: + - ${PANEL_APP_PORT_ADMIN}:80 + restart: always + dujiaonext-api: + container_name: dujiaonext + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + - QUEUE_HOST=${REDIS_HOST:-} + - QUEUE_PORT=${REDIS_PORT:-} + - QUEUE_PASSWORD=${REDIS_PASSWORD:-} + - QUEUE_DB=${REDIS_DB:-} + healthcheck: + interval: 10s + retries: 10 + test: + - CMD + - wget + - -qO- + - http://127.0.0.1:8080/health + timeout: 3s + image: dujiaonext/api:v0.1.0 + labels: + createdBy: Apps + networks: + - dujiao-net + ports: + - ${PANEL_APP_PORT_API}:8080 + restart: always + volumes: + - ${DUJIAONEXT_ROOT_PATH}/config/config.yml:/app/config.yml:ro + - ${DUJIAONEXT_ROOT_PATH}/data/db:/app/db + - ${DUJIAONEXT_ROOT_PATH}/data/uploads:/app/uploads + - ${DUJIAONEXT_ROOT_PATH}/data/logs:/app/logs + dujiaonext-user: + container_name: user-dujiaonext + depends_on: + dujiaonext-api: + condition: service_healthy + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + image: dujiaonext/user:v0.1.0 + networks: + - dujiao-net + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always diff --git a/appstore/napcat/4.17.46/envs/default.env b/appstore/dujiaonext/0.1.0/envs/default.env similarity index 100% rename from appstore/napcat/4.17.46/envs/default.env rename to appstore/dujiaonext/0.1.0/envs/default.env diff --git a/appstore/napcat/4.17.46/envs/global.env b/appstore/dujiaonext/0.1.0/envs/global.env similarity index 100% rename from appstore/napcat/4.17.46/envs/global.env rename to appstore/dujiaonext/0.1.0/envs/global.env diff --git a/appstore/dujiaonext/0.1.0/scripts/init.sh b/appstore/dujiaonext/0.1.0/scripts/init.sh new file mode 100644 index 000000000..9949f675a --- /dev/null +++ b/appstore/dujiaonext/0.1.0/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 + + mkdir -p "$DUJIAONEXT_ROOT_PATH" + mkdir -p "$DUJIAONEXT_ROOT_PATH/config" + mkdir -p "$DUJIAONEXT_ROOT_PATH/data" + mkdir -p "$DUJIAONEXT_ROOT_PATH/data/db" + mkdir -p "$DUJIAONEXT_ROOT_PATH/data/uploads" + mkdir -p "$DUJIAONEXT_ROOT_PATH/data/logs" + mkdir -p "$DUJIAONEXT_ROOT_PATH/data/redis" + mkdir -p "$DUJIAONEXT_ROOT_PATH/data/postgres" + + cp ./config/config.yml "$DUJIAONEXT_ROOT_PATH/config/config.yml" + + chmod -R 777 "$DUJIAONEXT_ROOT_PATH/data" + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/napcat/4.17.46/scripts/uninstall.sh b/appstore/dujiaonext/0.1.0/scripts/uninstall.sh similarity index 100% rename from appstore/napcat/4.17.46/scripts/uninstall.sh rename to appstore/dujiaonext/0.1.0/scripts/uninstall.sh diff --git a/appstore/napcat/4.17.46/scripts/upgrade.sh b/appstore/dujiaonext/0.1.0/scripts/upgrade.sh similarity index 100% rename from appstore/napcat/4.17.46/scripts/upgrade.sh rename to appstore/dujiaonext/0.1.0/scripts/upgrade.sh diff --git a/appstore/dujiaonext/README.md b/appstore/dujiaonext/README.md new file mode 100644 index 000000000..b032da9a2 --- /dev/null +++ b/appstore/dujiaonext/README.md @@ -0,0 +1,81 @@ +# 独角Dujiao-Next + +拥抱现代化开源数字商品销售系统 + +![独角Dujiao-Next](https://file.lifebus.top/imgs/dujiaonext_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) + +## 简介 + +### 完整业务闭环 + +覆盖商品、订单、支付、交付、用户中心、后台管理等核心流程。 + +### 多支付接入 + +支持支付宝、微信、PayPal、Stripe 等渠道,统一支付抽象与回调处理。 + +### 可扩展可维护 + +API/User/Admin 三端分层清晰,便于二开与替换前台模板。 + +## 安装 + +JWT 推荐使用 `openssl` 生成密钥: + +```bash +openssl rand -hex 32 +``` + +## 反向代理 + +```nginx +server { + listen 80; + server_name shop.example.com; + + # 前台 User + location / { + proxy_pass http://127.0.0.1:8081; + 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; + } + + # 后台 Admin + location = /admin { + return 301 /admin/; + } + + location /admin/ { + proxy_pass http://127.0.0.1:8082/; + 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; + } + + location /api/ { + proxy_pass http://127.0.0.1:8080/api/; + 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; + } + + location /uploads/ { + proxy_pass http://127.0.0.1:8080/uploads/; + 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) +![Ms Studio](https://analytics.lifebus.top/p/wJix5nI1W) diff --git a/appstore/dujiaonext/data.yml b/appstore/dujiaonext/data.yml new file mode 100644 index 000000000..de13ebd20 --- /dev/null +++ b/appstore/dujiaonext/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + key: dujiaonext + name: 独角Dujiao-Next + tags: + - WebSite + - Local + shortDescZh: 拥抱现代化开源数字商品销售系统 + shortDescEn: Embrace the Modern Open-Source Digital Goods Sales System + type: website + crossVersionUpdate: true + limit: 0 + website: https://dujiao-next.com/ + github: https://github.com/dujiao-next/ + document: https://dujiao-next.com/ + architectures: + - amd64 + - arm64 diff --git a/appstore/dujiaonext/logo.png b/appstore/dujiaonext/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2e5992eb309ca8c16e683d7f77b16ca0284ce769 GIT binary patch literal 77309 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/appstore/napcat/4.17.46/.env b/appstore/napcat/4.17.47/.env similarity index 100% rename from appstore/napcat/4.17.46/.env rename to appstore/napcat/4.17.47/.env diff --git a/appstore/napcat/4.17.46/data.yml b/appstore/napcat/4.17.47/data.yml similarity index 100% rename from appstore/napcat/4.17.46/data.yml rename to appstore/napcat/4.17.47/data.yml diff --git a/appstore/napcat/4.17.46/docker-compose.yml b/appstore/napcat/4.17.47/docker-compose.yml similarity index 93% rename from appstore/napcat/4.17.46/docker-compose.yml rename to appstore/napcat/4.17.47/docker-compose.yml index 6f7a953ee..e2b416514 100644 --- a/appstore/napcat/4.17.46/docker-compose.yml +++ b/appstore/napcat/4.17.47/docker-compose.yml @@ -11,7 +11,7 @@ services: - TZ=Asia/Shanghai - NAPCAT_UID=${NAPCAT_UID:-0} - NAPCAT_GID=${NAPCAT_GID:-0} - image: mlikiowa/napcat-docker:v4.17.46 + image: mlikiowa/napcat-docker:v4.17.47 labels: createdBy: Apps networks: diff --git a/appstore/napcat/4.17.47/envs/default.env b/appstore/napcat/4.17.47/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/appstore/napcat/4.17.47/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/napcat/4.17.47/envs/global.env b/appstore/napcat/4.17.47/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/appstore/napcat/4.17.47/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/napcat/4.17.46/scripts/init.sh b/appstore/napcat/4.17.47/scripts/init.sh similarity index 100% rename from appstore/napcat/4.17.46/scripts/init.sh rename to appstore/napcat/4.17.47/scripts/init.sh diff --git a/appstore/napcat/4.17.47/scripts/uninstall.sh b/appstore/napcat/4.17.47/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/appstore/napcat/4.17.47/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/napcat/4.17.47/scripts/upgrade.sh b/appstore/napcat/4.17.47/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/appstore/napcat/4.17.47/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/dockge/ani-rss/docker-compose.yml b/dockge/ani-rss/docker-compose.yml index ded3b5a5e..b09ec631a 100644 --- a/dockge/ani-rss/docker-compose.yml +++ b/dockge/ani-rss/docker-compose.yml @@ -14,7 +14,7 @@ services: - PORT=7789 - CONFIG=/config - TZ=Asia/Shanghai - image: wushuo894/ani-rss:v3.0.8 + image: wushuo894/ani-rss:v3.0.9 labels: createdBy: Apps networks: diff --git a/dockge/astrbot-napcat/docker-compose.yml b/dockge/astrbot-napcat/docker-compose.yml index a786409d8..d23cc0aa3 100644 --- a/dockge/astrbot-napcat/docker-compose.yml +++ b/dockge/astrbot-napcat/docker-compose.yml @@ -36,7 +36,7 @@ services: - MODE=astrbot - NAPCAT_UID=${NAPCAT_UID:-1000} - NAPCAT_GID=${NAPCAT_GID:-1000} - image: mlikiowa/napcat-docker:v4.17.46 + image: mlikiowa/napcat-docker:v4.17.47 mac_address: ${NAPCAT_MAC_ADDRESS:-02:42:ac:11:00:02} networks: - 1panel-network diff --git a/dockge/dujiaonext/.env b/dockge/dujiaonext/.env new file mode 100644 index 000000000..e77160ab5 --- /dev/null +++ b/dockge/dujiaonext/.env @@ -0,0 +1,39 @@ +# Redis 服务 (前置检查) [必填] +PANEL_REDIS_TYPE=redis + +# 数据持久化路径 [必填] +DUJIAONEXT_ROOT_PATH=/home/dujiaonext + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# WebUI 后台端口 [必填] +PANEL_APP_PORT_ADMIN=8081 + +# API 端口 [必填] +PANEL_APP_PORT_API=8082 + +# 管理员用户名 [必填] +DJ_DEFAULT_ADMIN_USERNAME= + +# 管理员密码 [必填] +DJ_DEFAULT_ADMIN_PASSWORD= + +# JWT 密钥 [必填] +JWT_SECRET=efd8bd2b3ecdca06dba6b6213bf46e7a16b9045bda6420828eeeb8f7e36c755f + +# 用户 JWT 密钥 [必填] +USER_JWT_SECRET=d13e38a2b2d582a4f5bcfda44ae5aa9c4bd93643ff308f0e5b45833aec28af20 + +# Redis 主机 [必填] +REDIS_HOST=127.0.0.1 + +# Redis 端口 [必填] +REDIS_PORT=6379 + +# Redis 连接密码 +REDIS_PASSWORD= + +# Redis 数据库索引 [必填] +REDIS_DB=0 + diff --git a/dockge/dujiaonext/config/config.yml b/dockge/dujiaonext/config/config.yml new file mode 100644 index 000000000..f5d0712de --- /dev/null +++ b/dockge/dujiaonext/config/config.yml @@ -0,0 +1,124 @@ +server: + host: 0.0.0.0 + port: 8080 + mode: debug + +log: + dir: "" + filename: app.log + max_size_mb: 100 + max_backups: 7 + max_age_days: 30 + compress: true + +database: + driver: sqlite + dsn: ./db/dujiao.db + pool: + max_open_conns: 1 + max_idle_conns: 1 + conn_max_lifetime_seconds: 0 + conn_max_idle_time_seconds: 0 + +jwt: + secret: your-secret-key-change-in-production-please + expire_hours: 24 + +user_jwt: + secret: user-secret-key-change-in-production-please + expire_hours: 24 + remember_me_expire_hours: 168 + +telegram_auth: + enabled: false + bot_username: "" + bot_token: "" + login_expire_seconds: 300 + replay_ttl_seconds: 300 + +redis: + enabled: true + host: 127.0.0.1 + port: 6379 + password: "" + db: 0 + prefix: "dj" + +queue: + enabled: true + host: 127.0.0.1 + port: 6379 + password: "" + db: 1 + concurrency: 10 + queues: + default: 10 + critical: 5 + +upload: + max_size: 10485760 + allowed_types: + - image/jpeg + - image/png + - image/gif + - image/webp + allowed_extensions: + - .jpg + - .jpeg + - .png + - .gif + - .webp + max_width: 4096 + max_height: 4096 + +cors: + allowed_origins: + - "*" + allowed_methods: + - GET + - POST + - PUT + - PATCH + - DELETE + - OPTIONS + allowed_headers: + - Content-Type + - Content-Length + - Accept-Encoding + - Authorization + - Cache-Control + - X-Requested-With + - X-CSRF-Token + allow_credentials: true + max_age: 600 + +security: + login_rate_limit: + window_seconds: 300 + max_attempts: 5 + block_seconds: 900 + password_policy: + min_length: 8 + require_upper: true + require_lower: true + require_number: true + require_special: false + +email: + enabled: true + host: smtp.xxx.com + port: 465 + username: your-username + password: your-password + from: your-email + from_name: your-name + use_tls: false + use_ssl: true + verify_code: + expire_minutes: 10 + send_interval_seconds: 60 + max_attempts: 5 + length: 6 + +order: + payment_expire_minutes: 15 diff --git a/dockge/dujiaonext/docker-compose.yml b/dockge/dujiaonext/docker-compose.yml new file mode 100644 index 000000000..d7e4b1832 --- /dev/null +++ b/dockge/dujiaonext/docker-compose.yml @@ -0,0 +1,71 @@ +networks: + 1panel-network: + external: true + dujiao-net: + driver: bridge +services: + dujiaonext-admin: + container_name: admin-dujiaonext + depends_on: + dujiaonext-api: + condition: service_healthy + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + image: dujiaonext/admin:v0.1.0 + networks: + - dujiao-net + ports: + - ${PANEL_APP_PORT_ADMIN}:80 + restart: always + dujiaonext-api: + container_name: dujiaonext + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + - QUEUE_HOST=${REDIS_HOST:-} + - QUEUE_PORT=${REDIS_PORT:-} + - QUEUE_PASSWORD=${REDIS_PASSWORD:-} + - QUEUE_DB=${REDIS_DB:-} + healthcheck: + interval: 10s + retries: 10 + test: + - CMD + - wget + - -qO- + - http://127.0.0.1:8080/health + timeout: 3s + image: dujiaonext/api:v0.1.0 + labels: + createdBy: Apps + networks: + - dujiao-net + ports: + - ${PANEL_APP_PORT_API}:8080 + restart: always + volumes: + - ${DUJIAONEXT_ROOT_PATH}/config/config.yml:/app/config.yml:ro + - ${DUJIAONEXT_ROOT_PATH}/data/db:/app/db + - ${DUJIAONEXT_ROOT_PATH}/data/uploads:/app/uploads + - ${DUJIAONEXT_ROOT_PATH}/data/logs:/app/logs + dujiaonext-user: + container_name: user-dujiaonext + depends_on: + dujiaonext-api: + condition: service_healthy + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + image: dujiaonext/user:v0.1.0 + networks: + - dujiao-net + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always diff --git a/dockge/dujiaonext/envs/default.env b/dockge/dujiaonext/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/dockge/dujiaonext/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/dujiaonext/envs/global.env b/dockge/dujiaonext/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/dockge/dujiaonext/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/napcat/docker-compose.yml b/dockge/napcat/docker-compose.yml index 6f7a953ee..e2b416514 100644 --- a/dockge/napcat/docker-compose.yml +++ b/dockge/napcat/docker-compose.yml @@ -11,7 +11,7 @@ services: - TZ=Asia/Shanghai - NAPCAT_UID=${NAPCAT_UID:-0} - NAPCAT_GID=${NAPCAT_GID:-0} - image: mlikiowa/napcat-docker:v4.17.46 + image: mlikiowa/napcat-docker:v4.17.47 labels: createdBy: Apps networks: