【免费下载链接】marimo
A reactive notebook for Python — run reproducible experiments, query with SQL, execute as a script, deploy as an app, and version with git. Stored as pure Python. All in a modern, AI-native editor.
项目地址:
https://gitcode.com/GitHub_Trending/ma/marimo
点击查看 免费下载
marimo 官方为 Railway 平台提供了一键部署模板:无需手工编写 Dockerfile 与编排配置,即可在 Railway 上以容器方式拉起一个单实例 marimo 编辑服务器(edit server),并配合持久化存储保存笔记本文件。阅读本文后,你将掌握基于该模板在 Railway 上完成部署、理解模板底层容器启动参数、配置健康检查与访问令牌,以及按需扩展(子路径挂载、SSE 传输、手动构建镜像)的完整实战方案。
Railway 部署方式概述
Railway 是一个面向开发者的容器部署平台,核心能力是"把 Docker 化(Dockerized)的容器轻松部署上线"。marimo 官方针对 Railway 提供了预置模板(pre-built template),其目标非常明确(见 deploying_railway.md):
使用该模板后,Railway 会在几次点击之内,部署一个带有持久化存储的单实例 marimo 编辑服务器。
理解这句话的边界很重要:
- 单实例:模板拉起的是一个实例(replica),适合个人开发、小团队共享或原型演示,而非多副本高可用集群。需要横向扩展时,应参考 Kubernetes 部署指南 或 SkyPilot 指南。
- 编辑服务器(edit server):启动的是 marimo edit 模式,用户可以在远程浏览器中创建、编辑、运行笔记本。与之相对的是只读的 app server(marimo run),两者的差异在 部署总览 中有明确说明。
- 持久化存储:marimo 笔记本本质上是纯 Python 文件(.py),把工作目录挂载到 Railway 的持久化卷上,就能让创建、修改的笔记本在容器重建后依然保留。
一键部署:使用官方模板
官方文档在 Deploy 一节直接给出了部署入口——一个 "Deploy on Railway" 按钮(见 deploying_railway.md)。点击按钮后,流程大致如下:
说明:本文不直接粘贴模板外链,你可以在仓库的 deploying_railway.md 文档页面中找到该一键部署按钮。如果你希望完全掌控构建过程,也可以跳过模板,用仓库自带的 docker/Dockerfile 手动构建镜像后部署(下文"手动构建替代方案"会给出完整命令)。
模板底层:容器是如何启动的
模板"一键部署"的本质,是 Railway 用预置配置启动 marimo 官方容器。仓库中的 docker/Dockerfile 揭示了这套容器的真实启动方式,理解它有助于你在 Railway 上排查问题或自行定制。
端口与主机绑定
Dockerfile 中定义了容器的运行入口与端口约定:
ENV PORT=8080
EXPOSE $PORT
ENV HOST=0.0.0.0
…
CMD ["sh", "-c", "exec marimo edit –no-token -p $PORT –host $HOST"]
- PORT 默认 8080,并通过 EXPOSE 对外声明。Railway 平台会自动注入 PORT 环境变量,因此容器会监听 Railway 分配的端口。
- HOST 默认为 0.0.0.0,保证容器内所有网卡均可访问,这是容器化部署的必要条件(默认情况下 marimo edit 只绑定 127.0.0.1,见 cli.py)。
- 启动命令使用 –no-token 关闭令牌认证——由于 Railway 模板面向"几点击部署"的体验,认证开关交由部署者自行决定(下文"安全与访问控制"会说明如何重新开启)。
容器镜像变体
Dockerfile 提供了三个镜像阶段,官方容器仓库对应三类 tag(详见 prebuilt_containers.md):
| marimo:latest(slim) | 仅 marimo 本体 | 最小化部署、自装依赖 |
| marimo:latest-data | marimo[recommended,lsp] + altair、pandas、numpy | 数据分析与可视化笔记本 |
| marimo:latest-sql | 在上述基础上追加 marimo[recommended,lsp,sql] | 需要 SQL 单元格的笔记本 |
选择建议:如果笔记本里用到了 pandas/altair 或 SQL,直接选用 -sql 或 -data 变体,避免在容器里额外安装大体积依赖、拖慢启动。也可指定具体版本,如 marimo:0.8.3-sql。在 Railway 模板的自定义镜像字段或自己编写 Dockerfile 时,将基础镜像替换为这些 tag 即可。
持久化存储:笔记本不会因重建而丢失
模板的核心卖点之一是"persistent storage"(持久化存储)。marimo 笔记本以纯 Python 文件形式保存(每个笔记本就是一个 .py 文件,可纳入 Git 版本管理),因此持久化策略非常简单:把工作目录挂载到 Railway 的 Volume。
在 Railway 控制台为服务添加 Volume 时,建议:
- 挂载路径:指向容器的启动工作目录。仓库 Dockerfile 中 WORKDIR /app(见 docker/Dockerfile),因此挂载到 /app 即可覆盖所有笔记本所在位置。
- 挂载大小:按笔记本文件规模选择(文本文件通常很小,默认配额一般够用;如需保存大体积数据文件,再相应扩容)。
- 挂载范围:仅对需要持久化的服务实例挂载。如果某个实例只做临时演示,可不挂载。
这样,无论 Railway 何时重建容器、滚动更新镜像,已创建的 .py 笔记本都会保留在卷中,下次访问时依然存在。如果你在笔记本中使用了 mo.persistent_cache 这类磁盘缓存(默认存于 __marimo__/cache/,见 caching.md),挂载工作目录同样能让缓存跨重启生效。
安全与访问控制
模板默认以 –no-token 启动,意味着任何拿到服务 URL 的人都可以直接进入编辑界面。公网部署时强烈建议重新开启认证:
方式一:在 Railway 中覆盖启动命令
在 Railway 服务的 Settings 中修改启动命令,例如使用自定义令牌密码:
marimo edit -p $PORT –host $HOST –token –token-password="sup3rs3cr3t"
其中 –token/–no-token 与 –token-password 的参数语义定义在 cli.py。开启后,浏览器访问会被重定向到登录页,输入令牌才能进入;也可通过 URL 查询参数 ?access_token=… 或 HTTP Basic Authorization 头完成认证(详见 authentication.md)。
方式二:自定义认证(进阶)
如果希望接入 OAuth、组织账号或更复杂的授权逻辑,可以在 FastAPI 等 ASGI 应用中通过 marimo.create_asgi_app() 挂载 marimo,再叠加自定义中间件与登录路由。完整示例见 authentication.md 中的 FastAPI 写法,部署时将该 ASGI 应用打包进容器即可。
健康检查端点
Railway 等平台通常需要健康检查来判定实例是否就绪。marimo 服务器内置了以下端点(实现见 health.py):
- /health、/healthz:GET 返回 200 与 JSON {"status": "healthy"},两个别名便于对接不同平台的习惯;
- /api/status:返回更丰富的状态 JSON,包含 version、mode、sessions、requirements、lsp_running 等字段(需要认证)。
在 Railway 的 Health Check 配置中,将检查路径设为 /health 即可;这些端点同样适用于其他容器平台,相关说明也出现在 deploying_docker.md 中。
部署后的进阶配置
子路径部署(–base-url)
如果希望把 marimo 挂载在域名子路径下(如 https://example.com/marimo),启动命令加上 –base-url:
marimo edit -p $PORT –host $HOST –no-token –base-url /marimo
–base-url 的校验规则与"必须以 / 开头"的要求见 cli.py;该参数同样适用于 marimo run(见 部署总览)。
无 WebSocket 环境:切换 SSE 传输
默认情况下,marimo 通过 WebSocket(/ws)向浏览器推送内核消息。如果 Railway 的代理或网络环境对 WebSocket 支持不佳(实验性功能),可以改用 SSE(Server-Sent Events)纯 HTTP 传输:
MARIMO_SERVER_TRANSPORT=sse marimo edit -p $PORT –host $HOST
关于该变量的语义与限制,源码中有明确注释(见 config.py):
- 终端与语言服务器(LSP)仍依赖 WebSocket,不受此设置影响;
- 实时协作(rtc_v2)需要 WebSocket,使用 SSE 时会被禁用;
- 确保代理不要缓冲 /sse 的 text/event-stream 响应。
仓库还提供了对应的冒烟测试笔记本 inline_sse_transport.py 用于本地验证该模式。
手动构建镜像的替代方案
不依赖模板时,可用仓库自带 Dockerfile 构建并推送镜像,再在 Railway 中引用:
# 在仓库根目录构建(默认构建 slim 变体)
docker build -t my_marimo . -f docker/Dockerfile
# 本地先验证
docker run -p 8080:8080 -it my_marimo
# 访问 http://localhost:8080
如需 -sql 变体,可将 –target sql 传入构建命令;镜像与 tag 的完整说明见 docker/README.md 与 prebuilt_containers.md。构建并推送后,在 Railway 新建项目时选择该镜像,再按上文配置 PORT/HOST/Volume 即可。
部署自检清单
完成 Railway 部署后,建议按以下清单逐项确认:
相关资源
- 部署入口与模板说明:deploying_railway.md
- 部署方式总览(编辑服务器 vs 应用服务器):index.md
- 容器镜像变体与本地运行:prebuilt_containers.md
- Docker 手动部署与健康检查:deploying_docker.md
- 令牌与自定义认证:authentication.md
- 容器实现与启动命令:docker/Dockerfile
- 健康/状态端点实现:marimo/_server/api/endpoints/health.py
- CLI 参数定义(端口、主机、令牌、base-url):marimo/_cli/cli.py
赞
【免费下载链接】marimo
A reactive notebook for Python — run reproducible experiments, query with SQL, execute as a script, deploy as an app, and version with git. Stored as pure Python. All in a modern, AI-native editor.
项目地址:
https://gitcode.com/GitHub_Trending/ma/marimo
点击查看 免费下载
相关推荐
Windows性能优化终极指南:AtlasOS让你的电脑飞起来
themlbook高斯混合模型解析:EM算法的可视化学习过程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网硕互联帮助中心






评论前必须登录!
注册