File size: 7,123 Bytes
059ec0d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/usr/bin/env bash
# Generate all production secrets for MicProtocol self-hosted integrations
# Run this once during initial setup. Save output to .env.production

set -euo pipefail

echo "# ============================================================"
echo "# MicProtocol Production Secrets - Generated $(date -u +%Y-%m-%dT%H:%M:%SZ)"
echo "# ============================================================"
echo "# IMPORTANT: Save this output securely. Do not commit to git."
echo "# ============================================================"
echo ""

# Core Infrastructure
echo "# ─── Core Infrastructure ───────────────────────────────────"
POSTGRES_PASSWORD=$(openssl rand -base64 32 | tr -d '/+=' | cut -c1-32)
REDIS_PASSWORD=$(openssl rand -base64 32 | tr -d '/+=' | cut -c1-32)
MEILISEARCH_API_KEY=$(openssl rand -base64 32 | tr -d '/+=' | cut -c1-32)
MINIO_ROOT_USER="micprotocol_admin"
MINIO_ROOT_PASSWORD=$(openssl rand -base64 32 | tr -d '/+=' | cut -c1-32)
echo "POSTGRES_PASSWORD=${POSTGRES_PASSWORD}"
echo "REDIS_PASSWORD=${REDIS_PASSWORD}"
echo "MEILISEARCH_API_KEY=${MEILISEARCH_API_KEY}"
echo "MINIO_ROOT_USER=${MINIO_ROOT_USER}"
echo "MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD}"
echo ""

# JWT/Encryption Keys (NEVER ROTATE THESE - data loss if rotated)
echo "# ─── Encryption Keys (NEVER ROTATE) ────────────────────────"
ENCRYPTION_KEY=$(openssl rand -hex 32)
JWT_SECRET=$(openssl rand -base64 64 | tr -d '/+=' | cut -c1-64)
NEXTAUTH_SECRET=$(openssl rand -base64 32)
echo "ENCRYPTION_KEY=${ENCRYPTION_KEY}"
echo "JWT_SECRET=${JWT_SECRET}"
echo "NEXTAUTH_SECRET=${NEXTAUTH_SECRET}"
echo ""

# Chatwoot
echo "# ─── Chatwoot (Customer Support) ──────────────────────────"
CHATWOOT_SECRET_KEY_BASE=$(openssl rand -hex 64)
CHATWOOT_WEBHOOK_SECRET=$(openssl rand -hex 32)
echo "CHATWOOT_SECRET_KEY_BASE=${CHATWOOT_SECRET_KEY_BASE}"
echo "CHATWOOT_WEBHOOK_SECRET=${CHATWOOT_WEBHOOK_SECRET}"
echo "# Generate these in Chatwoot UI after setup:"
echo "# CHATWOOT_INBOX_ID=<from Settings β†’ Inboxes β†’ Website>"
echo "# NEXT_PUBLIC_CHATWOOT_WEBSITE_TOKEN=<from Settings β†’ Inboxes β†’ Website β†’ Configuration>"
echo ""

# Cal.com
echo "# ─── Cal.com (Scheduling) ──────────────────────────────────"
CALCOM_NEXTAUTH_SECRET=$(openssl rand -base64 32)
CALCOM_ENCRYPTION_KEY=$(openssl rand -hex 12)  # 24 chars, NEVER ROTATE
CALCOM_WEBHOOK_SECRET=$(openssl rand -hex 32)
echo "CALCOM_NEXTAUTH_SECRET=${CALCOM_NEXTAUTH_SECRET}"
echo "CALCOM_ENCRYPTION_KEY=${CALCOM_ENCRYPTION_KEY}"
echo "CALCOM_WEBHOOK_SECRET=${CALCOM_WEBHOOK_SECRET}"
echo "# Generate in Cal.com Admin β†’ API Keys:"
echo "# CALCOM_API_KEY=cal_live_..."
echo ""

# Formbricks (v4 - 5 containers)
echo "# ─── Formbricks (Surveys & Feedback) ──────────────────────"
FORMBRICKS_NEXTAUTH_SECRET=$(openssl rand -base64 32)
FORMBRICKS_ENCRYPTION_KEY=$(openssl rand -hex 32)  # NEVER ROTATE
FORMBRICKS_CRON_SECRET=$(openssl rand -base64 16)
FORMBRICKS_HUB_API_KEY=$(openssl rand -hex 32)
FORMBRICKS_CUBE_API_SECRET=$(openssl rand -hex 32)
FORMBRICKS_WEBHOOK_SECRET=$(openssl rand -hex 32)
echo "FORMBRICKS_NEXTAUTH_SECRET=${FORMBRICKS_NEXTAUTH_SECRET}"
echo "FORMBRICKS_ENCRYPTION_KEY=${FORMBRICKS_ENCRYPTION_KEY}"
echo "FORMBRICKS_CRON_SECRET=${FORMBRICKS_CRON_SECRET}"
echo "FORMBRICKS_HUB_API_KEY=${FORMBRICKS_HUB_API_KEY}"
echo "FORMBRICKS_CUBE_API_SECRET=${FORMBRICKS_CUBE_API_SECRET}"
echo "FORMBRICKS_WEBHOOK_SECRET=${FORMBRICKS_WEBHOOK_SECRET}"
echo "# Generate in Formbricks UI after setup:"
echo "# NEXT_PUBLIC_FORMBRICKS_ENVIRONMENT_ID=<from Settings β†’ Environments>"
echo "# FORMBRICKS_API_KEY=<from Settings β†’ API Keys>"
echo ""

