服务器模式Postgres + 集中式身份验证
多团队,通过 JWKS 进行 JWT 验证。该 Web 应用会根据您的认证服务器的信息离线验证令牌 /api/auth/.well-known/jwks.json.
官方图片 arnaudprioul/i18n-dashboard在 Docker Hub 上发布这两个项目 linux/amd64和 linux/arm64. 根据团队规模的不同,有三种运行方式。
单用户、单团队。翻译数据存储在 Docker 卷中。最适合自行托管约 10 万个键。请将此内容保存为 docker-compose.yml并运行 docker compose up -d:
127.0.0.1,只能从本机访问,无法从网络上的其他设备访问。本地模式没有登录界面,因此任何能访问该端口的人都将拥有对所有项目的完全访问权限——只有在你信任的防火墙或 VPN 后面,才应放宽此绑定。完整的快速入门指南、环境变量及故障排除内容请参见 Docker Hub 概述.
多团队,通过 JWKS 进行 JWT 验证。该 Web 应用会根据您的认证服务器的信息离线验证令牌 /api/auth/.well-known/jwks.json.
原生 macOS / Windows / Linux 版本,内置 Nitro 服务器和 SQLite。无需 Docker,也无需配置数据库。登录通过您的在线账户进行。
八大分类:入门指南、框架指南、部署、管理、质量、参考、账单和支持。
每个 runtimeConfig该值可在运行时通过 NUXT_*前缀 — Nitro 的规范约定。诸如 I18N_DB_HOST除非明确列为线协议变量,否则这些变量将被默认忽略。
完整参考文献 (所有变量、默认值、作用域和迁移说明)都位于 Docker Hub 页面上,与镜像紧密关联:
在 Docker Hub 上查看完整的环境变量参考文档 →I18N_APP_MODE — local / server / desktop. 服务器模式需要一个真实的数据库和一个中央认证系统。NUXT_DB_CLIENT + NUXT_DB_HOST + NUXT_DB_NAME + NUXT_DB_USER + NUXT_DB_PASSWORD — Postgres / SQLite / MySQL 连接。NUXT_SESSION_SECRET — 生产环境中必需。使用以下命令生成: openssl rand -hex 32.NUXT_CENTRAL_AUTH_URL + NUXT_PUBLIC_CENTRAL_AUTH_URL — 您的身份验证发行者的服务器端和浏览器端 URL(必须与 JWKS 兼容)。NUXT_AUTH_JWT_ISSUER + NUXT_AUTH_JWT_AUDIENCE — 预期 iss / aud访问令牌上的声明。NUXT_INTERNAL_API_SECRET — Web 应用与中央认证端之间调用所使用的共享 HMAC。双方必须保持一致。NUXT_SMTP_HOST + NUXT_SMTP_PORT + NUXT_SMTP_USER + NUXT_SMTP_PASS + NUXT_SMTP_FROM — 工作流通知。若要禁用电子邮件通知,请将“主机”字段留空。NUXT_DASHBOARD_URL — 此 Web 应用实例的公共 URL,用于事务性电子邮件中的链接。选择任意一个 SMTP 中继服务器,并输入以下四个值——系统将在每次工作流事件发生时通过该服务器发送电子邮件。
对于本地开发/烟雾测试,请指向随附的 Mailpit服务: NUXT_SMTP_HOST=mailpit, NUXT_SMTP_PORT=1025.
角色按项目授予,而不是整个实例通用——共有三个层级,每一级都会解锁该项目允许的更多操作。
translator | moderator | admin | super_admin | |
|---|---|---|---|---|
| 编辑翻译 | 可 | 可 | 可 | 可 |
| 审核翻译 | 否 | 可 | 可 | 可 |
| 管理项目(设置、扫描、同步) | 否 | 否 | 可 | 可 |
| 管理项目成员 | 否 | 否 | 可 | 可 |
在项目的Users页面中分配角色——选择一名成员,再指定 translator、moderator 或 admin。某个项目的 admin 对其他项目或拥有该项目的账户没有任何权限。
super_admin 独立于任何项目角色——它是账户级别的标志,会在所有项目上绕过以上全部检查。它会自动授予该实例上创建的第一个账户,无论是通过本地安装向导,还是服务器模式下的首次登录,目前没有办法在仪表板内把 super_admin 授予其他账户。
在 Admin → Integrations(仅限 super_admin)中按项目配置。该项目上每次发生订阅的事件时,webhook 都会向你的端点发送请求。
一个 webhook 可以订阅以下任意事件:
key.deleted — 一个或多个翻译键被删除translation.saved — 保存了一个翻译值scan.completed — 针对新增或变更键的源代码扫描已完成sync.completed — 与已配置翻译服务商的同步已完成发往通用 HTTP 端点的每次投递都带有X-Webhook-Signature(使用创建 webhook 时仅显示一次的密钥,对 JSON 正文做 HMAC-SHA256)和X-Webhook-Event。Slack 和 Discord 的端点 URL 会被自动识别,并改为使用各自平台专属的消息格式发送;这两种集成通过 URL 本身完成鉴权,因此从不携带签名头。
https:——仅在生产环境之外才允许使用普通 HTTP。https://user:pass@host)会被拒绝。点击某个 webhook 旁边的 ▶ 按钮,即可按需发送一个已签名的 ping 事件,无需等待真实事件发生。
仅限 super_admin,可在 Admin → Backup 或通过 CLI 执行。备份是一个单独的 JSON 导出文件,涵盖所有项目、翻译、用户和设置。
始终排除:refresh_tokens, password_reset_tokens, otp_tokens, webhook_deliveries,以及每个账户的密码哈希。
点击“Download backup”会保存一个带日期的 JSON 文件,例如 i18n-dashboard-backup-2026-07-31.json。
恢复操作会重新上传该文件,并要求选择一种模式:
结果会报告已恢复的行数、跳过的重复项,以及任何失败的行,而不是在部分恢复的情况下悄悄报告成功。
两个命令都需要一个更高权限的管理员令牌——NUXT_CLI_ADMIN_TOKEN(回退到NUXT_CLI_TOKEN)——通过--token传入,或从你的 CLI 配置中解析。
自托管用户最常遇到的问题,直接摘自 Docker 镜像自身的故障排查指南。
Refusing to start: NUXT_DB_HOST is still the build-time default 'localhost' — 你的环境仍在使用加 NUXT_* 前缀之前的变量名。请给数据库相关的环境变量加上 NUXT_ 前缀(NUXT_DB_HOST、NUXT_DB_USER 等)。Webapp returns 401 on every API call — 无法访问 JWKS 端点。请确认 NUXT_CENTRAL_AUTH_URL 能从容器内部解析(如果两个服务在同一个 compose 中运行,请使用 Docker 网络主机名)。JWT verification fails right after a key rotation — JWKS 缓存保留 1 小时,并在密钥 ID 未命中后 30 秒刷新。请预留一小段宽限期,或在轮换密钥后立即重启 Web 应用。Health check shows "0 keys" despite a non-empty database — 你很可能连接到了错误的数据库。请确认 NUXT_DB_HOST 确实已设置,而不是回退到遗留的 SQLite 文件。Container starts on port 3000 instead of 6001 — Nitro 直接读取 PORT。镜像设置了 I18N_PORT=6001,但覆盖 PORT 会改变绑定端口——请让它与你的 ports: 映射保持一致。Can't reach the dashboard from another machine — 使用默认 Compose 配置时属于预期行为——该端口被有意绑定到 127.0.0.1。如需刻意对外暴露,请绑定一个可路由的地址,或在前面放置一个反向代理。