应用与平台之间的契约:Cloud in a Bottle 注入的环境变量与数据目录完整速查

发布时间:2026/10/14 18:01:26

应用与平台之间的契约:Cloud in a Bottle 注入的环境变量与数据目录完整速查 【免费下载链接】cloud-in-a-bottleDeploy, use, and share web apps on a server you control. Your apps, data, and infrastructure stay yours.项目地址https://gitcode.com/gh_mirrors/cl/cloud-in-a-bottle点击查看免费下载Cloud in a Bottle 是一个自托管的 Web 应用部署平台你在自己控制的服务器上运行它就能一键部署、使用和分享各类 Web 应用。应用上线的那一刻平台router会自动向容器注入一整组BOTTLE_*环境变量并挂载好数据目录。这套注入机制就是应用与平台之间的契约——读环境变量拿路径、拿身份、拿令牌而不是硬编码。本文用一张速查表讲清所有环境变量与三层数据目录让你的应用开箱即用。 契约速览平台给了你什么部署一个应用只需在仓库根目录放一个cloudinabottle.toml清单完整字段见 manifest_spec.md。平台完成容器构建后会自动注入三类信息身份与令牌应用名、不可变 App ID、跨应用调用令牌路由信息内部 Router 地址、实例域名数据目录持久 / 临时 / 归档三层挂载点全部挂载在容器的/data/下。环境变量的注入逻辑在 data.py 中完成容器启动与挂载由 containers.py 管理rootless Podman每个应用只能看到自己被授权的目录。 身份与路由类环境变量清单变量示例用途BOTTLE_APP_NAMEmy-app应用名即路由子域名BOTTLE_APP_ID4Hm9pX2Qk7Lt不可变的应用唯一 IDbase58重命名后依然稳定适合做持久数据的键BOTTLE_APP_TOKENkF3xP_2qA-...每次部署随机生成的应用令牌用于跨应用服务调用详见下文BOTTLE_ROUTER_URLhttp://host.containers.internal:8080Router 内部地址构造服务请求的入口BOTTLE_LOCAL_PORT9137仅network_host应用注入须绑定此宿主机端口而非清单端口BOTTLE_ZONE_DOMAINmycooldomain.com实例的域名BOTTLE_MY_REDIRECT_DOMAINmy.selfhost.imbue.com共享的 OAuth 重定向域名BOTTLE_OWNER_USERNAMEalice实例所有者的显示名可用于预置 SSO 账户名兼容提示项目曾用名 OpenHost因此每个OPENHOST_*变量都会自动生成对应的BOTTLE_*别名见 containers.py 中的add_bottle_env_aliases()。新旧两套名字值相同新应用建议统一使用BOTTLE_*。 数据目录三层结构与环境变量所有数据目录都挂载在容器内/data/下但应用应始终从环境变量读取路径不要硬编码。三层存储的定位如下详见 data.md层级环境变量容器内路径适合存什么持久数据默认开启BOTTLE_APP_DATA_DIR/data/app_data/appSQLite 数据库、笔记、配置、小文件临时数据需app_temp_data trueBOTTLE_APP_TEMP_DIR/data/app_temp_data/app缩略图、转码产物、构建缓存等可再生数据归档数据需app_archive trueBOTTLE_APP_ARCHIVE_DIR/data/app_archive/app照片、视频、附件等大文件可配置为 S3 JuiceFS 后端弹性扩展SQLite 数据库路径也是注入的在清单中声明[data] sqlite [main]后平台会预留数据库文件路径并通过BOTTLE_SQLITE_MAIN注入注意文件本身不预创建由你的应用首次初始化时创建从而正确触发建表逻辑BOTTLE_SQLITE_MAIN/data/app_data/my-app/sqlite/main.db特殊权限访问所有应用的数据文件浏览器、备份工具这类应用可声明access_all_app_data true挂载所有应用的全部三层目录如仓库内置的 file_browser 清单。此时BOTTLE_APP_DATA_DIR、BOTTLE_APP_TEMP_DIR、BOTTLE_APP_ARCHIVE_DIR会同时注入。 用契约做跨应用服务调用BOTTLE_APP_TOKEN是跨应用集成的钥匙。调用其他应用暴露的服务时向 Router 发起请求并带上令牌即可curl -X POST $BOTTLE_ROUTER_URL/api/services/v2/call/secrets/get \ -H Authorization: Bearer $BOTTLE_APP_TOKEN \ -H Content-Type: application/json \ -d {keys: [MY_API_KEY]}完整流程、权限模型与X-OpenHost-*请求头说明见 cross_app_services.md服务接口的头字段实现位于 headers.py。✅ 最佳实践清单只信环境变量路径、域名、端口全部来自BOTTLE_*保证迁移、重命名、多实例下行为一致用BOTTLE_APP_ID而不是BOTTLE_APP_NAME做持久键重命名应用时 ID 不变数据库放持久层SQLite / RocksDB 等需要严格 POSIX 语义的数据库属于app_data大文件放归档层索引留在持久层令牌安全BOTTLE_APP_TOKEN每次部署都会重新生成切勿写死在代码或镜像里非 HTTP 端口走清单[[ports]]声明如 SMTP常规 HTTP 流量无需额外配置Router 会自动把{app_name}.{zone_domain}代理进来。 延伸阅读应用开发总览overview.md清单字段完整参考manifest_spec.md数据与存储分层data.md跨应用服务契约cross_app_services.md环境注入源码data.py、containers.py掌握这套环境变量 数据目录契约后你的应用就获得了在任意 Cloud in a Bottle 实例上无感部署的能力——剩下的交给平台吧。赞分享【免费下载链接】cloud-in-a-bottleDeploy, use, and share web apps on a server you control. Your apps, data, and infrastructure stay yours.项目地址https://gitcode.com/gh_mirrors/cl/cloud-in-a-bottle点击查看免费下载相关推荐Tsuru环境变量注入工具配置与使用完整指南Tsuru环境变量注入工具配置与使用完整指南 Tsuru作为一个开源且可扩展的PaaS平台提供了强大的环境变量管理功能让开发者能够轻松配置应用程序的运行环后端云原生容器编排DevOpsWoodpecker 接入 Bitbucket Cloud 完整指南OAuth 注册、环境变量配置与源码实现解析Woodpecker 接入 Bitbucket Cloud 完整指南OAuth 注册、环境变量配置与源码实现解析 本文基于 Woodpecker v3.16CI/CDDevOpsOlares 应用接入 MySQL 中间件OlaresManifest 声明、值注入与环境变量映射全解Olares 应用接入 MySQL 中间件OlaresManifest 声明、值注入与环境变量映射全解 在 Olares 上开发或上架应用时关系型数据库的接云原生后端运维创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/14 18:01:26

