22333Misaka commited on
Commit
27bf50c
·
verified ·
1 Parent(s): 1d46409

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +29 -36
Dockerfile CHANGED
@@ -1,61 +1,54 @@
 
1
  FROM ghcr.io/krau/saveany-bot:latest
2
 
3
- # 切换 root 用户安装依赖
4
- USER root
 
5
 
6
- # 安装 Python3 (用于运行保活服务和启动脚本)
 
7
  RUN (apk add --no-cache python3 || (apt-get update && apt-get install -y python3))
8
 
 
9
  WORKDIR /app
10
 
11
- # 创建下载目录并赋予 777 权限
12
  RUN mkdir -p /app/downloads && chmod 777 /app/downloads
13
 
14
- # 创建一个 Python 启动脚本 (main.py)
15
- # 这个脚本会做三件事:
16
- # 1. 从环境变量读取配置写入文件
17
- # 2. 启动 Web 服务器 (监听 7860)
18
- # 3. 启动 Bot (saveany-bot)
19
- RUN echo 'import os' > /app/main.py && \
20
- echo 'import threading' >> /app/main.py && \
21
  echo 'import http.server' >> /app/main.py && \
22
  echo 'import socketserver' >> /app/main.py && \
23
  echo 'import subprocess' >> /app/main.py && \
24
  echo 'import time' >> /app/main.py && \
25
  echo '' >> /app/main.py && \
26
- echo '# 1. 生成配置文件' >> /app/main.py && \
27
- echo 'config_content = os.environ.get("CONFIG_CONTENT", "")' >> /app/main.py && \
28
- echo 'if config_content:' >> /app/main.py && \
29
- echo ' print("Writing config.toml...")' >> /app/main.py && \
30
- echo ' with open("/app/config.toml", "w") as f:' >> /app/main.py && \
31
- echo ' f.write(config_content)' >> /app/main.py && \
32
- echo 'else:' >> /app/main.py && \
33
- echo ' print("WARNING: No CONFIG_CONTENT found!")' >> /app/main.py && \
34
- echo '' >> /app/main.py && \
35
- echo '# 2. 启动 Web Server (保活核心)' >> /app/main.py && \
36
  echo 'def start_web():' >> /app/main.py && \
37
- echo ' # 创建首页' >> /app/main.py && \
38
- echo ' with open("index.html", "w") as f: f.write("Bot is running.")' >> /app/main.py && \
39
- echo ' # 监听所有接口 0.0.0.0' >> /app/main.py && \
40
- echo ' Handler = http.server.SimpleHTTPRequestHandler' >> /app/main.py && \
41
- echo ' with socketserver.TCPServer(("0.0.0.0", 7860), Handler) as httpd:' >> /app/main.py && \
42
- echo ' print("Web server started on port 7860")' >> /app/main.py && \
43
- echo ' httpd.serve_forever()' >> /app/main.py && \
 
 
 
44
  echo '' >> /app/main.py && \
45
- echo '# 在后台线程启动 Web Server' >> /app/main.py && \
46
  echo 't = threading.Thread(target=start_web)' >> /app/main.py && \
47
  echo 't.daemon = True' >> /app/main.py && \
48
  echo 't.start()' >> /app/main.py && \
49
  echo '' >> /app/main.py && \
50
- echo '# 3. 启动 Bot' >> /app/main.py && \
51
- echo 'print("Starting Saveany Bot...")' >> /app/main.py && \
52
- echo '# 给予 Web Server 一点启动时间' >> /app/main.py && \
53
- echo 'time.sleep(2)' >> /app/main.py && \
54
- echo '# 启动主程序 (假设二进制文件在当前目录)' >> /app/main.py && \
55
  echo 'subprocess.run(["./saveany-bot"])' >> /app/main.py
56
 
57
- # 暴露端口
58
  EXPOSE 7860
59
 
60
- # 使用 Python 运行启动脚本
61
  CMD ["python3", "/app/main.py"]
 
1
+ # 1. 基于原版镜像
2
  FROM ghcr.io/krau/saveany-bot:latest
3
 
4
+ # 2. 关键步骤:清空原镜像的 ENTRYPOINT
5
+ # 只有这样,我们下面写的 CMD (运行 Python) 才会生效,否则会被忽略
6
+ ENTRYPOINT []
7
 
8
+ # 3. 切换 root 用户安装 Python
9
+ USER root
10
  RUN (apk add --no-cache python3 || (apt-get update && apt-get install -y python3))
11
 
12
+ # 4. 设置工作目录
13
  WORKDIR /app
14
 
15
+ # 5. 确保下载目录有权限 (Bot 需要写权限)
16
  RUN mkdir -p /app/downloads && chmod 777 /app/downloads
17
 
18
+ # 6. 编写启动脚本 main.py
19
+ # 这个脚本只做两件事:开启 7860 端口,然后启动 bot
20
+ RUN echo 'import threading' > /app/main.py && \
 
 
 
 
21
  echo 'import http.server' >> /app/main.py && \
22
  echo 'import socketserver' >> /app/main.py && \
23
  echo 'import subprocess' >> /app/main.py && \
24
  echo 'import time' >> /app/main.py && \
25
  echo '' >> /app/main.py && \
26
+ echo '# --- 1. 启动保活 Web Server (7860) ---' >> /app/main.py && \
 
 
 
 
 
 
 
 
 
27
  echo 'def start_web():' >> /app/main.py && \
28
+ echo ' try:' >> /app/main.py && \
29
+ echo ' # 创建一个简单的首页' >> /app/main.py && \
30
+ echo ' with open("index.html", "w") as f: f.write("SaveAny Bot is Alive")' >> /app/main.py && \
31
+ echo ' Handler = http.server.SimpleHTTPRequestHandler' >> /app/main.py && \
32
+ echo ' # 监听 0.0.0.0:7860' >> /app/main.py && \
33
+ echo ' with socketserver.TCPServer(("0.0.0.0", 7860), Handler) as httpd:' >> /app/main.py && \
34
+ echo ' print("✅ Web server started on port 7860")' >> /app/main.py && \
35
+ echo ' httpd.serve_forever()' >> /app/main.py && \
36
+ echo ' except Exception as e:' >> /app/main.py && \
37
+ echo ' print(f"⚠️ Web server error: {e}")' >> /app/main.py && \
38
  echo '' >> /app/main.py && \
39
+ echo '# 在后台线程启动 Web 服务' >> /app/main.py && \
40
  echo 't = threading.Thread(target=start_web)' >> /app/main.py && \
41
  echo 't.daemon = True' >> /app/main.py && \
42
  echo 't.start()' >> /app/main.py && \
43
  echo '' >> /app/main.py && \
44
+ echo '# --- 2. 启动原版 Bot ---' >> /app/main.py && \
45
+ echo 'print("🚀 Starting SaveAny Bot...")' >> /app/main.py && \
46
+ echo 'time.sleep(1)' >> /app/main.py && \
47
+ echo '# 直接运行 bot 二进制文件,它会自动读取你的环境变量下载配置' >> /app/main.py && \
 
48
  echo 'subprocess.run(["./saveany-bot"])' >> /app/main.py
49
 
50
+ # 7. 暴露端口
51
  EXPOSE 7860
52
 
53
+ # 8. 启动命令
54
  CMD ["python3", "/app/main.py"]