Spaces:
Paused
Paused
| # 不再使用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 |