clash-linux commited on
Commit
5b7de09
·
verified ·
1 Parent(s): 99187f2

Upload 13 files

Browse files
Files changed (3) hide show
  1. Dockerfile +4 -2
  2. app.py +31 -15
  3. entrypoint.sh +16 -12
Dockerfile CHANGED
@@ -22,9 +22,11 @@ RUN apk add --no-cache \
22
  # 设置时区为亚洲/上海
23
  ENV TZ=Asia/Shanghai
24
 
25
- # 创建必要的目录并设置权限
26
  RUN mkdir -p ./clash_core ./subconverter ./data && \
27
- chmod -R 777 ./data
 
 
28
 
29
  # 下载并安装Clash Meta,保留原始文件名
30
  RUN echo "Downloading Clash Meta..." && \
 
22
  # 设置时区为亚洲/上海
23
  ENV TZ=Asia/Shanghai
24
 
25
+ # 创建必要的目录并设置权限(构建阶段就设置好权限)
26
  RUN mkdir -p ./clash_core ./subconverter ./data && \
27
+ chmod -R 777 ./data && \
28
+ chmod -R 777 ./clash_core && \
29
+ chmod -R 777 ./subconverter
30
 
31
  # 下载并安装Clash Meta,保留原始文件名
32
  RUN echo "Downloading Clash Meta..." && \
app.py CHANGED
@@ -12,30 +12,46 @@ import atexit
12
  def setup_environment():
13
  """设置必要的环境变量和目录"""
14
  # 确保数据目录存在
15
- os.makedirs("data", exist_ok=True)
 
 
 
 
16
 
17
- # 设置执行权限
18
- if os.path.exists("subconverter/subconverter"):
19
- os.chmod("subconverter/subconverter", 0o755)
 
 
 
 
20
 
21
- if os.path.exists("clash_core/clash.meta-linux-amd64"):
22
- os.chmod("clash_core/clash.meta-linux-amd64", 0o755)
 
 
 
 
23
 
24
  # 设置环境变量
25
  os.environ["FLASK_PORT"] = "7860" # HF Spaces 要求的端口
26
 
27
  # 如果没有设置 SUB_URL 环境变量,尝试从 .env 加载
28
  if not os.environ.get("SUB_URL") and os.path.exists(".env"):
29
- with open(".env", "r") as f:
30
- for line in f:
31
- line = line.strip()
32
- if line and not line.startswith("#"):
33
- key, value = line.split("=", 1)
34
- os.environ[key] = value
 
 
 
 
35
 
36
  def start_app():
37
  """启动应用程序"""
38
- print("正在启动 Simple Clash Relay...")
39
 
40
  # 使用 gunicorn 启动 Flask 应用
