恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
如何用 LiteLLM 的 hardened compose 验证非 root、只读文件系统与离线 Prisma 迁移行为
首页
资讯中心
/
如何用 LiteLLM 的 hardened compose 验证非 root、只读文件系统与离线 Prisma 迁移行为
如何用 LiteLLM 的 hardened compose 验证非 root、只读文件系统与离线 Prisma 迁移行为
发布时间:2026/9/9 19:24:26
如何用 LiteLLM 的 hardened compose 验证非 root、只读文件系统与离线 Prisma 迁移行为【免费下载链接】litellmThe fastest, litest AI Gateway. Rust core with Python SDK. Call 100 LLM APIs in OpenAI (or native) format with cost tracking, guardrails, load balancing, and logging [Bedrock, Azure, OpenAI, Anthropic, OpenAI, VertexAI, vLLM, Nvidia NIM]项目地址: https://gitcode.com/GitHub_Trending/li/litellmLiteLLM 的默认 Docker 部署面向开发调试而 docker-compose.hardened.yml 是一个专门用于加固/QA 场景的叠加文件用来验证代理在「非 root 用户 只读根文件系统 出口流量被 Squid 拒绝」这类受限环境下仍能正常构建、启动并完成 Prisma 迁移。docker/README.md 的 “Hardened / Offline Testing” 一节给出的结论是改动要能安全用于非 root、只读 rootfs 和受限出口就必须先用这套 hardened compose 验证。本文的操作目标只有一条在本地按文档命令搭建 hardened 环境并分别验证三件事——容器确实以非 root 身份运行、根文件系统确实只读、Prisma 二进制在无网络条件下仍可用。这套 hardened compose 到底约束了什么验证之前先确认被测对象。docker-compose.hardened.yml 与 docker-compose.yml 合并后对litellm服务叠加了以下约束均可在该文件中逐行核对user: 101:101、group_add: [2345]以 uid/gid 101 的非 root 用户运行read_only: true根文件系统只读cap_drop: [ALL]与security_opt: [no-new-privileges:true]丢弃全部 capability 且禁止提权仅有的两个可写挂载是 tmpfs/app/cache128m承载PRISMA_BINARY_CACHE_DIR、NPM_CONFIG_CACHE、XDG_CACHE_HOME和/app/migrations64m承载LITELLM_MIGRATION_DIR即 Prisma 迁移工作目录仓库根目录的 proxy_server_config.yaml 以:ro只读挂载到/app/config.yaml启动命令为--port 4000 --config /app/config.yamlHTTP_PROXY/HTTPS_PROXY指向http://squid:3128NO_PROXY: localhost,127.0.0.1,db所有出站流量经过 Squid。README 明确说明该 Squid 配置为拒绝 egress因此 Prisma 迁移只能使用镜像内缓存的 CLI 和引擎不能临时下载。镜像本身由 docker/Dockerfile.non_root 的runtime目标构建Prisma CLI 与引擎在构建期烧录到固定路径/opt/prisma并设置PRISMA_CLI_QUERY_ENGINE_TYPEbinary使prisma migrate deploy在空库上直接走烧录的 binary query engine不需要 npm 也不需要网络最终镜像以USER 65534nobody运行。构建阶段还带有自检检查/opt/prisma/binaries/node_modules/.bin/prisma可执行、build/index.js与 query-engine 二进制存在且prisma.client.BINARY_PATHS中的路径都落在/opt/prisma/下任何一条不满足构建即失败。准备条件master key 与运行位置两个前置条件来自 docker/README.md环境需有 Docker 和 Docker Compose。应用需要LITELLM_MASTER_KEY用于签发和校验 token。在项目根目录创建.env文件并写入LITELLM_MASTER_KEYyour-secret-key将your-secret-key替换为强随机密钥。这个值是本文唯一需要读者自行提供的占位符漏配会在启动时报Master key is not initialized见文末排查。另外注意所有docker compose命令都必须在项目根目录执行构建上下文取的是当前目录。构建并启动 hardened 栈按 README 的命令依次执行docker compose -f docker-compose.yml -f docker-compose.hardened.yml build --no-cache docker compose -f docker-compose.yml -f docker-compose.hardened.yml up -d说明第一条用--no-cache强制重新构建会完整重跑 Docker 构建包括管理 UI 的 Next.js 构建耗时明显长于普通构建这是验证场景下的预期行为不是异常第二条以分离模式启动litellm、dbpostgres:16、squid等服务其中litellm服务按 hardened 文件构建自docker/Dockerfile.non_roottarget: runtimePROXY_EXTRAS_SOURCE: localdocker compose.yml中的litellm服务映射了4000:4000端口合并后依然生效代理对外监听 4000 端口。验证完成后停止栈docker compose down该命令会停止并移除这些容器postgres_data等命名卷保留。验证非 root 与只读行为启动后用文档给出的常规检查手段docker compose ps确认容器进入运行状态。docker-compose.yml为litellm定义了健康检查每 30 秒一次、start_period: 40s、失败重试 3 次检查命令是请求容器内的http://localhost:4000/health/liveliness因此docker compose ps中该服务最终显示健康即可作为“代理在只读、非 root 约束下已正常监听”的判断。再看日志确认启动过程没有权限类报错docker compose logs -f litellm容器身份、只读与 tmpfs 约束是否真实生效可以对照 docker-compose.hardened.yml 中的user、read_only、tmpfs三个字段核对——这正是该文件被设计成“focused on hardening/QA scenarios”的原因它只叠加约束不改动默认开发栈的行为。验证离线 Prisma 迁移行为README 给出的离线验证命令是单独运行一个禁用网络的容器用镜像内的prisma可执行文件打印版本docker run --rm --network none --entrypoint prisma ghcr.io/berriai/litellm:main-stable --version--network none确保进程运行期间没有任何网络--rm使容器退出后自动移除命令使用的是发布镜像ghcr.io/berriai/litellm:main-stable与前面本地构建的源码镜像是两条独立路径这条验证的是“发布镜像里烧录的 Prisma 二进制在完全离线时可用”文档给出的成功条件命令应成功执行并显示 engine 版本。能打印版本即说明 Prisma binaries 在无网络访问时可用如果报找不到引擎或尝试下载失败则说明镜像缺少烧录的二进制。这与Dockerfile.non_root中的设计相互印证构建期自检保证/opt/prisma下 CLI、build/index.js和query-engine-*二进制齐备运行期PRISMA_OFFLINE_MODEtrue、PRISMA_CLI_QUERY_ENGINE_TYPEbinary保证不触发下载。常见问题README 的 Troubleshooting 列出两个与本流程直接相关的现象build_admin_ui.sh: not foundDocker 构建上下文不正确导致。确认在项目根目录执行docker compose命令与上文“准备条件”一致。Master key is not initializedLITELLM_MASTER_KEY未设置。确认项目根目录存在包含该变量的.env文件。另外只读文件系统下若出现“数据库 schema 非空、需要创建 baseline 迁移”的路径litellm-proxy-extras/litellm_proxy_extras/utils.py 中的提示要求设置LITELLM_MIGRATION_DIR指向可写目录以启用迁移hardened 文件正是通过/app/migrationstmpfs 挂载并设置LITELLM_MIGRATION_DIR: /app/migrations来满足这一前提的。边界与适用范围docker-compose.hardened.yml 文件头注释明确了分工这个文件只用于 hardening/QA 场景默认的 docker-compose.yml 仍用于常规开发。也就是说本文命令验证通过后得到的是“非 root、只读 rootfs、拒绝出口、离线 Prisma”这一组合下的行为确认不应把 hardened 覆盖层直接当作默认生产部署配置使用。【免费下载链接】litellmThe fastest, litest AI Gateway. Rust core with Python SDK. Call 100 LLM APIs in OpenAI (or native) format with cost tracking, guardrails, load balancing, and logging [Bedrock, Azure, OpenAI, Anthropic, OpenAI, VertexAI, vLLM, Nvidia NIM]项目地址: https://gitcode.com/GitHub_Trending/li/litellm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考