# Listmonk
echo "# ─── Listmonk (Email Marketing) ───────────────────────────"
LISTMONK_ADMIN_PASSWORD=$(openssl rand -base64 24 | tr -d '/+=' | cut -c1-24)
echo "LISTMONK_ADMIN_PASSWORD=${LISTMONK_ADMIN_PASSWORD}"
echo "# Generate in Listmonk Admin β†’ Settings β†’ API:"
echo "# LISTMONK_API_TOKEN=<from API Keys page>"
echo "# Create a list in Listmonk Admin β†’ Lists β†’ Copy UUID:"
echo "# NEXT_PUBLIC_LISTMONK_LIST_UUID=<list-uuid>"
echo ""

# Documenso (if used)
echo "# ─── Documenso (E-Signatures) ─────────────────────────────"
DOCUMENSO_NEXTAUTH_SECRET=$(openssl rand -base64 32)
DOCUMENSO_ENCRYPTION_KEY=$(openssl rand -hex 32)  # NEVER ROTATE
DOCUMENSO_WEBHOOK_SECRET=$(openssl rand -hex 32)
echo "DOCUMENSO_NEXTAUTH_SECRET=${DOCUMENSO_NEXTAUTH_SECRET}"
echo "DOCUMENSO_ENCRYPTION_KEY=${DOCUMENSO_ENCRYPTION_KEY}"
echo "DOCUMENSO_WEBHOOK_SECRET=${DOCUMENSO_WEBHOOK_SECRET}"
echo "# Generate in Documenso Admin β†’ Settings β†’ API:"
echo "# DOCUMENSO_API_KEY=<from API Keys>"
echo ""

# LiveKit
echo "# ─── LiveKit (Recording Studio) ───────────────────────────"
LIVEKIT_API_KEY="devkey"
LIVEKIT_API_SECRET=$(openssl rand -base64 32 | tr -d '/+=' | cut -c1-32)
LIVEKIT_WEBHOOK_SECRET=$(openssl rand -hex 32)
echo "LIVEKIT_API_KEY=${LIVEKIT_API_KEY}"
echo "LIVEKIT_API_SECRET=${LIVEKIT_API_SECRET}"
echo "LIVEKIT_WEBHOOK_SECRET=${LIVEKIT_WEBHOOK_SECRET}"
echo ""

# Email (SMTP)
echo "# ─── Email (SMTP) ─────────────────────────────────────────"
echo "# Configure your production SMTP provider:"
echo "# SMTP_HOST=smtp.sendgrid.net"
echo "# SMTP_PORT=587"
echo "# SMTP_USER=apikey"
echo "# SMTP_PASSWORD=SG.xxx"
echo "# EMAIL_FROM=MicProtocol <noreply@yourdomain.com>"
echo ""

# Clerk (Auth)
echo "# ─── Clerk (Authentication) ───────────────────────────────"
echo "# Get from Clerk Dashboard β†’ API Keys:"
echo "# NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_live_..."
echo "# CLERK_SECRET_KEY=sk_live_..."
echo "# CLERK_WEBHOOK_SECRET=whsec_... (from Clerk β†’ Webhooks)"
echo ""

# Sentry (Optional)
echo "# ─── Sentry (Error Tracking) ──────────────────────────────"
echo "# SENTRY_DSN=https://xxx@sentry.io/xxx"
echo "# SENTRY_ORG=your-org"
echo "# SENTRY_PROJECT=micprotocol"
echo "# SENTRY_AUTH_TOKEN=xxx (for source maps upload)"
echo ""

# Umami (Analytics)
echo "# ─── Umami (Analytics) ────────────────────────────────────"
UMAMI_APP_SECRET=$(openssl rand -base64 32)
echo "UMAMI_APP_SECRET=${UMAMI_APP_SECRET}"
echo "# Generate in Umami UI after setup:"
echo "# NEXT_PUBLIC_UMAMI_WEBSITE_ID=<website-id>"
echo ""

echo "# ============================================================"
echo "# End of generated secrets"
echo "# ============================================================"