File size: 1,370 Bytes
8edb121 7701804 8edb121 7701804 8edb121 7701804 8edb121 7701804 8edb121 | 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 | import os
import subprocess
import shutil
def clone_repo(token, repo_url, target_dir):
"""安全克隆私有仓库"""
try:
# 构造认证 URL
auth_url = repo_url.replace("https://", f"https://x-access-token:{token}@")
# 克隆仓库
subprocess.run(["git", "clone", auth_url, target_dir], check=True)
# 清理 .git 目录
shutil.rmtree(os.path.join(target_dir, ".git"))
print(f"仓库成功克隆到: {target_dir}")
except Exception as e:
print(f"克隆失败: {e}")
raise
if __name__ == "__main__":
# 从环境变量获取 GitHub Token 和仓库 URL
token = os.getenv("GITHUB_TOKEN")
repo_url = "https://github.com/luoh-an/luoh-api.git"
target_dir = "/app/luoh-api"
if not token:
raise ValueError("未提供 GITHUB_TOKEN 环境变量")
# 克隆仓库
clone_repo(token, repo_url, target_dir)
# 切换到项目目录
os.chdir(target_dir)
# 安装依赖
subprocess.run(["pip", "install", "--no-cache-dir", "-r", "requirements.txt"], check=True)
# 将用户二进制目录添加到 PATH
os.environ["PATH"] = f"/home/appuser/.local/bin:{os.environ['PATH']}"
# 启动 FastAPI 服务
subprocess.run(["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "7860"]) |