Spaces:
Paused
Paused
Update start.sh
Browse files
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. 生成白名单
|
| 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 |
-
#
|
| 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 |
-
# 如果需要关闭
|
| 66 |
# export OPENCLAW_AUTH_DISABLE=true
|
|
|
|
|
|
|
| 67 |
nohup openclaw gateway > /tmp/openclaw-gateway.log 2>&1 &
|
| 68 |
OPENCLAW_PID=$!
|
| 69 |
|
| 70 |
-
# 3
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
echo "
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 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 |
-
#
|
| 93 |
-
|
| 94 |
-
|
| 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 |
-
#
|
| 123 |
-
|
| 124 |
-
|
| 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 |
-
#
|
| 140 |
-
echo "Starting Nginx
|
| 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;"
|