# 第一阶段:构建阶段 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"]