Skip to content

部署 ​

Dotnify 是一个 Node.js 应用——后端使用 Hono 框架运行在 Node.js 服务器上,数据层使用 Upstash Redis。

Vercel ​

Vercel 是支持的部署目标之一。

一键部署 ​

点击下方按钮即可将 Dotnify 部署到你的 Vercel 账户。Vercel 将自动克隆仓库并完成部署。

Deploy with Vercel

手动部署 ​

1. 导入项目 ​

  1. Fork Dotnify 仓库(请确保 Fork 的是 main 分支)或克隆到本地
  2. 前往 Vercel 控制台导入仓库
  3. 将默认分支设为 main,Vercel 将自动检测 Vite 框架

2. 创建 Upstash Redis 数据库 ​

方式 A:Vercel Upstash 集成(推荐)

Vercel 提供内置的 Upstash Redis 集成,可以直接在 Vercel 项目中创建和管理 Redis 数据库:

  1. 进入你的 Vercel 项目 → Storage 选项卡

  2. 点击 Create Database → 选择 Upstash Redis

  3. 选择区域并点击 Create

  4. 在 Connect a Project 中选择你的项目,然后点击 Connect 连接项目,Vercel 会自动将 KV_REST_API_URL 和 KV_REST_API_TOKEN 注入项目的环境变量

方式 B:官方或其他第三方 Redis

Dotnify 使用 @upstash/redis SDK,通过 REST 兼容 API 与 Redis 通信。你可以使用任何提供 Upstash REST API 兼容端点的 Redis 服务:

  • Upstash — 前往 Upstash 控制台创建新的 Redis 实例,然后复制 REST URL 和 REST Token
  • 自建 Redis — 如果你有自己的 Redis 服务器,可以使用 Upstash Redis 兼容服务或通过代理将 Redis TCP 协议转换为 REST API
  • 其他 Redis 服务商 — 任何提供 Upstash REST API 兼容接口的服务商(相同的 URL 和 Token 格式)均可直接使用

无论使用哪个服务商,你都需要将 REST URL 和 REST Token 设置为环境变量。

3. 配置环境变量 ​

如果使用了 Vercel Upstash 集成,环境变量已自动设置。否则,在 Vercel 项目设置中手动添加:

变量描述必需
UPSTASH_REDIS_REST_URLUpstash Redis REST URL是
UPSTASH_REDIS_REST_TOKENUpstash Redis REST 令牌是

4. 部署 ​

在 Deployments 中点击最新的部署,选择 Redeploy 重新部署

Railway ​

Railway 是一个支持从 GitHub 仓库自动构建并部署的平台。

一键部署 ​

Deploy on Railway

点击按钮后,Railway 将克隆仓库并开始构建。你仍需配置环境变量和启动命令(见下方)。

手动部署 ​

1. 创建 Upstash Redis 数据库 ​

  1. 前往 Upstash 控制台创建新的 Redis 实例
  2. 复制 REST URL 和 REST Token——下一步需要用到

如果你已有其他部署中使用的 Upstash Redis 实例,可以直接复用。

2. 部署到 Railway ​

  1. 前往 Railway并使用 GitHub 登录
  2. 点击 New Project → Deploy from GitHub repo
  3. 选择 Dotnify 仓库(如非自己的仓库请先 Fork main 分支),并选择 main 分支
  4. Railway 将自动检测 Node.js 环境

3. 配置环境变量 ​

在 Railway 项目控制台中,进入 Variables 并添加:

变量描述必需
UPSTASH_REDIS_REST_URLUpstash Redis REST URL是
UPSTASH_REDIS_REST_TOKENUpstash Redis REST 令牌是
PORT服务器端口(Railway 自动注入 PORT,无需手动设置)否

4. 配置启动命令 ​

Railway 可能无法自动检测正确的启动命令。在项目 Settings 中,将启动命令设置为:

npm run start

Railway 将构建并部署项目。部署完成后,可以在 Settings → Networking 中生成公开域名。

Zeabur ​

Zeabur 是一个支持从 GitHub 仓库零配置部署的平台。

一键部署 ​

Deploy on Zeabur

点击按钮后,Zeabur 将克隆仓库并开始构建。你仍需配置环境变量(见下方)。

手动部署 ​

1. 部署到 Zeabur ​

  1. 前往 Zeabur并使用 GitHub 登录
  2. 点击 New Project 并选择区域
  3. 点击 Add Service → Git → 选择 Dotnify 仓库(如非自己的仓库请先 Fork main 分支),并选择 main 分支
  4. Zeabur 将自动检测 Node.js 环境并构建项目

2. 添加 Redis 服务 ​

  1. 在同一项目中,点击 Add Service → Marketplace → 选择 Redis
  2. Zeabur 将自动创建 Redis 实例

Zeabur 内置的 Redis 默认不提供 Upstash REST API 兼容端点。你有两种选择:

