콘텐츠로 이동

언어 선택

현재 언어: 한국어

OmniRoute Fly.io 部署指南

  • 平台:Fly.io
  • 部署方式:本地 flyctl 直接发布
  • 运行方式:使用仓库内现有 Dockerfile 和 fly.toml
  • 数据持久化:Fly Volume 挂载到 /data
  • 访问地址:https://omniroute.fly.dev/

当前仓库中的 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,否则数据库和密钥会写到容器临时目录

Windows PowerShell:

터미널 창
pwsh -Command "iwr https://fly.io/install.ps1 -useb | iex"

如果安装脚本在当前环境失败,也可以手动下载 flyctl 二进制并放到 PATH 中。

터미널 창
flyctl auth login
터미널 창
flyctl auth whoami
flyctl version

터미널 창
git clone https://github.com/diegosouzapw/OmniRoute.git
cd OmniRoute

打开 fly.toml,重点看这一行:

app = 'omniroute'

如果你准备部署到自己的新应用,可改成全局唯一名称,例如:

app = 'omniroute-yourname'

注意:

  • 控制台里要看的是与 fly.toml 里 app 一致的应用
  • 以前如果用过别的名字,例如 oroute,不要和 omniroute 混淆

如果该应用尚不存在:

터미널 창
flyctl apps create omniroute

如果你已经改成别的应用名,把 omniroute 替换成你的名字。

터미널 창
flyctl deploy

本项目在 Fly.io 上建议至少配置以下参数。

这些参数已经在当前 omniroute 应用上实际部署:

  • API_KEY_SECRET
  • DATA_DIR
  • JWT_SECRET
  • MACHINE_ID_SALT
  • NEXT_PUBLIC_BASE_URL
  • STORAGE_ENCRYPTION_KEY

当前项目没有设置 INITIAL_PASSWORD,因为本次部署按需求不使用它。

如果不设置:

  • 启动日志会提示默认密码是 CHANGEME
  • 部署后应尽快在系统设置中修改登录密码

如果你希望无人值守初始化后台密码,也可以后续补:

  • INITIAL_PASSWORD

建议放入 Fly Secrets:

变量名 是否推荐 说明
API_KEY_SECRET 必需 API Key 生成与校验使用
JWT_SECRET 必需 登录态和 JWT 签名使用
STORAGE_ENCRYPTION_KEY 强烈推荐 加密存储敏感连接信息
MACHINE_ID_SALT 推荐 生成稳定机器标识
INITIAL_PASSWORD 可选 首次部署时直接指定后台初始密码
OAuth/API 私密凭证 按需 各类外部平台鉴权配置
变量名 推荐值
DATA_DIR /data
NEXT_PUBLIC_BASE_URL https://omniroute.fly.dev

说明:

  • DATA_DIR=/data 非常关键,必须与 Fly Volume 挂载点一致
  • NEXT_PUBLIC_BASE_URL 用于调度器和前端回调等场景

下面命令会生成安全随机值,并把当前项目需要的参数一次性写入 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 omniroute

터미널 창
flyctl secrets list -a omniroute

如果控制台 Secrets 页面没有显示你期待的变量,先检查:

  • 看的应用是不是 omniroute
  • fly.toml 的 app 是否和控制台应用一致

代码有更新后,发布步骤很简单:

터미널 창
git pull
flyctl deploy

如果只更新参数,不改代码:

터미널 창
flyctl secrets set KEY=value -a omniroute

Fly 会自动滚动更新机器。

9.1 跟踪原仓库更新并保留 fork 的 fly.toml

섹션 제목: “9.1 跟踪原仓库更新并保留 fork 的 fly.toml”

如果当前仓库是 fork,并且你要同步上游 https://github.com/diegosouzapw/OmniRoute 的更新,推荐按下面流程执行。

先确认远程:

터미널 창
git remote -v

应至少包含:

  • origin 指向你自己的 fork
  • upstream 指向原仓库

如果没有 upstream,先添加:

터미널 창
git remote add upstream https://github.com/diegosouzapw/OmniRoute.git

同步上游前,先抓取最新提交和标签:

터미널 창
git fetch upstream --tags

查看当前版本和上游标签:

터미널 창
git describe --tags --always
git show --no-patch --oneline v3.4.7

如果你想合并上游最新 main,并强制保留 fork 当前的 fly.toml,可按下面流程执行:

터미널 창
git merge upstream/main
git checkout HEAD~1 -- fly.toml
git add -- fly.toml
git 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 即可。

