# Django DJANGO_SECRET_KEY=change-me-generate-a-random-secret DJANGO_DEBUG=true DJANGO_ALLOWED_HOSTS=127.0.0.1,localhost,testserver DJANGO_CSRF_TRUSTED_ORIGINS= DJANGO_TIME_ZONE=Asia/Shanghai DJANGO_EMAIL_BACKEND=django.core.mail.backends.console.EmailBackend DJANGO_DEFAULT_FROM_EMAIL=noreply@cmhub.local DJANGO_SESSION_COOKIE_SECURE=false DJANGO_CSRF_COOKIE_SECURE=false DJANGO_SECURE_SSL_REDIRECT=false DJANGO_SECURE_HSTS_SECONDS=0 DJANGO_SECURE_HSTS_INCLUDE_SUBDOMAINS=false DJANGO_SECURE_HSTS_PRELOAD=false DJANGO_SECURE_PROXY_SSL_HEADER=false ACCOUNT_SIGNUP_RATE_LIMIT=20/m/ip # Static and shared cache STATIC_URL=/static/ STATIC_ROOT=D:\chengma\cmhub\staticfiles DJANGO_CACHE_BACKEND=django.core.cache.backends.locmem.LocMemCache DJANGO_CACHE_LOCATION=cmhub-local-cache # MySQL 8.4 MYSQL_HOST=127.0.0.1 MYSQL_PORT=3306 MYSQL_DATABASE=cmhub MYSQL_USER=cmhub MYSQL_PASSWORD=change-me MYSQL_CHARSET=utf8mb4 MYSQL_CONNECT_TIMEOUT=30 MYSQL_READ_TIMEOUT=120 MYSQL_WRITE_TIMEOUT=120 # AI key encryption AI_KEY_ENCRYPTION_KEY=base64-fernet-key DEVICE_IDENTIFIER_PEPPER=change-me-device-identifier-pepper DEVICE_SESSION_TTL_SECONDS=3600 DEVICE_ACTIVITY_UPDATE_SECONDS=86400 MIGRATION_REQUEST_TTL_SECONDS=900 CMSHOPEE_AUTHORIZATION_SHADOW_MODE=true CMSHOPEE_SUBSCRIPTION_MODE=open # Legacy fallback only when CMSHOPEE_SUBSCRIPTION_MODE is unset: # CMSHOPEE_SUBSCRIPTION_ENFORCEMENT=false # Client-only startup policy: off -> false/false, observe -> true/false, # enforce -> true/true. Update the timestamp whenever this policy changes. CMSHOPEE_CLIENT_SUBSCRIPTION_POLICY=off CMSHOPEE_CLIENT_SUBSCRIPTION_POLICY_UPDATED_AT=2026-07-28T00:00:00+08:00 AI_IMAGE_UPSTREAM_DEADLINE_SECONDS=180 PUBLIC_BASE_URL= MEDIA_PUBLIC_BASE_URL= IMAGE_TASK_RETENTION_HOURS=24 GENERATED_IMAGE_RETENTION_HOURS=72 IMAGE_TASK_REAPER_INTERVAL_SECONDS=60 IMAGE_TASK_LEASE_SECONDS=600 IMAGE_TASK_MAX_RETRIES=2 IMAGE_TASK_RETRY_BACKOFF_SECONDS=10,30 # API safety API_GENERATE_THROTTLE_RATE=60/min API_AUTH_FAILURE_THROTTLE_RATE=30/min IMAGE_URL_MAX_BYTES=10485760 IMAGE_MAX_INPUT_IMAGES=8 IMAGE_MAX_INPUT_IMAGE_BYTES=10485760 IMAGE_MAX_INPUT_TOTAL_BYTES=33554432 IMAGE_URL_MAX_REDIRECTS=3 IMAGE_URL_CONNECT_TIMEOUT_SECONDS=10 IMAGE_URL_READ_TIMEOUT_SECONDS=60 VISION_MAX_IMAGES=8 VISION_MAX_IMAGE_BYTES=10485760 VISION_MAX_TOTAL_BYTES=33554432 RECHARGE_MAX_AMOUNT_CNY=100000.00 # Content moderation MODERATION_ENABLED=false MODERATION_PROVIDER=keyword MODERATION_FAIL_CLOSED=true MODERATION_BLOCK_ON_REVIEW=false MODERATION_CACHE_VERSION_KEY=moderation:sensitive_words:version # Payment callback verification PAYMENT_CALLBACK_MODE=mock PAYMENT_MOCK_CALLBACK_SECRET=change-me-mock-callback-secret PAYMENT_QR_EXPIRES_MINUTES=10 # WeChat Pay V3 native WECHAT_PAY_APPID=wx-your-appid WECHAT_PAY_MCHID=your-mchid WECHAT_PAY_API_V3_KEY=change-me WECHAT_PAY_CERT_SERIAL_NO=your-cert-serial-no WECHAT_PAY_PRIVATE_KEY_PATH=/secure/wechat/apiclient_key.pem WECHAT_PAY_NOTIFY_URL=https://cmhub.example.com/api/v1/recharge/callback/wechat SOFTWARE_WECHAT_PAY_NOTIFY_URL=https://cmhub.example.com/api/v1/software-orders/callback/wechat # Alipay face-to-face payment ALIPAY_APPID=your-alipay-appid ALIPAY_APP_PRIVATE_KEY_PATH=/secure/alipay/app_private_key.pem ALIPAY_PUBLIC_KEY_PATH=/secure/alipay/alipay_public_key.pem ALIPAY_NOTIFY_URL=https://cmhub.example.com/api/v1/recharge/callback/alipay ALIPAY_DEBUG=false # Media storage STORAGE_BACKEND=local MEDIA_ROOT=D:\chengma\cmhub\media MEDIA_URL=/media/ S3_ENDPOINT_URL=https://s3.example.com S3_BUCKET_NAME=cmhub-media S3_ACCESS_KEY_ID=change-me S3_SECRET_ACCESS_KEY=change-me