如何用 LiteLLM 的 hardened compose 验证非 root、只读文件系统与离线 Prisma 迁移行为

发布时间:2026/9/9 19:24:28

如何用 LiteLLM 的 hardened compose 验证非 root、只读文件系统与离线 Prisma 迁移行为
如何用 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),仅供参考

相关新闻

计算机网络与计算机组成原理:从协议栈到CPU数据通路的系统学习法

计算机网络与计算机组成原理:从协议栈到CPU数据通路的系统学习法

2026/9/9 19:24:28

1. 这门课到底在讲什么:先搞清楚你学的是“两棵树”而不是“一堆知识点”我每次遇到来问计算机网络和计算机组成原理怎么学的人,十有八九是这样的状态:教材翻了好几章,网课收藏了一堆,但翻开真题还是懵。原因很简单——…

MindSpore大模型训练显存优化与断点续训实践指南

MindSpore大模型训练显存优化与断点续训实践指南

2026/9/9 19:24:28

MindSpore 大模型训练跑到一半显存爆掉,或者断点续训恢复后发现 loss 对不上,这两件事我猜你至少遇到过一件。今天这篇文章想聊聊我在这套框架里做高效显存管理和增量式断点续训的经验。我不会只丢一堆配置项,而是把显存到底花在哪、每种优化…

Android广播机制全解析:标准/有序/动态/静态注册一次理清

Android广播机制全解析:标准/有序/动态/静态注册一次理清

2026/9/9 19:24:28

这篇是安卓基础系列的第23篇,继续聊广播。前几篇我们把Activity、Service、Fragment这些大块头都过了一遍,到了广播这里,好多初学者会卡在一个问题上:广播到底分几种?什么时候用哪种?为什么有时候我在清单文…

Docker实战:Spring Boot + Vue 前后端分离项目容器化部署全攻略

Docker实战:Spring Boot + Vue 前后端分离项目容器化部署全攻略

2026/9/9 19:54:29

做前后端分离项目部署的时候,我最常用也最推荐的方式就是 Docker。Spring Boot Vue 这套组合,很多人在本机跑得特别顺,一放到服务器就各种莫名其妙的问题:JDK 版本不对、Nginx 配置不生效、MySQL 连不上、前端刷新就 404。这些问…

PyTorch实战:RNN与LSTM时间序列预测全流程解析

PyTorch实战:RNN与LSTM时间序列预测全流程解析

2026/9/9 19:54:29

本篇文章是 PyTorch 实战系列的第 41 篇。这次要处理的对象不是图像,而是序列数据,核心是循环神经网络(RNN)和长短期记忆网络(LSTM)。文本、语音、股票价格、传感器读数、视频帧都可以被看作序列&#xff0…

MATLAB快速谱峭度+包络谱:滚动轴承故障诊断实战指南

MATLAB快速谱峭度+包络谱:滚动轴承故障诊断实战指南

2026/9/9 19:54:29

前阵子帮一个产线朋友处理减速机振动数据,他第一时间把FFT频谱发过来,问“为什么频谱上找不到外圈故障的边带”?其实这是很多刚接触滚动轴承故障诊断的人都会卡住的地方——不是FFT算错了,而是选错了分析频段。滚动轴承早期故障产…

用TypeScript和MQTT构建稳定实时的物联网监控后台

用TypeScript和MQTT构建稳定实时的物联网监控后台

2026/9/9 19:54:29

说实话,这几年经手的物联网项目不少,从最开始几十台上报量的Demo,到后面上千台设备同时在线压测,最让我印象深刻的不是某个算法多牛,而是“数据进来了,后台怎么接得住、看得清、不崩坏”。物联网监控后台&a…

深夜写手自救!亲测这6款AI写作辅助软件,从大纲到终稿全程开挂

深夜写手自救!亲测这6款AI写作辅助软件,从大纲到终稿全程开挂

2026/9/9 19:54:29

从开题到降重,AI工具链10分钟搞定文献综述,知网查重率直降!解放双手专注核心论点,这才是学术价值的真正突破。 1.千笔 AI:开题报告 & 文献综述「闪电战专家」实测场景:经济学开题报告从空白到导师通过 …

SciPy科学计算环境搭建与核心模块实战:从pip安装到积分优化插值

SciPy科学计算环境搭建与核心模块实战:从pip安装到积分优化插值

2026/9/9 19:44:28

很多人第一次看到“1.5、1.7、1.13 scipy”这种标题,第一反应大概率是懵的。可能是某本教程的章节编号,也可能是SciPy三个不同子模块在学习路径上的记号。但不管它具体指什么,真正落到实际操作上,绕不开两件事:该怎么装…

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

2026/9/9 1:14:29

本文首发于“生态学者”!从“湿地面积”到“土壤碳密度”:为什么需要重新认识潮汐湿地蓝碳变化?潮汐湿地位于陆地与海洋的交汇地带,包括红树林、盐沼和潮滩,是全球重要的蓝碳生态系统。其土壤能够长期储存大量有机碳&a…

adb抓包

adb抓包

2026/9/8 4:55:53

前言 本文介绍如何通过 tcpdump 在 Android 手机上抓取网络数据包,并在电脑端使用 Wireshark 进行分析。适用于需要排查 App 网络请求、分析接口调用或调试网络问题的开发与测试场景。1. 手机要有 root 权限2. 下载 tcpdump3. adb push C:\Users\zhangkuixun\Downlo…

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

2026/9/8 22:37:26

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战 在云原生基础设施中,容器镜像体积直接决定了服务的部署速度与弹性扩容敏捷度。对于传统的 Go / Java 微服务,镜像体积通常被严格控制在 50MB 到 200MB 以内,拉取镜像只…

扩散模型图像恢复实战:从DDPM原理到PyQt5可视化系统

扩散模型图像恢复实战:从DDPM原理到PyQt5可视化系统

2026/9/9 0:03:36

简介:面向毕业设计场景的PyQt5扩散模型图像恢复项目,提供完整Python源码与项目说明,适合图像处理、深度学习方向的高年级本科生与研究生参考。项目在模块设计上覆盖图像处理、扩散模型、参数配置、用户界面与结果评估五部分,具体涉…

开关电源环路裕量测试实战:相位裕量与增益裕量详解

开关电源环路裕量测试实战:相位裕量与增益裕量详解

2026/9/9 0:03:36

1. 项目概述:为什么环路裕量测试是电子工程师绕不开的“体检项目”“从零开始的电子工程师生活(6)——环路裕量测试”,这个标题一出来,老电源工程师可能已经下意识摸了摸示波器探头,新同事则大概率在想&…

定时插座芯片怎么选?专用定时IC与单片机MCU选型对比

定时插座芯片怎么选?专用定时IC与单片机MCU选型对比

2026/9/9 0:03:36

拆开市面上不同价位的定时插座,你会发现一个有意思的现象:有的里面躺着一颗黑色的软封装芯片,丝印都看不清;有的则是一块小小的蓝色或绿色PCB,上面赫然印着STM8或者STC的字样。同样叫"定时插座",…

远程协作的工作台整理

远程协作的工作台整理

2026/9/9 16:28:52

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/8 3:19:39

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/8 4:00:23

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…