From 3e7d353f8067a33821757960af800a00146ee7b2 Mon Sep 17 00:00:00 2001 From: lich Date: Mon, 6 Apr 2026 10:28:11 +0800 Subject: [PATCH] Add deployment notes and patch artifacts --- CUSTOM_REDEEM_SUBSCRIPTION.md | 22 ++++++++++++++++++++ custom-redeem-subscription.patch | Bin 0 -> 98888 bytes docker-compose.remote-test.yml | 34 +++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 CUSTOM_REDEEM_SUBSCRIPTION.md create mode 100644 custom-redeem-subscription.patch create mode 100644 docker-compose.remote-test.yml diff --git a/CUSTOM_REDEEM_SUBSCRIPTION.md b/CUSTOM_REDEEM_SUBSCRIPTION.md new file mode 100644 index 00000000..a2971297 --- /dev/null +++ b/CUSTOM_REDEEM_SUBSCRIPTION.md @@ -0,0 +1,22 @@ +# Customization: subscription-capable redemption codes + +Base upstream commit: 677d02f2 +Local branch: codex/redeem-subscription +Deployment dir: /root/docker/newapi + +What changed +- Redemption codes support two modes: quota and subscription. +- Subscription redemption creates user_subscriptions with source=redeem. +- Admin redemption UI supports selecting a subscription plan. +- User redemption response distinguishes quota vs subscription. + +Suggested future upgrade flow +1. Pull latest upstream source into a clean clone. +2. Re-apply the patch file in this folder. +3. Resolve any merge conflicts in redemption/subscription files. +4. Rebuild with: docker compose up -d --build new-api +5. Verify with: curl http://127.0.0.1:3000/api/status + +Current compose note +- This server is currently using source build mode instead of the official image. +- Original compose backup: docker-compose.yml.bak-20260406094555 diff --git a/custom-redeem-subscription.patch b/custom-redeem-subscription.patch new file mode 100644 index 0000000000000000000000000000000000000000..7cba7179943a9e437fbe7bc5e9ebab5b6d3524e0 GIT binary patch literal 98888 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 literal 0 HcmV?d00001 diff --git a/docker-compose.remote-test.yml b/docker-compose.remote-test.yml new file mode 100644 index 00000000..264310bb --- /dev/null +++ b/docker-compose.remote-test.yml @@ -0,0 +1,34 @@ +services: + new-api: + build: + context: . + dockerfile: Dockerfile + image: new-api-local:test + container_name: new-api + restart: always + command: --log-dir /app/logs + env_file: + - .env + ports: + - "${NEWAPI_PORT}:3000" + volumes: + - /root/docker/newapi/data:/data + - /root/docker/newapi/logs:/app/logs + environment: + - SQL_DSN=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB} + - REDIS_CONN_STRING=${REDIS_CONN_STRING} + - TZ=${TZ} + - ERROR_LOG_ENABLED=${ERROR_LOG_ENABLED} + - BATCH_UPDATE_ENABLED=${BATCH_UPDATE_ENABLED} + depends_on: + - redis + healthcheck: + test: ["CMD-SHELL", "wget -q -O - http://localhost:3000/api/status | grep -o '\"success\":\\s*true' || exit 1"] + interval: 30s + timeout: 10s + retries: 3 + + redis: + image: redis:latest + container_name: redis + restart: always