darkfire514 commited on
Commit
25a205d
·
verified ·
1 Parent(s): a272828

Update start.sh

Browse files
Files changed (1) hide show
  1. start.sh +26 -103
start.sh CHANGED
@@ -10,132 +10,55 @@ set -x
10
  # 1. 生成 Cookie Secret (如果未设置)
11
  if [ -z "$OAUTH2_PROXY_COOKIE_SECRET" ]; then
12
  echo "Generating temporary cookie secret..."
13
- # 生成 16 字节的随机字符串 (32 字符 hex) 确保符合长度要求
14
  export OAUTH2_PROXY_COOKIE_SECRET=$(head -c 32 /dev/urandom | base64 | head -c 32)
15
  echo "Cookie Secret Generated."
16
  fi
17
 
18
- # 2. 生成白名单 (支持 Email 和 GitHub Username 混合)
19
- # 使用 /tmp 目录,确保任何用户都可写,避免 Docker 权限问题
20
  AUTH_FILE="/tmp/authenticated_emails.txt"
21
- GITHUB_USERS=""
22
-
23
  if [ -n "$ALLOWED_USERS" ]; then
24
  echo "Processing ALLOWED_USERS: $ALLOWED_USERS"
25
-
26
- # 清空文件
27
  > "$AUTH_FILE"
28
-
29
- # 分割并处理每个用户
30
  IFS=',' read -ra ADDR <<< "$ALLOWED_USERS"
31
  for user in "${ADDR[@]}"; do
32
- # 去除首尾空格
33
- user=$(echo "$user" | xargs)
34
-
35
- if [[ "$user" == *"@"* ]]; then
36
- # 如果包含 @,视为邮箱
37
- echo "$user" >> "$AUTH_FILE"
38
- else
39
- # 如果不含 @,且是 GitHub Provider,视为 GitHub 用户名
40
- if [ -z "$GITHUB_USERS" ]; then
41
- GITHUB_USERS="$user"
42
- else
43
- GITHUB_USERS="$GITHUB_USERS,$user"
44
- fi
45
- fi
46
  done
47
- else
48
- echo "Warning: ALLOWED_USERS is not set! Creating empty whitelist."
49
- touch "$AUTH_FILE"
50
  fi
51
 
52
  # =========================================================
53
- # 启动服务
54
  # =========================================================
55
 
56
- # 1. 启动 ttyd (本地监听 7681)
57
- # -b /: 设置 Web 终端为根路径,登录即是终端
58
- echo "Starting ttyd on 127.0.0.1:7681..."
59
- ttyd -p 7681 -i 127.0.0.1 -W bash &
60
- TTYD_PID=$!
61
-
62
- # 2. 启动 OpenClaw 网关 (后台运行,替代 systemd)
63
  echo "Starting OpenClaw Gateway on port 18789..."
64
  export PORT=18789
65
- # 如果需要关闭 auth 验证可以取消注释下面这行
66
  # export OPENCLAW_AUTH_DISABLE=true
 
 
67
  nohup openclaw gateway > /tmp/openclaw-gateway.log 2>&1 &
68
  OPENCLAW_PID=$!
69
 
70
- # 3. 启动 oauth2-proxy (本地监听 4180)
71
- # 回退到稳定模式:根据环境变量智能选择单个 Provider
72
- echo "Starting oauth2-proxy on 127.0.0.1:4180..."
73
-
74
- if [ -n "$GITHUB_CLIENT_ID" ] && [ -n "$GITHUB_CLIENT_SECRET" ]; then
75
- echo "Detected GITHUB_CLIENT_ID/SECRET. Using GitHub Provider."
76
- export OAUTH2_PROXY_PROVIDER="github"
77
- export OAUTH2_PROXY_CLIENT_ID="$GITHUB_CLIENT_ID"
78
- export OAUTH2_PROXY_CLIENT_SECRET="$GITHUB_CLIENT_SECRET"
79
- elif [ -n "$GOOGLE_CLIENT_ID" ] && [ -n "$GOOGLE_CLIENT_SECRET" ]; then
80
- echo "Detected GOOGLE_CLIENT_ID/SECRET. Using Google Provider."
81
- export OAUTH2_PROXY_PROVIDER="google"
82
- export OAUTH2_PROXY_CLIENT_ID="$GOOGLE_CLIENT_ID"
83
- export OAUTH2_PROXY_CLIENT_SECRET="$GOOGLE_CLIENT_SECRET"
84
- else
85
- # Fallback to defaults or generic variables
86
- if [ -z "$OAUTH2_PROXY_PROVIDER" ]; then
87
- export OAUTH2_PROXY_PROVIDER="github"
88
- fi
89
- echo "Using generic/default Provider: $OAUTH2_PROXY_PROVIDER"
90
  fi
 
91
 
