Spaces:
Build error
Build error
File size: 4,062 Bytes
62660d6 3643eb2 6cec5c8 3643eb2 6cec5c8 ce46d6b 6cec5c8 62660d6 3e23d23 62660d6 ede55f3 6cec5c8 3e23d23 3643eb2 6cec5c8 62660d6 6cec5c8 62660d6 6cec5c8 62660d6 6cec5c8 62660d6 6cec5c8 62660d6 6cec5c8 62660d6 ce46d6b 6cec5c8 62660d6 3643eb2 6cec5c8 62660d6 3643eb2 6cec5c8 62660d6 ce46d6b 6cec5c8 62660d6 6cec5c8 62660d6 6cec5c8 62660d6 6cec5c8 62660d6 3643eb2 6cec5c8 62660d6 3643eb2 6cec5c8 62660d6 3643eb2 6cec5c8 62660d6 6cec5c8 62660d6 6cec5c8 3e23d23 3643eb2 6cec5c8 3643eb2 6cec5c8 3643eb2 ce46d6b 3643eb2 62660d6 ce46d6b 3643eb2 6cec5c8 | 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 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | # HuggingFace Spaces 终极修复版 - 解决 echo 多行问题
FROM python:3.11-slim
# 避免交互式提示
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Shanghai
ENV PYTHONUNBUFFERED=1
# 设置工作目录
WORKDIR /app
# 安装基础依赖
RUN apt-get update && apt-get install -y \
curl \
wget \
git \
ca-certificates \
gnupg \
lsb-release \
build-essential \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Node.js 22 安装 - 解决符号链接问题
RUN NODE_VERSION=22.11.0 \
&& curl -fsSL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.xz" \
-o node.tar.xz \
&& tar -xJf node.tar.xz -C /usr/local --strip-components=1 \
&& rm node.tar.xz \
&& printf "Node.js %s 安装完成\n系统自带 node: %s\n安装的 node: %s\n" \
"${NODE_VERSION}" "$(which node 2>/dev/null || echo "未找到")" \
&& echo 'export PATH="/usr/local/bin:$PATH"' >> /etc/bash.bashrc \
&& echo 'export PATH="/usr/local/bin:$PATH"' >> /root/.bashrc \
&& ENV PATH="/usr/local/bin:$PATH"
# 升级 pip 到最新版本
RUN pip install --no-cache-dir --upgrade pip setuptools wheel
# 创建启动脚本 - 使用 printf 解决多行问题
RUN printf "#!/bin/bash\n\
set -e\n\
\n\
echo \"正在下载 airs_protocol 代码...\"\n\
\n\
# 克隆 airs_protocol 仓库到主目录\n\
if [ -d \"airs_protocol\" ]; then\n\
echo \"清理旧代码...\"\n\
rm -rf \"airs_protocol\"\n\
fi\n\
\n\
git clone -b master https://gitee.com/tanbushi/airs-protocol.git temp_airs\n\
\n\
# 只复制 airs_protocol 子目录的内容到主目录\n\
if [ -d \"temp_airs/airs_protocol\" ]; then\n\
mkdir -p airs_protocol\n\
cp -r temp_airs/airs_protocol/* airs_protocol/\n\
cp -r temp_airs/airs_protocol/.[^.]* airs_protocol/ 2>/dev/null || true\n\
fi\n\
\n\
# 清理临时文件\n\
rm -rf temp_airs\n\
\n\
echo \"airs_protocol 代码下载完成\"\n\
ls -la airs_protocol/\n\
\n\
# 安装当前项目依赖\n\
if [ -f \"package.json\" ]; then\n\
echo \"安装 Node.js 依赖...\"\n\
/usr/local/bin/npm install\n\
fi\n\
\n\
if [ -f \"requirements.txt\" ]; then\n\
echo \"安装 Python 依赖...\"\n\
pip install --no-cache-dir -r requirements.txt\n\
fi\n\
\n\
# 安装 airs_protocol 依赖\n\
if [ -f \"airs_protocol/requirements.txt\" ]; then\n\
echo \"安装 airs_protocol Python 依赖...\"\n\
pip install --no-cache-dir -r airs_protocol/requirements.txt\n\
fi\n\
\n\
if [ -f \"airs_protocol/package.json\" ]; then\n\
echo \"安装 airs_protocol Node.js 依赖...\"\n\
/usr/local/bin/npm install\n\
fi\n\
\n\
echo \"环境准备完成,启动应用...\"\n\
\n\
# HuggingFace Spaces 启动逻辑\n\
if [ \\$# -gt 0 ]; then\n\
exec \"\\$@\"\n\
else\n\
# 优先级启动顺序\n\
if [ -f \"package.json\" ]; then\n\
if grep -q \"start\" package.json; then\n\
echo \"使用 npm start 启动...\"\n\
exec npm start\n\
fi\n\
fi\n\
\n\
if [ -f \"app.py\" ]; then\n\
echo \"使用 python app.py 启动...\"\n\
exec python app.py\n\
fi\n\
\n\
if [ -f \"main.py\" ]; then\n\
echo \"使用 python main.py 启动...\"\n\
exec python main.py\n\
fi\n\
\n\
if [ -f \"server.py\" ]; then\n\
echo \"使用 python server.py 启动...\"\n\
exec python server.py\n\
fi\n\
\n\
# 默认保持运行,避免容器重启\n\
echo \"未找到标准启动文件,保持容器运行...\"\n\
sleep infinity\n\
fi\n" > /app/entrypoint.sh \
&& chmod +x /app/entrypoint.sh
# 创建非 root 用户
RUN useradd -m -u 1000 user \
&& chown -R user:user /app
# 复制项目文件
COPY --chown=user . .
# 暴露 HuggingFace Spaces 默认端口
EXPOSE 7860
# 切换到非 root 用户
USER user
# 设置环境变量 - 加载 Node.js 路径
ENV HOME=/home/user \
PATH=/usr/local/bin:\$PATH \
NODE_PATH=/usr/local/bin
# HuggingFace Spaces 会使用此 entrypoint
ENTRYPOINT ["/app/entrypoint.sh"]
|