forked from rinafcode/teachLink_backend
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.env.staging
More file actions
152 lines (134 loc) · 7.66 KB
/
Copy path.env.staging
File metadata and controls
152 lines (134 loc) · 7.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
NODE_ENV=staging
JAEGER_AGENT_HOST=jaeger
JAEGER_AGENT_PORT=6831
# ─── Database ────────────────────────────────────────────────────────────────
DATABASE_HOST=staging-db.internal
DATABASE_PORT=5432
DATABASE_USER=teachlink_staging
DATABASE_PASSWORD=CHANGE_ME_staging_db_password
DATABASE_NAME=teachlink_staging
# Pool sizing matches prod (see README pool table)
DATABASE_POOL_MAX=20
DATABASE_POOL_MIN=5
DATABASE_POOL_ACQUIRE_TIMEOUT_MS=10000
DATABASE_POOL_IDLE_TIMEOUT_MS=30000
# Read replicas (optional, mirrors prod topology)
DATABASE_REPLICA_HOSTS=staging-replica.internal
DATABASE_REPLICA_PORT=5432
DATABASE_REPLICA_USER=teachlink_ro
DATABASE_REPLICA_PASSWORD=CHANGE_ME_replica_password
DATABASE_REPLICA_NAME=teachlink_staging
# ─── Auth ────────────────────────────────────────────────────────────────────
JWT_SECRET=CHANGE_ME_staging_jwt_secret_min_32_chars
JWT_EXPIRES_IN=15m
JWT_REFRESH_SECRET=CHANGE_ME_staging_refresh_secret_min_32_chars
JWT_REFRESH_EXPIRES_IN=7d
ENCRYPTION_SECRET=CHANGE_ME_staging_32_char_encryption_key
# ─── Security ────────────────────────────────────────────────────────────────
# Staging: 10-12 rounds (matches prod security level per README)
BCRYPT_ROUNDS=12
# ─── Redis ───────────────────────────────────────────────────────────────────
REDIS_HOST=staging-redis.internal
REDIS_PORT=6379
# ─── Session ─────────────────────────────────────────────────────────────────
SESSION_SECRET=CHANGE_ME_staging_session_secret_min_32_chars
SESSION_COOKIE_NAME=teachlink.sid
SESSION_PREFIX=sess:
SESSION_TTL_SECONDS=604800
SESSION_COOKIE_MAX_AGE_MS=604800000
SESSION_LOCK_TTL_MS=5000
SESSION_LOCK_MAX_RETRIES=5
SESSION_LOCK_RETRY_DELAY_MS=120
STICKY_SESSIONS_REQUIRED=true
TRUST_PROXY=true
# ─── Elasticsearch ───────────────────────────────────────────────────────────
ELASTICSEARCH_NODE=http://staging-elasticsearch.internal:9200
ELASTICSEARCH_USERNAME=
ELASTICSEARCH_PASSWORD=
ELASTICSEARCH_API_KEY=
ELASTICSEARCH_CA_FINGERPRINT=
ELASTICSEARCH_REQUEST_TIMEOUT=30000
ELASTICSEARCH_MAX_RETRIES=3
KIBANA_URL=http://staging-kibana.internal:5601
# ─── Alerting ────────────────────────────────────────────────────────────────
ALERT_EMAIL_RECIPIENTS=staging-ops@teachlink.io
ALERT_SLACK_WEBHOOK_URL=https://hooks.slack.com/services/YOUR/STAGING/WEBHOOK
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/YOUR/STAGING/WEBHOOK
# ─── Email / SMTP ────────────────────────────────────────────────────────────
SMTP_HOST=smtp.mailtrap.io
SMTP_PORT=587
SMTP_SECURE=false
SMTP_USER=CHANGE_ME_staging_smtp_user
SMTP_PASS=CHANGE_ME_staging_smtp_pass
EMAIL_FROM=noreply-staging@teachlink.io
EMAIL_FROM_NAME=TeachLink Staging
SENDGRID_API_KEY=CHANGE_ME_staging_sendgrid_key
SENDGRID_HEALTH_URL=https://api.sendgrid.com/v3/health
# ─── Stripe ──────────────────────────────────────────────────────────────────
# Use Stripe test-mode keys for staging
STRIPE_SECRET_KEY=sk_test_CHANGE_ME_staging_stripe_key
STRIPE_WEBHOOK_SECRET=whsec_CHANGE_ME_staging_webhook_secret
STRIPE_HEALTH_URL=https://api.stripe.com/v1/balance
# ─── AWS ─────────────────────────────────────────────────────────────────────
AWS_ACCESS_KEY_ID=CHANGE_ME_staging_aws_key
AWS_SECRET_ACCESS_KEY=CHANGE_ME_staging_aws_secret
AWS_REGION=us-east-1
AWS_S3_BUCKET=teachlink-staging
AWS_S3_BUCKET_NAME=teachlink-staging
AWS_KMS_KEY_ID=CHANGE_ME_staging_kms_key
AWS_CLOUDFRONT_DISTRIBUTION_ID=CHANGE_ME_staging_cf_dist
AWS_SQS_NOTIFICATION_QUEUE_URL=https://sqs.us-east-1.amazonaws.com/YOUR_ACCOUNT/teachlink-notifications-staging
AWS_SNS_NOTIFICATION_TOPIC_ARN=arn:aws:sns:us-east-1:YOUR_ACCOUNT:teachlink-notifications-staging
AWS_HEALTH_URL=https://sts.amazonaws.com
# ─── Application ─────────────────────────────────────────────────────────────
APP_URL=https://staging.teachlink.io
CORS_ALLOWED_ORIGINS=https://staging.teachlink.io,https://staging-app.teachlink.io
# ─── GraphQL ─────────────────────────────────────────────────────────────────
GRAPHQL_MAX_DEPTH=10
GRAPHQL_MAX_COMPLEXITY=1000
GRAPHQL_LIST_MULTIPLIER=10
# ─── Feature Flags (same as prod) ────────────────────────────────────────────
ENABLE_AUTH=true
ENABLE_SESSION_MANAGEMENT=true
ENABLE_PAYMENTS=true
ENABLE_AB_TESTING=false
ENABLE_DATA_WAREHOUSE=false
ENABLE_COLLABORATION=true
ENABLE_MEDIA_PROCESSING=true
ENABLE_BACKUP=true
ENABLE_GRAPHQL=false
ENABLE_SYNC=true
ENABLE_MIGRATIONS=true
ENABLE_RATE_LIMITING=true
ENABLE_OBSERVABILITY=true
ENABLE_CACHING=true
ENABLE_FEATURE_FLAGS=true
ENABLE_SEARCH=true
ENABLE_NOTIFICATIONS=true
ENABLE_EMAIL_MARKETING=true
ENABLE_GAMIFICATION=true
ENABLE_ASSESSMENT=true
ENABLE_LEARNING_PATHS=true
ENABLE_MODERATION=true
ENABLE_ORCHESTRATION=true
ENABLE_SECURITY=true
ENABLE_TENANCY=true
ENABLE_CDN=true
# ─── Performance ─────────────────────────────────────────────────────────────
CLUSTER_MODE=false
CLUSTER_WORKERS=4
# ─── Secrets Management ──────────────────────────────────────────────────────
SECRET_PROVIDER=env
SECRET_CACHE_TTL_MS=300000
SECRETS_TO_ROTATE=JWT_SECRET,DATABASE_PASSWORD,STRIPE_SECRET_KEY
# ─── Idempotency ─────────────────────────────────────────────────────────────
IDEMPOTENCY_TTL_SECONDS=86400
# ─── Circuit Breaker ─────────────────────────────────────────────────────────
CIRCUIT_BREAKER_TIMEOUT_MS=3000
CIRCUIT_BREAKER_ERROR_THRESHOLD=50
CIRCUIT_BREAKER_RESET_TIMEOUT_MS=30000
CIRCUIT_BREAKER_ROLLING_COUNT_TIMEOUT=60000
CIRCUIT_BREAKER_ROLLING_COUNT_BUCKETS=10
# ─── API Versioning ──────────────────────────────────────────────────────────
API_SUPPORTED_VERSIONS=1
API_DEFAULT_VERSION=1