File size: 3,556 Bytes
fedc45e
 
 
 
 
 
8739172
 
 
79b76bf
 
8739172
fedc45e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# 第一阶段:构建阶段
FROM ubuntu:22.04 AS builder
WORKDIR /app
# 安装wget和unzip以下载和解压二进制文件
RUN apt-get update && \
    apt-get install -y wget unzip && \
    # 下载EasyTier v2.2.4的二进制文件
    wget https://github.com/EasyTier/EasyTier/releases/download/v2.2.4/easytier-linux-x86_64-v2.2.4.zip && \
    unzip easytier-linux-x86_64-v2.2.4.zip -d /app/easytier-linux-x86_64 && \
    mv /app/easytier-linux-x86_64/easytier-core /app/easytier-core && \
    mv /app/easytier-linux-x86_64/easytier-cli /app/easytier-cli && \
    rm -rf /app/easytier-linux-x86_64 easytier-linux-x86_64-v2.2.4.zip && \
    chmod +x /app/easytier-core /app/easytier-cli && \
    # 下载ttyd
    wget -O /app/td https://github.com/tsl0922/ttyd/releases/latest/download/ttyd.x86_64 && \
    chmod +x /app/td

# 第二阶段:运行时阶段
FROM ubuntu:22.04
LABEL org.opencontainers.image.source="https://github.com/vevc/one-node"
# 设置环境变量(默认值,可通过docker run -e覆盖)
ENV TZ=Asia/Shanghai \
    NETWORK_NAME=HQY \
    NETWORK_SECRET=HQY8879725 \
    HOSTNAME=hugingface-vps \
    IPV4_ADDRESS=10.6.6.77 \
    LISTENERS=udp://0.0.0.0:11010/ \
    RPC_PORTAL=0.0.0.0:15888 \
    NO_TUN=true \
    TTYD_PORT=7860
# 复制入口脚本
COPY entrypoint.sh /entrypoint.sh
# 安装运行时依赖并配置环境
RUN export DEBIAN_FRONTEND=noninteractive && \
    apt-get update && \
    apt-get install -y tzdata supervisor curl --no-install-recommends && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* && \
    # 创建用户并设置权限
    useradd -u 1000 -g 0 -m -s /bin/bash user && \
    # 创建配置和日志目录,支持Hugging Face Spaces持久化存储
    mkdir -p /app/supervisor /data/logs && \
    chmod -R 755 /app /data && \
    # 配置时区
    ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
    echo $TZ > /etc/timezone && \
    # 创建EasyTier配置文件config.toml(默认值,entrypoint.sh会动态更新)
    echo 'hostname = "hugingface-vps"\n\
ipv4 = "10.6.6.77"\n\
listeners = ["udp://0.0.0.0:11010/"]\n\
rpc_portal = "0.0.0.0:15888"\n\
\n\
[network_identity]\n\
network_name = "HQY"\n\
network_secret = "HQY8879725"\n\
\n\
[flags]\n\
no_tun = true' > /app/config.toml && \
    # 创建supervisord配置文件
    echo '[supervisord]\n\
nodaemon=true\n\
logfile=/data/logs/supervisord.log\n\
pidfile=/data/supervisord.pid\n\
\n\
[program:easytier-core]\n\
command=/usr/local/bin/easytier-core -c /app/config.toml\n\
autostart=true\n\
autorestart=true\n\
stderr_logfile=/data/logs/easytier-core.err.log\n\
stdout_logfile=/data/logs/easytier-core.out.log\n\
user=user\n\
\n\
[program:ttyd]\n\
command=/usr/local/bin/td -p 7860 --url-arg bash\n\
autostart=true\n\
autorestart=true\n\
stderr_logfile=/data/logs/ttyd.err.log\n\
stdout_logfile=/data/logs/ttyd.out.log\n\
user=user' > /app/supervisor/supervisord.conf && \
    chmod +x /entrypoint.sh
# 从构建阶段复制二进制文件
COPY --from=builder /app/easytier-core /usr/local/bin/easytier-core
COPY --from=builder /app/easytier-cli /usr/local/bin/easytier-cli
COPY --from=builder /app/td /usr/local/bin/td
# 暴露EasyTier端口(11010/UDP, 15888/TCP)和ttyd端口(7860/TCP)
EXPOSE 11010/udp 15888 7860
# 添加健康检查,验证ttyd是否运行
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
    CMD curl -f http://localhost:7860 || exit 1
# 设置入口点和默认命令
ENTRYPOINT ["/entrypoint.sh"]
CMD ["supervisord", "-c", "/app/supervisor/supervisord.conf"]