-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathsetup.sh
More file actions
executable file
·141 lines (122 loc) · 4.33 KB
/
setup.sh
File metadata and controls
executable file
·141 lines (122 loc) · 4.33 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
#!/usr/bin/env bash
set -euo pipefail
ENV_FILE="$(cd "$(dirname "$0")" && pwd)/.env"
WEB_ENV_FILE="$(cd "$(dirname "$0")" && pwd)/packages/web-next/.env.local"
DOMAIN="${SYNAPSE_PUBLIC_DOMAIN:-change-me.example.com}"
APP_URL="https://$DOMAIN"
API_PROXY_ORIGIN="${SYNAPSE_API_PROXY_ORIGIN:-http://localhost:3001}"
SELECTED_AI_PROVIDER="${SYNAPSE_AI_PROVIDER:-}"
SELECTED_AI_ENGINE_KIND="${SYNAPSE_AI_ENGINE_KIND:-}"
SELECTED_AI_BASE_URL="${SYNAPSE_AI_BASE_URL:-}"
SELECTED_AI_MODEL="${SYNAPSE_AI_MODEL:-}"
SELECTED_AI_API_KEY="${SYNAPSE_AI_API_KEY:-}"
case "$SELECTED_AI_PROVIDER" in
anthropic)
SELECTED_AI_ENGINE_KIND="${SELECTED_AI_ENGINE_KIND:-anthropic.messages}"
SELECTED_AI_BASE_URL="${SELECTED_AI_BASE_URL:-https://api.anthropic.com}"
SELECTED_AI_MODEL="${SELECTED_AI_MODEL:-claude-sonnet-4-20250514}"
;;
openai)
SELECTED_AI_ENGINE_KIND="${SELECTED_AI_ENGINE_KIND:-openai.chat_completions}"
SELECTED_AI_BASE_URL="${SELECTED_AI_BASE_URL:-https://api.openai.com}"
SELECTED_AI_MODEL="${SELECTED_AI_MODEL:-gpt-4.1}"
;;
bigmodel)
SELECTED_AI_ENGINE_KIND="${SELECTED_AI_ENGINE_KIND:-bigmodel.chat_completions}"
SELECTED_AI_BASE_URL="${SELECTED_AI_BASE_URL:-https://open.bigmodel.cn/api}"
SELECTED_AI_MODEL="${SELECTED_AI_MODEL:-glm-5.1}"
;;
esac
generate_password() {
openssl rand -base64 32 | tr -d '/+=' | head -c 32
}
ROOT_ENV_CREATED=false
WEB_ENV_CREATED=false
if [ ! -f "$ENV_FILE" ]; then
POSTGRES_PASSWORD=$(generate_password)
REDIS_PASSWORD=$(generate_password)
JWT_SECRET=$(generate_password)
JWT_REFRESH_SECRET=$(generate_password)
APP_SECRET=$(generate_password)
MCP_ENCRYPTION_KEY=$(generate_password)
cat > "$ENV_FILE" <<EOF
# Auto-generated by setup.sh — $(date -u '+%Y-%m-%dT%H:%M:%SZ')
# Do NOT commit this file to git.
# PostgreSQL
POSTGRES_USER=synapse
POSTGRES_PASSWORD=$POSTGRES_PASSWORD
POSTGRES_DB=synapse
# Redis
REDIS_PASSWORD=$REDIS_PASSWORD
# JWT / application secrets
JWT_SECRET=$JWT_SECRET
JWT_REFRESH_SECRET=$JWT_REFRESH_SECRET
APP_SECRET=$APP_SECRET
MCP_ENCRYPTION_KEY=$MCP_ENCRYPTION_KEY
# Application URLs
APP_BASE_URL=$APP_URL
NEXT_PUBLIC_APP_URL=$APP_URL
NEXT_PUBLIC_SITE_URL=$APP_URL
# Application runtime
PORT=3001
HOST=localhost
DATABASE_URL=postgresql://synapse:${POSTGRES_PASSWORD}@localhost:5432/synapse
REDIS_URL=redis://:${REDIS_PASSWORD}@localhost:6379
PLATFORM_ADMIN_EMAILS=demo@synapse.dev
# Realtime ASR (Volcengine / Doubao Seed ASR Streaming 2.0)
ASR_PROVIDER=volcengine
VOLCENGINE_ASR_APP_ID=
VOLCENGINE_ASR_ACCESS_TOKEN=
VOLCENGINE_ASR_SECRET_KEY=
VOLCENGINE_ASR_RESOURCE_ID=volc.seedasr.sauc.duration
VOLCENGINE_ASR_WS_URL=wss://openspeech.bytedance.com/api/v3/sauc/bigmodel_async
VOLCENGINE_ASR_MAX_CONCURRENCY=3
VOLCENGINE_ASR_CONNECT_TIMEOUT_MS=10000
VOLCENGINE_ASR_IDLE_TIMEOUT_MS=15000
# Frontend runtime
NEXT_PUBLIC_API_URL=/api/v1
NEXT_PUBLIC_WS_URL=wss://$DOMAIN
# AI provider
AI_PROVIDER=$SELECTED_AI_PROVIDER
AI_ENGINE_KIND=$SELECTED_AI_ENGINE_KIND
AI_API_KEY=$SELECTED_AI_API_KEY
AI_BASE_URL=$SELECTED_AI_BASE_URL
AI_MODEL=$SELECTED_AI_MODEL
EOF
chmod 600 "$ENV_FILE"
ROOT_ENV_CREATED=true
echo "Generated root env at $ENV_FILE"
else
echo ".env already exists at $ENV_FILE"
fi
if [ ! -f "$WEB_ENV_FILE" ]; then
mkdir -p "$(dirname "$WEB_ENV_FILE")"
cat > "$WEB_ENV_FILE" <<EOF
# Auto-generated by setup.sh — $(date -u '+%Y-%m-%dT%H:%M:%SZ')
NEXT_PUBLIC_API_URL=/api/v1
NEXT_PUBLIC_WS_URL=wss://$DOMAIN
NEXT_PUBLIC_APP_URL=$APP_URL
NEXT_PUBLIC_SITE_URL=$APP_URL
# Optional: comma-separated hostnames or URLs for additional Next dev origins.
# NEXT_ALLOWED_DEV_ORIGINS=$DOMAIN
API_PROXY_ORIGIN=$API_PROXY_ORIGIN
EOF
chmod 600 "$WEB_ENV_FILE"
WEB_ENV_CREATED=true
echo "Generated web env at $WEB_ENV_FILE"
else
echo "Web env already exists at $WEB_ENV_FILE"
fi
if [ "$ROOT_ENV_CREATED" = false ] && [ "$WEB_ENV_CREATED" = false ]; then
echo "No env files were created."
exit 0
fi
echo "Local secrets and URLs have been initialized."
echo ""
echo "Next steps:"
echo " 1. Install docker + nginx on the host if they are missing"
echo " 2. Run: sudo docker compose up -d postgres redis"
echo " 3. Run: npm ci"
echo " 4. Run: npm run db:migrate -w packages/api"
echo " 5. Enable services: sudo systemctl enable --now synapse-api synapse-web"
echo " 6. For remote web dev only: start synapse-web-dev manually and use SSH port forwarding to 127.0.0.1:3002"