Spaces:
Running
Running
File size: 4,659 Bytes
7311ade 6af0519 c0928d0 8fa839f cf4f9f7 c0928d0 cf4f9f7 8fa839f e20f2b9 cf4f9f7 8fa839f cf4f9f7 6af0519 e20f2b9 cf4f9f7 d3f40ae c0928d0 cd0659b a671b65 cd0659b c0928d0 6af0519 67fcd87 666d2dd c57e208 8fa839f 666d2dd 8fa839f 666d2dd cd0659b 666d2dd cd0659b 666d2dd 2cb3286 666d2dd 8fa839f 666d2dd c0928d0 6af0519 c0928d0 50b9350 c0928d0 c57e208 c0928d0 d3f40ae | 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 | #!/bin/bash
# 打印所有命令,方便调试
set -x
# =========================================================
# 环境变量检查与配置
# =========================================================
# 2. 生成 Cookie Secret (如果未设置)
if [ -z "$OAUTH2_PROXY_COOKIE_SECRET" ]; then
echo "Generating temporary cookie secret..."
# 生成 16 字节的随机字符串 (32 字符 hex) 确保符合长度要求
export OAUTH2_PROXY_COOKIE_SECRET=$(head -c 32 /dev/urandom | base64 | head -c 32)
echo "Cookie Secret Generated."
fi
# 3. 生成白名单 (支持 Email 和 GitHub Username 混合)
# 使用 /tmp 目录,确保任何用户都可写,避免 Docker 权限问题
AUTH_FILE="/tmp/authenticated_emails.txt"
GITHUB_USERS=""
if [ -n "$ALLOWED_USERS" ]; then
echo "Processing ALLOWED_USERS: $ALLOWED_USERS"
# 清空文件
> "$AUTH_FILE"
# 分割并处理每个用户
IFS=',' read -ra ADDR <<< "$ALLOWED_USERS"
for user in "${ADDR[@]}"; do
# 去除首尾空格
user=$(echo "$user" | xargs)
if [[ "$user" == *"@"* ]]; then
# 如果包含 @,视为邮箱
echo "$user" >> "$AUTH_FILE"
else
# 如果不含 @,且是 GitHub Provider,视为 GitHub 用户名
if [ -z "$GITHUB_USERS" ]; then
GITHUB_USERS="$user"
else
GITHUB_USERS="$GITHUB_USERS,$user"
fi
fi
done
else
echo "Warning: ALLOWED_USERS is not set! Creating empty whitelist."
touch "$AUTH_FILE"
fi
# =========================================================
# 启动服务
# =========================================================
# 1. 启动 ttyd (本地监听 7681)
# -b /: 设置 Web 终端为根路径,登录即是终端
echo "Starting ttyd on 127.0.0.1:7681..."
ttyd -p 7681 -i 127.0.0.1 -W bash &
TTYD_PID=$!
# 2. OpenClaw 已在降级方案中移除预启动
# (保留手动启动逻辑作为注释参考)
# export OPENCLAW_AUTH_DISABLE=true
# openclaw gateway run &
# 3. 启动 oauth2-proxy (本地监听 4180)
# 回退到稳定模式:根据环境变量智能选择单个 Provider
echo "Starting oauth2-proxy on 127.0.0.1:4180..."
if [ -n "$GITHUB_CLIENT_ID" ] && [ -n "$GITHUB_CLIENT_SECRET" ]; then
echo "Detected GITHUB_CLIENT_ID/SECRET. Using GitHub Provider."
export OAUTH2_PROXY_PROVIDER="github"
export OAUTH2_PROXY_CLIENT_ID="$GITHUB_CLIENT_ID"
export OAUTH2_PROXY_CLIENT_SECRET="$GITHUB_CLIENT_SECRET"
elif [ -n "$GOOGLE_CLIENT_ID" ] && [ -n "$GOOGLE_CLIENT_SECRET" ]; then
echo "Detected GOOGLE_CLIENT_ID/SECRET. Using Google Provider."
export OAUTH2_PROXY_PROVIDER="google"
export OAUTH2_PROXY_CLIENT_ID="$GOOGLE_CLIENT_ID"
export OAUTH2_PROXY_CLIENT_SECRET="$GOOGLE_CLIENT_SECRET"
else
# Fallback to defaults or generic variables
if [ -z "$OAUTH2_PROXY_PROVIDER" ]; then
export OAUTH2_PROXY_PROVIDER="github"
fi
echo "Using generic/default Provider: $OAUTH2_PROXY_PROVIDER"
fi
# 构建 oauth2-proxy 命令 (标准命令行模式)
# 上游指向 ttyd (127.0.0.1:7681)
CMD="oauth2-proxy \
--config=oauth2-proxy.cfg \
--provider=$OAUTH2_PROXY_PROVIDER \
--client-id=$OAUTH2_PROXY_CLIENT_ID \
--client-secret=$OAUTH2_PROXY_CLIENT_SECRET \
--cookie-secret=$OAUTH2_PROXY_COOKIE_SECRET \
--email-domain=* \
--upstream=http://127.0.0.1:7681 \
--http-address=127.0.0.1:4180 \
--authenticated-emails-file=$AUTH_FILE \
--custom-sign-in-logo="-" \
--banner="-" \
--footer="-" \
--custom-templates-dir=/var/www/html/theme"
# 如果有 GitHub Users,追加参数
if [ -n "$GITHUB_USERS" ]; then
echo "Adding GitHub User whitelist: $GITHUB_USERS"
CMD="$CMD --github-user=$GITHUB_USERS"
fi
# 执行命令
$CMD 2>&1 &
OAUTH2_PROXY_PID=$!
# 4. 健康检查与等待
echo "Waiting for services to start..."
# 等待 oauth2-proxy 启动 (最多 10 秒)
for i in {1..10}; do
if nc -z 127.0.0.1 4180; then
echo "oauth2-proxy is up and running!"
break
fi
echo "Waiting for oauth2-proxy (attempt $i/10)..."
sleep 1
# 检查进程是否还在
if ! kill -0 $OAUTH2_PROXY_PID 2>/dev/null; then
echo "CRITICAL: oauth2-proxy failed to start! Checking logs..."
# 这里的日志已经在上面重定向到 stdout 了,所以会在 Space logs 中显示
# 我们可以尝试重新启动或直接退出
echo "Exiting due to oauth2-proxy failure."
exit 1
fi
done
# 5. 启动 Nginx (对外监听 7860)
echo "Starting Nginx on port 7860..."
nginx -g "daemon off;"
|