方式 A:使用 Upstash Redis(推荐)

  1. 前往 Upstash 控制台创建新的 Redis 实例
  2. 复制 REST URL 和 REST Token

方式 B:使用 Zeabur Redis + REST 代理

如果需要使用 Zeabur 内置 Redis,需自行搭建 REST API 代理(如 upstash-redis-compatible-server),这需要额外配置。

3. 配置环境变量 ​

在 Dotnify 服务 → Variables 中添加:

变量描述必需
UPSTASH_REDIS_REST_URLUpstash Redis REST URL是
UPSTASH_REDIS_REST_TOKENUpstash Redis REST 令牌是

4. 生成域名 ​

在 Dotnify 服务 → Networking 中,点击 Generate Domain 获取公开访问地址。

Docker ​

Dotnify 提供预构建的 Docker 镜像,支持 linux/amd64 和 linux/arm64 架构,同时发布到 Docker Hub 和 GitHub Container Registry。

快速启动 ​

Docker Hub:

bash
docker run -d --name dotnify \
  -p 3000:3000 \
  -e UPSTASH_REDIS_REST_URL="https://your-redis.upstash.io" \
  -e UPSTASH_REDIS_REST_TOKEN="your-redis-token" \
  airtouch97/dotnify:latest

GHCR:

bash
docker run -d --name dotnify \
  -p 3000:3000 \
  -e UPSTASH_REDIS_REST_URL="https://your-redis.upstash.io" \
  -e UPSTASH_REDIS_REST_TOKEN="your-redis-token" \
  ghcr.io/airtouch97/dotnify:latest

提示: 如果拉取镜像遇到困难,可以考虑使用镜像源。例如将 docker.io 替换为镜像源地址,或将 ghcr.io 替换为对应的 GHCR 镜像源。

docker-compose ​

创建 docker-compose.yml:

yaml
services:
  dotnify:
    image: airtouch97/dotnify:latest  # 或 ghcr.io/airtouch97/dotnify:latest
    ports:
      - "3000:3000"
    environment:
      - UPSTASH_REDIS_REST_URL=https://your-redis.upstash.io
      - UPSTASH_REDIS_REST_TOKEN=your-redis-token
    restart: unless-stopped

然后启动服务:

bash
docker compose up -d

生产部署 ​

  1. 构建项目:
bash
npm run build
  1. 配置环境变量(见下方)。

  2. 启动服务器:

bash
npm run start

服务器默认监听 http://localhost:3000(可通过 PORT 环境变量配置),同时提供前端静态文件和 API 路由。

环境变量 ​

变量描述必需
UPSTASH_REDIS_REST_URLUpstash Redis REST URL是
UPSTASH_REDIS_REST_TOKENUpstash Redis REST 令牌是
PORT服务器端口(默认 3000)否

当使用 Vercel Upstash 集成时,KV_REST_API_URL 和 KV_REST_API_TOKEN 会被自动注入,优先级高于 UPSTASH_REDIS_REST_* 变量。

本地开发 ​

在本地运行完整的 API:

使用 Vite 开发服务器(推荐) ​

项目包含自定义 Vite 插件(scripts/vite-plugin-dev-api.ts),在 vite dev 期间将 Hono API 应用挂载到 Vite 开发服务器上,前端和 API 从同一端口提供服务。

  1. 在项目根目录创建 .env.local 文件:
bash
UPSTASH_REDIS_REST_URL="https://your-redis.upstash.io"
UPSTASH_REDIS_REST_TOKEN="your-redis-token"
  1. 启动开发服务器:
bash
npm run dev

应用将在 http://localhost:3000 可用。API 修改会在下次请求时生效(无需手动重启)。

使用生产服务器 ​

bash
npm run build && npm run start

启动 Hono Node.js 服务器并提供编译后的前端,与生产环境一致。

数据存储 ​

Dotnify 使用三个 Redis 键存储所有应用状态:

键描述
dotnify:admin管理员凭据(用户名 + scrypt 密码哈希)
dotnify:session:<token>活跃会话(7 天 TTL,自动过期)
dotnify:providers已配置 DNS 服务商的 JSON 数组

无需数据库模式或迁移。Upstash Redis 按请求计费,适合低流量的管理工具。

安全注意事项 ​

  • 密码哈希:管理员密码在存储前使用 scrypt(64 字节密钥长度)进行哈希
  • 会话令牌:32 字节随机令牌,Redis 中 7 天 TTL
  • 时序安全比较:密码验证使用 crypto.timingSafeEqual 防止时序攻击
  • API 密钥掩码:服务商 API 密钥在 API 响应中被掩码(仅显示最后 4 个字符)
  • Bearer 令牌认证:所有 API 端点(除 /api/auth/me 和 /api/auth/setup)需要有效的 Bearer 令牌
  • 无 CORS 配置:API 仅限同源——SPA 和 API 从同一部署提供服务