Spaces:
Paused
Paused
File size: 3,624 Bytes
149033c 390dc9b de637f1 99187f2 149033c 99187f2 149033c 03d4200 149033c 03d4200 149033c 395f8b0 149033c de637f1 149033c 5b7de09 149033c b09cd7a 149033c aa5326c 149033c 99187f2 149033c b09cd7a 149033c 99187f2 149033c de637f1 ac8610d 149033c 390dc9b 149033c ac8610d 149033c de637f1 149033c a1a1f4d de637f1 cd9d8e5 a1a1f4d cd9d8e5 a1a1f4d cd9d8e5 b09cd7a cd9d8e5 a1a1f4d cd9d8e5 a1a1f4d cd9d8e5 149033c cd9d8e5 149033c |
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 |
#!/bin/sh
# 不再使用set -e,避免因chmod失败而中止脚本
# set -e
# 设置颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo "${GREEN}Starting Simple Clash Relay...${NC}"
# 添加诊断信息
echo "${YELLOW}System information:${NC}"
uname -a
echo "${YELLOW}Running as user:${NC}"
id
echo "${YELLOW}Checking executables:${NC}"
file /app/clash_core/clash.meta-linux-amd64
ls -la /app/clash_core/clash.meta-linux-amd64
# 可选清理旧配置(如果指定CLEAN_CONFIG=true)
if [ "${CLEAN_CONFIG}" = "true" ]; then
echo "${YELLOW}Cleaning old config files...${NC}"
rm -f /app/data/config.yaml /app/data/config.yaml.raw
echo "${GREEN}Old config files cleaned${NC}"
fi
# 确保数据目录存在
mkdir -p /app/data || echo "${YELLOW}Warning: Failed to create /app/data directory${NC}"
# 尝试设置权限,但允许失败
chmod -R 777 /app/data 2>/dev/null || echo "${YELLOW}Warning: Failed to set permissions for /app/data, continuing anyway${NC}"
# 尝试设置subconverter执行权限,但允许失败
if [ -f "/app/subconverter/subconverter" ]; then
chmod +x /app/subconverter/subconverter 2>/dev/null || echo "${YELLOW}Warning: Failed to set executable permission for subconverter${NC}"
fi
# 尝试设置Clash Core执行权限,但允许失败
if [ -f "/app/clash_core/clash.meta-linux-amd64" ]; then
chmod +x /app/clash_core/clash.meta-linux-amd64 2>/dev/null || echo "${YELLOW}Warning: Failed to set executable permission for Clash Meta${NC}"
echo "${GREEN}Clash Meta found${NC}"
else
echo "${RED}Error: Clash Core executable not found!${NC}"
exit 1
fi
# 加载环境变量
if [ -f ".env" ]; then
echo "${GREEN}Loading environment variables from .env file...${NC}"
export $(grep -v '^#' .env | xargs -d '\n')
fi
# 检查必要的环境变量
if [ -z "$SUB_URL" ]; then
echo "${RED}Error: SUB_URL environment variable is not set!${NC}"
exit 1
fi
# 设置默认端口
export FLASK_PORT=${FLASK_PORT:-7860}
echo "${GREEN}Flask will listen on port ${FLASK_PORT}${NC}"
# 输出基本信息
echo "=========================="
echo " Simple Clash Relay"
echo "=========================="
echo "Starting services..."
# 打印环境变量(隐藏敏感信息)
echo "Environment:"
echo "FLASK_PORT: ${FLASK_PORT:-7860}"
echo "CLASH_PROXY_PORT: ${CLASH_PROXY_PORT:-7890}"
echo "CLASH_API_PORT: ${CLASH_API_PORT:-9090}"
echo "SUB_URL: [hidden]"
echo "API_KEY: [hidden]"
# 检查必要的环境变量
if [ -z "$API_KEY" ]; then
echo "WARNING: API_KEY is not set. Using default value (insecure)!"
export API_KEY="changeme"
fi
# 启动Flask应用
echo -e "${GREEN}Starting Flask application with gevent worker for WebSocket support...${NC}"
if [ -n "$WORKERS" ]; then
echo "Using $WORKERS workers (user defined)"
DEFAULT_WORKERS="$WORKERS"
else
# 计算合适的worker数量 (默认根据CPU数量,但最少2个,最多17个)
DEFAULT_WORKERS=$(($(nproc) * 2 + 1))
[ $DEFAULT_WORKERS -lt 2 ] && DEFAULT_WORKERS=2
[ $DEFAULT_WORKERS -gt 17 ] && DEFAULT_WORKERS=17
echo "Using $DEFAULT_WORKERS workers (auto calculated)"
fi
# 增加超时时间,确保长连接能正常工作
# 增加记录器配置使错误更容易诊断
# 指定 -k gevent 来使用 gevent 工作进程,支持 WebSocket
cd /app && gunicorn \
--bind 0.0.0.0:${FLASK_PORT} \
--workers ${DEFAULT_WORKERS} \
-k gevent \
--timeout 300 \
--access-logfile - \
--error-logfile - \
--capture-output \
--log-level info \
app.main:app |