Qt/QML播放RTSP流:从原理到排障的完整实践指南

简介:面向 Qt 开发者的轻量 RTSP/RTMP 播放示例,基于 Qt MediaPlayer 组件实现,整体未植入第三方库,适合需要快速验证流媒体地址、学习 QML 播放器写法或搭建简单播放界面的读者,也可作为流媒体播放器二次改造的起点。…

2026/10/14 17:56:25

ArcGIS Online托管要素图层实战:从发布到查询编辑的完整指南

做GIS项目这几年,和ArcGIS Online打交道最多的就是FeatureLayer。最初我以为它不过是“上传数据后生成的那张在线地图”,直到有一次把巡检数据发布上线,被同事追问“你这个图层能不能按字段动态筛选”“能不能让外勤人员也改属性”&#xff0…

2026/10/14 17:56:25

从应用到驱动:Linux文件读写与字符设备驱动全解析

1. 从应用层到驱动层:一次read调用背后到底发生了什么我们平时写文件读写,往往一句fread或者read就完事了。但如果你把这句话放到面试官面前,或者放到一次线上性能问题排查现场,事情就没那么简单了——因为从你敲下这行代码&#…

2026/10/14 20:37:20

Django部署性能调研:Gunicorn、Uvicorn与Docker实测对比

1. 为什么突然想搞一次 Django 部署性能调研先说个大实话:Django 项目本地跑得飞起,一上服务器就卡成 PPT,这种事儿我见过太多次了。而且更诡异的是,同样的代码,有的人用 Nginx Gunicorn 部署,有的人用 Uv…

2026/10/14 20:37:20

达美乐中国1405家门店标准化运营与数字化管理解析

1. 达美乐中国第1405家门店开业背后的商业逻辑三亚夏日百货一楼最近新添了一抹红蓝相间的亮色——达美乐比萨中国第1405家门店正式开业。这个数字背后,隐藏着国际餐饮品牌在中国市场的精耕细作。作为全球比萨外卖领域的标杆企业,达美乐自2004年进入中国以…

2026/10/14 20:37:20

TPU薄膜技术解析:应用场景与供应商选择指南

1. TPU薄膜行业现状与核心应用场景热塑性聚氨酯(TPU)薄膜作为一种高性能弹性体材料,近五年在国内市场的年均复合增长率达到12.3%。不同于普通塑料薄膜,TPU兼具橡胶的弹性和塑料的加工性能,其拉伸强度可达40-60MPa&…

2026/10/14 20:37:20

COMSOL模拟裂隙岩体注浆加固的非牛顿流体特性

1. 项目背景与核心价值裂隙岩体注浆加固是地下工程中控制围岩稳定性的关键技术手段。传统注浆设计多依赖经验公式和简化假设,难以准确预测浆液在复杂裂隙网络中的扩散行为。COMSOL Multiphysics作为一款多物理场耦合仿真平台,能够充分考虑浆液黏度随时间…

2026/10/14 20:32:19

ViewFaceCore:C#零抽象层调用SeetaFace6实现人脸检测与识别

简介:ViewFaceCore 是一款面向 .NET 开发者的轻量级 C# 人脸识别开源库,适用于人脸检测、特征提取与比对等基础视觉任务,特别适合初学者快速集成或中小型项目快速验证。资源包共 57 个文件,涵盖 35 个核心 C# 源码(含 …

2026/10/14 11:31:03

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/14 17:41:07

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/14 2:32:55

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/14 0:00:33

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:33

macOS/iOS高精度计时:mach_absolute_time原理与实战

1. 项目概述:为什么mach_absolute_time是 macOS/iOS 时间测量的“黄金标准”在 macOS 和 iOS 开发中,我见过太多人用CFAbsoluteTimeGetCurrent()或NSDate.timeIntervalSinceReferenceDate做性能打点,结果在高精度场景下被系统时钟跳变、NTP 同…

2026/10/14 0:00:33

SCORM课件演示与测试全解析:从API通信到自动化验证

简介:这是一套遵循SCORM标准的交互式课件演示与测试资源,面向E-Learning课程开发者、LMS平台测试人员及在线教学从业者,用于验证课件在不同学习管理系统中的识别、传递与跟踪能力。压缩包共28个文件,约12.07MB,以swf动…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