92
- # 构建 oauth2-proxy 命令 (标准命令行模式)
93
- # 上游指向 ttyd (127.0.0.1:7681)
94
- CMD="oauth2-proxy \
95
- --config=oauth2-proxy.cfg \
96
- --provider=$OAUTH2_PROXY_PROVIDER \
97
- --client-id=$OAUTH2_PROXY_CLIENT_ID \
98
- --client-secret=$OAUTH2_PROXY_CLIENT_SECRET \
99
- --cookie-secret=$OAUTH2_PROXY_COOKIE_SECRET \
100
- --email-domain=* \
101
- --upstream=http://127.0.0.1:7681 \
102
- --http-address=127.0.0.1:4180 \
103
- --authenticated-emails-file=$AUTH_FILE \
104
- --custom-sign-in-logo="-" \
105
- --banner="-" \
106
- --footer="-" \
107
- --custom-templates-dir=/var/www/html/theme"
108
-
109
- # 如果有 GitHub Users,追加参数
110
- if [ -n "$GITHUB_USERS" ]; then
111
- echo "Adding GitHub User whitelist: $GITHUB_USERS"
112
- CMD="$CMD --github-user=$GITHUB_USERS"
113
- fi
114
-
115
- # 执行命令 (使用 eval 确保参数正确解析)
116
- eval "$CMD 2>&1 &"
117
- OAUTH2_PROXY_PID=$!
118
-
119
- # 4. 健康检查与等待
120
- echo "Waiting for services to start..."
121
 
122
- # 等待 oauth2-proxy 启动 (最多 10 秒)
123
- for i in {1..10}; do
124
- if nc -z 127.0.0.1 4180; then
125
- echo "oauth2-proxy is up and running!"
126
- break
127
- fi
128
- echo "Waiting for oauth2-proxy (attempt $i/10)..."
129
- sleep 1
130
-
131
- # 检查进程是否还在
132
- if ! kill -0 $OAUTH2_PROXY_PID 2>/dev/null; then
133
- echo "CRITICAL: oauth2-proxy failed to start! Checking logs..."
134
- echo "Exiting due to oauth2-proxy failure."
135
- exit 1
136
- fi
137
- done
138
 
139
- # 5. 启动 Nginx (对外监听 7860,阻塞主进程保持容器运行)
140
- echo "Starting Nginx on port 7860..."
141
- nginx -g "daemon off;"
 
10
  # 1. 生成 Cookie Secret (如果未设置)
11
  if [ -z "$OAUTH2_PROXY_COOKIE_SECRET" ]; then
12
  echo "Generating temporary cookie secret..."
 
13
  export OAUTH2_PROXY_COOKIE_SECRET=$(head -c 32 /dev/urandom | base64 | head -c 32)
14
  echo "Cookie Secret Generated."
15
  fi
16
 
17
+ # 2. 生成白名单
 
18
  AUTH_FILE="/tmp/authenticated_emails.txt"
 
 
19
  if [ -n "$ALLOWED_USERS" ]; then
20
  echo "Processing ALLOWED_USERS: $ALLOWED_USERS"
 
 
21
  > "$AUTH_FILE"
 
 
22
  IFS=',' read -ra ADDR <<< "$ALLOWED_USERS"
23
  for user in "${ADDR[@]}"; do
24
+ echo "$user" >> "$AUTH_FILE"
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  done
 
 
 
26
  fi
27
 
28
  # =========================================================
29
+ # 启动核心服务
30
  # =========================================================
31
 
32
+ # 3. 启动 OpenClaw Gateway
 
 
 
 
 
 
33
  echo "Starting OpenClaw Gateway on port 18789..."
34
  export PORT=18789
35
+ # 如果需要关闭 OpenClaw 自带的 auth,取消下面这行的注释
36
  # export OPENCLAW_AUTH_DISABLE=true
37
+
38
+ # 放入后台运行,并将日志重定向
39
  nohup openclaw gateway > /tmp/openclaw-gateway.log 2>&1 &
40
  OPENCLAW_PID=$!
41
 
42
+ # 【关键排错步骤】:等待 3 秒,检查 OpenClaw 是否闪退
43
+ sleep 3
44
+ if ! kill -0 $OPENCLAW_PID 2>/dev/null; then
45
+ echo "==================================================="
46
+ echo " ERROR: OpenClaw 启动失败!以下是详细报错日志:"
47
+ echo "==================================================="
48
+ cat /tmp/openclaw-gateway.log
49
+ echo "==================================================="
50
+ exit 1 # 终止容器启动,让您能在 Docker logs 中直接看到报错
 
 
 
 
 
 
 
 
 
 
 
51
  fi
52
+ echo "✅ OpenClaw Gateway is running (PID: $OPENCLAW_PID)"
53
 
54
+ # 4. 启动 ttyd
55
+ echo "Starting ttyd on port 7681..."
56
+ nohup ttyd -p 7681 bash > /tmp/ttyd.log 2>&1 &
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
 
58
+ # 5. 启动 oauth2-proxy (请根据您的实际参数补全)
59
+ echo "Starting oauth2-proxy on port 4180..."
60
+ # nohup oauth2-proxy --config=/path/to/oauth2-proxy.cfg > /tmp/oauth2-proxy.log 2>&1 &
 
 
 
 
 
 
 
 
 
 
 
 
 
61
 
62
+ # 6. 启动 Nginx (保持在前台运行,维持容器生命周期)
63
+ echo "Starting Nginx..."
64
+ exec nginx -g "daemon off;"