gdzy / Dockerfile
rascal66's picture
Update Dockerfile
8739172 verified
Raw History Blame Contribute Delete
3.56 kB
# 第一阶段:构建阶段
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"]