# 测试服环境变量 APP_ENV=development # Prisma Config # MYSQL_URL="mysql://boxdbuser:dwR%3D%29whu2Ze@localhost:3306/box_admin" # MONGO_URL="mongodb://boxuser:dwR%3D%29whu2Ze@localhost:27017/box_admin?authSource=admin" # MONGO_STATS_URL="mongodb://boxuser:dwR%3D%29whu2Ze@localhost:27017/box_stats?authSource=admin" # dave local MYSQL_URL="mysql://root:123456@localhost:3306/box_admin" MONGO_URL="mongodb://admin:ZXcv%21%21996@localhost:27017/box_admin?authSource=admin" MONGO_STATS_URL="mongodb://admin:ZXcv%21%21996@localhost:27017/box_stats?authSource=admin" # office dev env # MYSQL_URL="mysql://root:123456@192.168.0.100:3306/box_admin" # MONGO_URL="mongodb://msAdmin:Fl1%2A29MJe%26jLvj@192.168.0.100:27017/box_admin?authSource=admin" # MONGO_STATS_URL="mongodb://msAdmin:Fl1%2A29MJe%26jLvj@192.168.0.100:27017/box_stats?authSource=admin" # App set to 0.0.0.0 for local LAN access APP_HOST=0.0.0.0 APP_PORT=3302 APP_CORS_ORIGIN=* # JWT JWT_SECRET=047df8aaa3d17dc1173c5a9a3052ba66c2b0bd96937147eb643319a0c90d132f JWT_ACCESS_TOKEN_TTL=43200 # RabbitMQ Config RABBITMQ_URL="amqp://boxrabbit:BoxRabbit%232025@localhost:5672" RABBITMQ_LOGIN_EXCHANGE="stats.user" RABBITMQ_LOGIN_QUEUE="stats.user.login.q" RABBITMQ_LOGIN_ROUTING_KEY="user.login" RABBITMQ_ADS_CLICK_ROUTING_KEY="stats.ad.click" # Stats Events Queues & Routing Keys RABBITMQ_STATS_EXCHANGE="stats.user" RABBITMQ_STATS_AD_CLICK_QUEUE="stats.ad.click" RABBITMQ_STATS_AD_CLICK_ROUTING_KEY="stats.ad.click" RABBITMQ_STATS_VIDEO_CLICK_QUEUE="stats.video.click" RABBITMQ_STATS_VIDEO_CLICK_ROUTING_KEY="stats.video.click" RABBITMQ_STATS_AD_IMPRESSION_QUEUE="stats.ad.impression" RABBITMQ_STATS_AD_IMPRESSION_ROUTING_KEY="stats.ad.impression" # Stats Aggregation Scheduler (runs every 5 minutes) # Set to 'false' to disable scheduled aggregation (manual trigger only via API) STATS_AGGREGATION_ENABLED=true # Optional: limit aggregation to last N days (leave empty for all-time) # STATS_AGGREGATION_WINDOW_DAYS=30 # Stats Scoring Configuration # CTR Smoothing (Laplace): (clicks + alpha) / (impressions + beta) STATS_CTR_ALPHA=1 STATS_CTR_BETA=2 # Scoring Weights: score = w1*popularity + w2*ctr + w3*recency # Popularity: log(1 + impressions) # CTR: smoothed click-through rate # Recency: 1/(1 + ageDays) based on firstSeenAt STATS_WEIGHT_POPULARITY=0.5 STATS_WEIGHT_CTR=0.3 STATS_WEIGHT_RECENCY=0.2