同步原仓库完成后,推荐按下面顺序发布:

  1. git fetch upstream --tags
  2. git merge upstream/main
  3. 恢复 fork 的 fly.toml
  4. git push origin main
  5. flyctl deploy
  6. flyctl status -a omniroute
  7. flyctl logs --no-tail -a omniroute

这就是当前项目升级到 v3.4.7 时使用的实际流程。


터미널 창
flyctl status -a omniroute
터미널 창
flyctl logs --no-tail -a omniroute
터미널 창
try {
(Invoke-WebRequest -Uri "https://omniroute.fly.dev" -MaximumRedirection 5 -UseBasicParsing).StatusCode
} catch {
if ($_.Exception.Response) {
$_.Exception.Response.StatusCode.value__
} else {
throw
}
}

返回 200 说明站点已正常响应。


部署成功后,日志里应看到类似内容:

[bootstrap] Secrets persisted to: /data/server.env
[DB] SQLite database ready: /data/storage.sqlite

这两个点很关键:

  • /data/server.env 说明运行时密钥落到了持久卷
  • /data/storage.sqlite 说明数据库写入持久卷

如果你看到的是 /app/data/...,说明 DATA_DIR 没配对,需要立即修正。


通常有两种原因:

  • 你还没执行 flyctl secrets set
  • 你打开的是另一个应用,例如 oroute,不是 omniroute

先创建应用:

터미널 창
flyctl apps create omniroute

重点检查:

  • 注释里是否有乱码字符
  • TOML 引号和缩进是否正确

检查以下两点:

  • fly.toml 中是否存在 destination = '/data'
  • DATA_DIR 是否设置为 /data

12.5 不设置 INITIAL_PASSWORD 是否能跑

섹션 제목: “12.5 不设置 INITIAL_PASSWORD 是否能跑”

可以运行,但会回退到默认 CHANGEME。生产环境建议尽快修改后台密码。


如果以后是新项目照着这份文档部署,最少改这几项:

  1. 修改 fly.toml 里的 app
  2. 修改 NEXT_PUBLIC_BASE_URL
  3. 保持 DATA_DIR=/data
  4. 重新生成 API_KEY_SECRET、JWT_SECRET、MACHINE_ID_SALT、STORAGE_ENCRYPTION_KEY
  5. 首次部署后检查日志是否写入 /data

不要直接复用旧项目的密钥。


当前项目后续最常用的命令如下:

터미널 창
flyctl auth whoami
flyctl status -a omniroute
flyctl secrets list -a omniroute
flyctl deploy
flyctl logs --no-tail -a omniroute

如果只是正常发版,核心就是:

터미널 창
flyctl deploy

如果是新环境首次部署,核心就是:

  1. flyctl auth login
  2. flyctl apps create omniroute
  3. flyctl secrets set ... -a omniroute
  4. flyctl deploy
  5. flyctl logs --no-tail -a omniroute

undefined (a58000c7685f)

HagiCode

HagiCode는 에이전트 코딩 작업 공간입니다. 풍부하고 편리한 UI 상호작용으로 계획 수립, 에이전트 실행, 프로젝트 작업을 쉽게 시작하고 따라가며 개발을 더 흥미로운 경험으로 만듭니다.

풍부하고 편리한 UI 상호작용으로 계획부터 프로젝트 작업까지 쉽게 따라갈 수 있습니다.

HagiCode 방문문서 읽기
  • 스마트OpenSpec 워크플로는 의도를 제안, 설계, 작업을 거쳐 배포까지 이어지는 실행 가능한 경로로 바꿉니다.
  • 효율적다중 에이전트 실행으로 조사, 구현, 검토를 병렬로 진행하며 여러 저장소와 익숙한 Agent CLI를 지원합니다.
  • 흥미로운풍부하고 편리한 UI 상호작용으로 계획 수립, 에이전트 실행, 프로젝트 작업을 쉽게 시작하고 따라갈 수 있습니다.

Windows용 다운로드

Microsoft Store에서 받기모든 다운로드

아이디어를 실제로 배포되는 소프트웨어로.

HagiCode는 에이전트 코딩 작업 공간입니다. OpenSpec 워크플로로 변경을 계획하고, 다중 에이전트 실행으로 진행하며, Hero Scenario로 긴 작업의 진행 상황을 한눈에 보여 아이디어를 실제로 배포되는 소프트웨어로 만듭니다.

스마트
OpenSpec 워크플로는 의도를 제안부터 배포까지 이어지는 실행 가능한 경로로 바꿉니다.
효율적
다중 에이전트 실행으로 조사, 구현, 검토를 병렬로 진행합니다.
즐거운
편리한 UI 상호작용으로 계획, 에이전트 실행, 프로젝트 작업을 쉽게 따라갈 수 있습니다.