41
  app_process = subprocess.Popen(
@@ -47,7 +63,7 @@ def start_app():
47
 
48
  # 注册应用程序退出时的清理函数
49
  def cleanup():
50
- print("正在停止应用...")
51
  app_process.terminate()
52
  try:
53
  app_process.wait(timeout=5)
@@ -58,7 +74,7 @@ def start_app():
58
 
59
  # 信号处理
60
  def signal_handler(sig, frame):
61
- print(f"接收到信号 {sig},正在退出...")
62
  cleanup()
63
  sys.exit(0)
64
 
 
12
  def setup_environment():
13
  """设置必要的环境变量和目录"""
14
  # 确保数据目录存在
15
+ try:
16
+ os.makedirs("data", exist_ok=True)
17
+ print("✅ 数据目录已创建")
18
+ except Exception as e:
19
+ print(f"⚠️ 创建数据目录失败: {str(e)}")
20
 
21
+ # 尝试设置执行权限,但允许失败
22
+ try:
23
+ if os.path.exists("subconverter/subconverter"):
24
+ os.chmod("subconverter/subconverter", 0o755)
25
+ print("✅ subconverter权限已设置")
26
+ except Exception as e:
27
+ print(f"⚠️ 设置subconverter权限失败: {str(e)}")
28
 
29
+ try:
30
+ if os.path.exists("clash_core/clash.meta-linux-amd64"):
31
+ os.chmod("clash_core/clash.meta-linux-amd64", 0o755)
32
+ print("✅ Clash Core权限已设置")
33
+ except Exception as e:
34
+ print(f"⚠️ 设置Clash Core权限失败: {str(e)}")
35
 
36
  # 设置环境变量
37
  os.environ["FLASK_PORT"] = "7860" # HF Spaces 要求的端口
38
 
39
  # 如果没有设置 SUB_URL 环境变量,尝试从 .env 加载
40
  if not os.environ.get("SUB_URL") and os.path.exists(".env"):
41
+ try:
42
+ with open(".env", "r") as f:
43
+ for line in f:
44
+ line = line.strip()
45
+ if line and not line.startswith("#"):
46
+ key, value = line.split("=", 1)
47
+ os.environ[key] = value
48
+ print("✅ 从.env加载了环境变量")
49
+ except Exception as e:
50
+ print(f"⚠️ 加载.env失败: {str(e)}")
51
 
52
  def start_app():
53
  """启动应用程序"""
54
+ print("🚀 正在启动 Simple Clash Relay...")
55
 
56
  # 使用 gunicorn 启动 Flask 应用
57
  app_process = subprocess.Popen(
 
63
 
64
  # 注册应用程序退出时的清理函数
65
  def cleanup():
66
+ print("🛑 正在停止应用...")
67
  app_process.terminate()
68
  try:
69
  app_process.wait(timeout=5)
 
74
 
75
  # 信号处理
76
  def signal_handler(sig, frame):
77
+ print(f"📢 接收到信号 {sig},正在退出...")
78
  cleanup()
79
  sys.exit(0)
80
 
entrypoint.sh CHANGED
@@ -1,6 +1,6 @@
1
  #!/bin/sh
2
- # Exit immediately if a command exits with a non-zero status.
3
- set -e
4
 
5
  # 设置颜色输出
6
  RED='\033[0;31m'
@@ -10,17 +10,21 @@ NC='\033[0m' # No Color
10
 
11
  echo "${GREEN}Starting Simple Clash Relay...${NC}"
12
 
13
- # 确保数据目录存在并设置权限
14
- mkdir -p /app/data
15
- chmod -R 777 /app/data
16
 
17
- # 确保subconverter有执行权限
18
- chmod +x /app/subconverter/subconverter
19
 
20
- # 确保Clash Core有执行权限
 
 
 
 
 
21
  if [ -f "/app/clash_core/clash.meta-linux-amd64" ]; then
22
- chmod +x /app/clash_core/clash.meta-linux-amd64
23
- echo "${GREEN}Set executable permission for Clash Meta${NC}"
24
  else
25
  echo "${RED}Error: Clash Core executable not found!${NC}"
26
  exit 1
@@ -50,7 +54,7 @@ echo "Starting services..."
50
 
51
  # 打印环境变量(隐藏敏感信息)
52
  echo "Environment:"
53
- echo "FLASK_PORT: ${FLASK_PORT:-8000}"
54
  echo "CLASH_PROXY_PORT: ${CLASH_PROXY_PORT:-7890}"
55
  echo "CLASH_API_PORT: ${CLASH_API_PORT:-9090}"
56
  echo "SUB_URL: [hidden]"
@@ -73,7 +77,7 @@ echo "Using $WORKER_COUNT workers"
73
  # 确保所有参数在一行或使用清晰的续行符
74
  exec gunicorn \
75
  --workers $WORKER_COUNT \
76
- --bind 0.0.0.0:${FLASK_PORT:-8000} \
77
  --log-level info \
78
  --access-logfile - \
79
  --error-logfile - \
 
1
  #!/bin/sh
2
+ # 不再使用set -e,避免因chmod失败而中止脚本
3
+ # set -e
4
 
5
  # 设置颜色输出
6
  RED='\033[0;31m'
 
10
 
11
  echo "${GREEN}Starting Simple Clash Relay...${NC}"
12
 
13
+ # 确保数据目录存在
14
+ mkdir -p /app/data || echo "${YELLOW}Warning: Failed to create /app/data directory${NC}"
 
15
 
16
+ # 尝试设置权限,但允许失败
17
+ chmod -R 777 /app/data 2>/dev/null || echo "${YELLOW}Warning: Failed to set permissions for /app/data, continuing anyway${NC}"
18
 
19
+ # 尝试设置subconverter执行权限,但允许失败
20
+ if [ -f "/app/subconverter/subconverter" ]; then
21
+ chmod +x /app/subconverter/subconverter 2>/dev/null || echo "${YELLOW}Warning: Failed to set executable permission for subconverter${NC}"
22
+ fi
23
+
24
+ # 尝试设置Clash Core执行权限,但允许失败
25
  if [ -f "/app/clash_core/clash.meta-linux-amd64" ]; then
26
+ chmod +x /app/clash_core/clash.meta-linux-amd64 2>/dev/null || echo "${YELLOW}Warning: Failed to set executable permission for Clash Meta${NC}"
27
+ echo "${GREEN}Clash Meta found${NC}"
28
  else
29
  echo "${RED}Error: Clash Core executable not found!${NC}"
30
  exit 1
 
54
 
55
  # 打印环境变量(隐藏敏感信息)
56
  echo "Environment:"
57
+ echo "FLASK_PORT: ${FLASK_PORT:-7860}"
58
  echo "CLASH_PROXY_PORT: ${CLASH_PROXY_PORT:-7890}"
59
  echo "CLASH_API_PORT: ${CLASH_API_PORT:-9090}"
60
  echo "SUB_URL: [hidden]"
 
77
  # 确保所有参数在一行或使用清晰的续行符
78
  exec gunicorn \
79
  --workers $WORKER_COUNT \
80
+ --bind 0.0.0.0:${FLASK_PORT:-7860} \
81
  --log-level info \
82
  --access-logfile - \
83
  --error-logfile - \