Spaces:
Paused
Paused
Commit ·
d334177
1
Parent(s): 82ce3b3
Add shell-based HF Space setup
Browse files- Dockerfile +16 -0
- README.md +27 -0
- entrypoint.sh +40 -0
- requirements.txt +3 -0
Dockerfile
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
FROM python:3.11-slim
|
| 2 |
+
|
| 3 |
+
WORKDIR /app
|
| 4 |
+
|
| 5 |
+
COPY requirements.txt /app/
|
| 6 |
+
COPY entrypoint.sh /app/
|
| 7 |
+
|
| 8 |
+
RUN apt-get update \
|
| 9 |
+
&& apt-get install -y --no-install-recommends curl ca-certificates unzip \
|
| 10 |
+
&& rm -rf /var/lib/apt/lists/* \
|
| 11 |
+
&& pip install --no-cache-dir -r requirements.txt \
|
| 12 |
+
&& chmod +x /app/entrypoint.sh
|
| 13 |
+
|
| 14 |
+
EXPOSE 7860
|
| 15 |
+
|
| 16 |
+
CMD ["/app/entrypoint.sh"]
|
README.md
CHANGED
|
@@ -1 +1,28 @@
|
|
|
|
|
| 1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# HF Hidden Code Space Shell
|
| 2 |
|
| 3 |
+
这个仓库是一个 Hugging Face Space 的“壳”项目,用于在运行时拉取真实业务源码并启动服务。构建阶段不会包含任何业务代码,保持仓库公开而代码私有。
|
| 4 |
+
|
| 5 |
+
## 运行流程
|
| 6 |
+
1. 使用 `python:3.11-slim` 构建最小镜像,只安装基础依赖。
|
| 7 |
+
2. 镜像启动时运行 `entrypoint.sh`,检查 `APP_ARCHIVE_URL` 环境变量。
|
| 8 |
+
3. 通过运行时提供的 URL 下载真实业务代码压缩包(支持 zip 与 tar.gz),自动解压到 `/opt/app`。
|
| 9 |
+
4. 进入解压后的目录,执行 `uvicorn app:app --host 0.0.0.0 --port 7860` 启动 FastAPI 应用。
|
| 10 |
+
|
| 11 |
+
## 配置方法
|
| 12 |
+
在 Hugging Face Space → **Settings** → **Variables** 中新增:
|
| 13 |
+
|
| 14 |
+
```
|
| 15 |
+
APP_ARCHIVE_URL = https://example.com/your-real-app.zip
|
| 16 |
+
```
|
| 17 |
+
|
| 18 |
+
> 注意:不要在 Dockerfile 或构建阶段尝试读取该变量,HF secrets 仅在运行时可用。
|
| 19 |
+
|
| 20 |
+
## 部署步骤示例
|
| 21 |
+
1. 将本仓库推送到 Hugging Face,创建为 **Public** Space(Docker 模式)。
|
| 22 |
+
2. 在 Space 设置里添加环境变量 `APP_ARCHIVE_URL`,指向你的私有业务代码归档包(zip 或 tar.gz)。
|
| 23 |
+
3. 点击 **Restart this Space**,容器启动时会自动下载、解压并运行你的应用。
|
| 24 |
+
|
| 25 |
+
## 重要提示
|
| 26 |
+
- 这是一个空壳仓库,不包含真实业务源码,Fork 后直接运行会失败,因为缺少 `APP_ARCHIVE_URL`。
|
| 27 |
+
- `entrypoint.sh` 不会打印下载 URL,避免泄露敏感信息。
|
| 28 |
+
- 仅包含基础依赖,如需额外依赖,请在真实业务代码的环境中自行处理。
|
entrypoint.sh
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env bash
|
| 2 |
+
set -euo pipefail
|
| 3 |
+
|
| 4 |
+
if [[ -z "${APP_ARCHIVE_URL:-}" ]]; then
|
| 5 |
+
echo "错误:未设置 APP_ARCHIVE_URL 环境变量。" >&2
|
| 6 |
+
exit 1
|
| 7 |
+
fi
|
| 8 |
+
|
| 9 |
+
APP_DIR="/opt/app"
|
| 10 |
+
mkdir -p "$APP_DIR"
|
| 11 |
+
cd "$APP_DIR"
|
| 12 |
+
|
| 13 |
+
ARCHIVE_FILE="app_archive"
|
| 14 |
+
|
| 15 |
+
# 下载归档文件,不输出 URL 防止泄露
|
| 16 |
+
if ! curl -fsSL "$APP_ARCHIVE_URL" -o "$ARCHIVE_FILE"; then
|
| 17 |
+
echo "错误:无法下载应用归档文件。" >&2
|
| 18 |
+
exit 1
|
| 19 |
+
fi
|
| 20 |
+
|
| 21 |
+
# 根据文件类型解压 zip 或 tar.gz
|
| 22 |
+
if file "$ARCHIVE_FILE" | grep -qi "zip"; then
|
| 23 |
+
unzip -q "$ARCHIVE_FILE" -d "$APP_DIR"
|
| 24 |
+
elif file "$ARCHIVE_FILE" | grep -Eqi "gzip compressed data|tar archive"; then
|
| 25 |
+
tar -xzf "$ARCHIVE_FILE" -C "$APP_DIR"
|
| 26 |
+
else
|
| 27 |
+
echo "错误:不支持的归档格式。" >&2
|
| 28 |
+
exit 1
|
| 29 |
+
fi
|
| 30 |
+
|
| 31 |
+
# 选择解压后的第一个目录作为应用目录
|
| 32 |
+
APP_SUBDIR=$(find "$APP_DIR" -mindepth 1 -maxdepth 1 -type d | head -n 1)
|
| 33 |
+
if [[ -z "$APP_SUBDIR" ]]; then
|
| 34 |
+
echo "错误:未找到解压后的应用目录。" >&2
|
| 35 |
+
exit 1
|
| 36 |
+
fi
|
| 37 |
+
|
| 38 |
+
cd "$APP_SUBDIR"
|
| 39 |
+
|
| 40 |
+
exec uvicorn app:app --host 0.0.0.0 --port 7860
|
requirements.txt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
fastapi
|
| 2 |
+
uvicorn
|
| 3 |
+
requests
|