OmniRoute Fly.io 部署指南 (한국어)
1. 部署目标
섹션 제목: “1. 部署目标”- 平台:Fly.io
- 部署方式:本地
flyctl直接发布 - 运行方式:使用仓库内现有
Dockerfile和fly.toml - 数据持久化:Fly Volume 挂载到
/data - 访问地址:
https://omniroute.fly.dev/
2. 当前项目关键配置
섹션 제목: “2. 当前项目关键配置”当前仓库中的 fly.toml 已确认包含以下关键项:
app = 'omniroute'primary_region = 'sin'
[[mounts]] source = 'data' destination = '/data'
[processes] app = 'node run-standalone.mjs'
[http_service] internal_port = 20128
[env] TZ = "Asia/Shanghai" HOST = "0.0.0.0" HOSTNAME = "0.0.0.0" BIND = "0.0.0.0"说明:
app = 'omniroute'决定实际部署到哪个 Fly 应用destination = '/data'决定持久卷挂载目录- 本项目必须让
DATA_DIR=/data,否则数据库和密钥会写到容器临时目录
3. 必备工具
섹션 제목: “3. 必备工具”3.1 安装 Fly CLI
섹션 제목: “3.1 安装 Fly CLI”Windows PowerShell:
pwsh -Command "iwr https://fly.io/install.ps1 -useb | iex"如果安装脚本在当前环境失败,也可以手动下载 flyctl 二进制并放到 PATH 中。
3.2 登录 Fly 账号
섹션 제목: “3.2 登录 Fly 账号”flyctl auth login3.3 检查登录状态
섹션 제목: “3.3 检查登录状态”flyctl auth whoamiflyctl version4. 首次部署当前项目
섹션 제목: “4. 首次部署当前项目”4.1 获取代码并进入目录
섹션 제목: “4.1 获取代码并进入目录”git clone https://github.com/diegosouzapw/OmniRoute.gitcd OmniRoute4.2 确认应用名
섹션 제목: “4.2 确认应用名”打开 fly.toml,重点看这一行:
app = 'omniroute'如果你准备部署到自己的新应用,可改成全局唯一名称,例如:
app = 'omniroute-yourname'注意:
- 控制台里要看的是与
fly.toml里app一致的应用 - 以前如果用过别的名字,例如
oroute,不要和omniroute混淆
4.3 创建应用
섹션 제목: “4.3 创建应用”如果该应用尚不存在:
flyctl apps create omniroute如果你已经改成别的应用名,把 omniroute 替换成你的名字。
4.4 首次部署
섹션 제목: “4.4 首次部署”flyctl deploy5. 必配参数
섹션 제목: “5. 必配参数”本项目在 Fly.io 上建议至少配置以下参数。
5.1 已验证使用的参数
섹션 제목: “5.1 已验证使用的参数”这些参数已经在当前 omniroute 应用上实际部署:
API_KEY_SECRETDATA_DIRJWT_SECRETMACHINE_ID_SALTNEXT_PUBLIC_BASE_URLSTORAGE_ENCRYPTION_KEY
5.2 关于 INITIAL_PASSWORD
섹션 제목: “5.2 关于 INITIAL_PASSWORD”当前项目没有设置 INITIAL_PASSWORD,因为本次部署按需求不使用它。
如果不设置:
- 启动日志会提示默认密码是
CHANGEME - 部署后应尽快在系统设置中修改登录密码
如果你希望无人值守初始化后台密码,也可以后续补:
INITIAL_PASSWORD
6. 推荐参数说明
섹션 제목: “6. 推荐参数说明”6.1 Secrets 中设置
섹션 제목: “6.1 Secrets 中设置”建议放入 Fly Secrets:
| 变量名 | 是否推荐 | 说明 |
|---|---|---|
API_KEY_SECRET |
必需 | API Key 生成与校验使用 |
JWT_SECRET |
必需 | 登录态和 JWT 签名使用 |
STORAGE_ENCRYPTION_KEY |
强烈推荐 | 加密存储敏感连接信息 |
MACHINE_ID_SALT |
推荐 | 生成稳定机器标识 |
INITIAL_PASSWORD |
可选 | 首次部署时直接指定后台初始密码 |
| OAuth/API 私密凭证 | 按需 | 各类外部平台鉴权配置 |
6.2 当前项目推荐值
섹션 제목: “6.2 当前项目推荐值”| 变量名 | 推荐值 |
|---|---|
DATA_DIR |
/data |
NEXT_PUBLIC_BASE_URL |
https://omniroute.fly.dev |
说明:
DATA_DIR=/data非常关键,必须与 Fly Volume 挂载点一致NEXT_PUBLIC_BASE_URL用于调度器和前端回调等场景
7. 一键设置参数
섹션 제목: “7. 一键设置参数”下面命令会生成安全随机值,并把当前项目需要的参数一次性写入 Fly Secrets。
说明:
- 不包含
INITIAL_PASSWORD - 适用于当前项目
omniroute
$apiKeySecret = [Convert]::ToHexString((1..32 | ForEach-Object { Get-Random -Minimum 0 -Maximum 256 })).ToLower()$jwtSecret = [Convert]::ToHexString((1..64 | ForEach-Object { Get-Random -Minimum 0 -Maximum 256 })).ToLower()$machineIdSalt = [Convert]::ToHexString((1..32 | ForEach-Object { Get-Random -Minimum 0 -Maximum 256 })).ToLower()$storageKey = [Convert]::ToHexString((1..32 | ForEach-Object { Get-Random -Minimum 0 -Maximum 256 })).ToLower()
flyctl secrets set ` API_KEY_SECRET=$apiKeySecret ` JWT_SECRET=$jwtSecret ` MACHINE_ID_SALT=$machineIdSalt ` STORAGE_ENCRYPTION_KEY=$storageKey ` DATA_DIR=/data ` NEXT_PUBLIC_BASE_URL=https://omniroute.fly.dev ` -a omniroute如果你还要加初始密码:
flyctl secrets set INITIAL_PASSWORD=你的强密码 -a omniroute8. 查看当前参数
섹션 제목: “8. 查看当前参数”flyctl secrets list -a omniroute如果控制台 Secrets 页面没有显示你期待的变量,先检查:
- 看的应用是不是
omniroute fly.toml的app是否和控制台应用一致
9. 后续更新发布
섹션 제목: “9. 后续更新发布”代码有更新后,发布步骤很简单:
git pullflyctl deploy如果只更新参数,不改代码:
flyctl secrets set KEY=value -a omnirouteFly 会自动滚动更新机器。
9.1 跟踪原仓库更新并保留 fork 的 fly.toml
섹션 제목: “9.1 跟踪原仓库更新并保留 fork 的 fly.toml”如果当前仓库是 fork,并且你要同步上游 https://github.com/diegosouzapw/OmniRoute 的更新,推荐按下面流程执行。
先确认远程:
git remote -v应至少包含:
origin指向你自己的 forkupstream指向原仓库
如果没有 upstream,先添加:
git remote add upstream https://github.com/diegosouzapw/OmniRoute.git同步上游前,先抓取最新提交和标签:
git fetch upstream --tags查看当前版本和上游标签:
git describe --tags --alwaysgit show --no-patch --oneline v3.4.7如果你想合并上游最新 main,并强制保留 fork 当前的 fly.toml,可按下面流程执行:
git merge upstream/maingit checkout HEAD~1 -- fly.tomlgit add -- fly.tomlgit commit -m "chore(deploy): keep fork fly.toml"git push origin main说明:
git merge upstream/main用于同步原仓库最新代码git checkout HEAD~1 -- fly.toml用于恢复合并前你 fork 自己的fly.toml- 如果上游没有改
fly.toml,这一步不会带来额外差异 - 如果上游改了
fly.toml,这一步能确保 Fly 应用名、挂载卷、区域等 fork 自定义部署配置不被覆盖
如果你明确只想对齐某个发布标签,例如 v3.4.7,也可以先确认标签是否已经包含在 upstream/main:
git merge-base --is-ancestor v3.4.7 upstream/main返回成功表示 upstream/main 已经包含该版本,直接合并 upstream/main 即可。
9.2 同步上游后的标准发布顺序
섹션 제목: “9.2 同步上游后的标准发布顺序”同步原仓库完成后,推荐按下面顺序发布:
git fetch upstream --tagsgit merge upstream/main- 恢复 fork 的
fly.toml git push origin mainflyctl deployflyctl status -a omnirouteflyctl logs --no-tail -a omniroute
这就是当前项目升级到 v3.4.7 时使用的实际流程。
10. 发布后检查
섹션 제목: “10. 发布后检查”10.1 查看应用状态
섹션 제목: “10.1 查看应用状态”flyctl status -a omniroute10.2 查看启动日志
섹션 제목: “10.2 查看启动日志”flyctl logs --no-tail -a omniroute10.3 检查网站可访问
섹션 제목: “10.3 检查网站可访问”try { (Invoke-WebRequest -Uri "https://omniroute.fly.dev" -MaximumRedirection 5 -UseBasicParsing).StatusCode} catch { if ($_.Exception.Response) { $_.Exception.Response.StatusCode.value__ } else { throw }}返回 200 说明站点已正常响应。
11. 成功标志
섹션 제목: “11. 成功标志”部署成功后,日志里应看到类似内容:
[bootstrap] Secrets persisted to: /data/server.env[DB] SQLite database ready: /data/storage.sqlite这两个点很关键:
/data/server.env说明运行时密钥落到了持久卷/data/storage.sqlite说明数据库写入持久卷
如果你看到的是 /app/data/...,说明 DATA_DIR 没配对,需要立即修正。
12. 常见问题
섹션 제목: “12. 常见问题”12.1 Secrets 页面是空的
섹션 제목: “12.1 Secrets 页面是空的”通常有两种原因:
- 你还没执行
flyctl secrets set - 你打开的是另一个应用,例如
oroute,不是omniroute
12.2 flyctl deploy 报 app not found
섹션 제목: “12.2 flyctl deploy 报 app not found”先创建应用:
flyctl apps create omniroute12.3 fly.toml 解析失败
섹션 제목: “12.3 fly.toml 解析失败”重点检查:
- 注释里是否有乱码字符
- TOML 引号和缩进是否正确
12.4 数据没有持久化
섹션 제목: “12.4 数据没有持久化”检查以下两点:
fly.toml中是否存在destination = '/data'DATA_DIR是否设置为/data
12.5 不设置 INITIAL_PASSWORD 是否能跑
섹션 제목: “12.5 不设置 INITIAL_PASSWORD 是否能跑”可以运行,但会回退到默认 CHANGEME。生产环境建议尽快修改后台密码。
13. 新项目复用建议
섹션 제목: “13. 新项目复用建议”如果以后是新项目照着这份文档部署,最少改这几项:
- 修改
fly.toml里的app - 修改
NEXT_PUBLIC_BASE_URL - 保持
DATA_DIR=/data - 重新生成
API_KEY_SECRET、JWT_SECRET、MACHINE_ID_SALT、STORAGE_ENCRYPTION_KEY - 首次部署后检查日志是否写入
/data
不要直接复用旧项目的密钥。
14. 当前项目的最小发布清单
섹션 제목: “14. 当前项目的最小发布清单”当前项目后续最常用的命令如下:
flyctl auth whoamiflyctl status -a omnirouteflyctl secrets list -a omnirouteflyctl deployflyctl logs --no-tail -a omniroute如果只是正常发版,核心就是:
flyctl deploy如果是新环境首次部署,核心就是:
flyctl auth loginflyctl apps create omnirouteflyctl secrets set ... -a omnirouteflyctl deployflyctl logs --no-tail -a omniroute
HagiCode
HagiCode는 구조화된 워크플로, 다중 에이전트 실행, Hero Dungeon 뷰를 갖춘 에이전트 코딩 작업 공간입니다.
더 스마트하고 빠르며 즐거운 에이전트 워크플로로 유용한 소프트웨어를 만드세요.

- Smart구조화된 워크플로는 의도를 아이디어부터 배포까지 실행 가능한 경로로 바꿉니다.
- Efficient다중 에이전트 워크플로로 조사, 구현, 검토를 병렬로 진행합니다.
- FunHero Dungeon은 긴 코딩 세션을 시각적이고 협업적인 경험으로 만듭니다.