使用您最喜欢的AI助手总结文档,并引用此页面和AI提供商
此页面的内容已使用 AI 翻译。
查看英文原文的最新版本如果您有改善此文档的想法,请随时通过在GitHub上提交拉取请求来贡献。
文档的 GitHub 链接复制文档 Markdown 到剪贴板
自行托管 Intlayer
Intlayer 可以完全运行在您自己的基础设施上,无需 Intlayer Cloud 账户。由同一个安装程序(install.sh、Windows 上为 install.ps1 或 npx intlayer init infra)驱动三种设置:
在弹窗中打开表格以清晰地查看所有数据
| Setup | What it is | Pick it for |
|---|---|---|
| 桌面应用 | 适用于 macOS、Linux 和 Windows 的原生控制面板 | 本地客户端,无需托管任何内容 |
| 多合一 Docker | 控制面板、API、MongoDB、Redis 和 MinIO 集成在单个容器中 | 试验和小规模单机安装 |
| Docker Compose | 每个服务一个容器,每个数据存储都可替换为托管云服务 | 生产环境、横向扩展、托管数据库 |
Table of Contents
已发布的镜像和安装包
在弹窗中打开表格以清晰地查看所有数据
| Artifact | Docker Hub | GHCR mirror | Contents |
|---|---|---|---|
| All-in-one container | intlayer/cms-all | ghcr.io/aymericzip/intlayer/cms-all | app + backend + MongoDB 8 + Redis + MinIO + Chromium |
| Dashboard (frontend) | intlayer/cms-frontend | ghcr.io/aymericzip/intlayer/cms-frontend | TanStack Start dashboard on Bun |
| API (backend) | intlayer/cms-backend | ghcr.io/aymericzip/intlayer/cms-backend | Fastify REST API on Bun + Chromium |
| Desktop app | GitHub releases | n/a | .dmg (macOS), .deb / .rpm / .AppImage (Linux), .exe / .msi (Windows) |
这三个镜像均基于同一个 docker/selfhost/Dockerfile 构建,并在每次发布时更新。Compose 堆栈还会拉取官方的 mongo:8、redis:8-alpine 和 quay.io/minio/minio 镜像。
安装与设置
安装程序会询问您需要的安装模式,检查前提条件(提供安装 Docker 的选项),写入包含已生成密钥的环境变量文件,并拉取所需镜像。它不会自动启动任何容器:Docker 模式首先需要配置邮件服务,因此它最后会输出待执行的启动命令。重新运行它是完全安全的:现有的环境配置文件绝不会被覆盖,这也使其成为便捷的升级路径。
基于 Tauri 构建的原生应用程序形式的 Intlayer 控制面板。它直接连接至 Intlayer Cloud (https://app.intlayer.org),因此无需在本地托管后端服务。当您想要一个本地客户端而非浏览器标签页时,这是理想的选择。
安装
安装程序会自动下载适用于您的操作系统和 CPU 的安装包,然后打开它(macOS)、进行安装(Linux 上的 dpkg / rpm)或启动安装向导(Windows)。您也可以从发布页面手动下载。
复制代码到剪贴板
In PowerShell:
复制代码到剪贴板
复制代码到剪贴板
环境要求
- Node.js:该应用内置了控制面板的前端服务器,并使用系统本地的
node二进制文件启动它。如果应用无法启动,请从 nodejs.org 安装。
官方发布的桌面版默认连接 Intlayer Cloud 后端。若要将其指向自行托管的后端,需要使用配置为您自身 API 地址的 VITE_BACKEND_URL 重新编译该应用,详情请参阅限制条件。
所有组件都运行在单个 intlayer/cms-all 容器中,由 s6-overlay 统一监控管理,所有数据持久化保存在同一个 Docker 卷中。
复制代码到剪贴板
在弹窗中打开表格以清晰地查看所有数据
| 服务 | 主机端口 | 用途 |
|---|---|---|
| app | 3000 | 控制面板(CMS 界面) |
| backend | 3100 | REST API(/health 健康检查接口) |
| mongo | 仅内部访问 | MongoDB 8 单节点副本集 rs0 |
| redis | 仅内部访问 | 任务队列(BullMQ)与缓存 |
| minio | 9000 (S3), 9001 (控制台) | 兼容 S3 的对象存储,用于头像和截图 |
启动顺序由 s6 依赖项严格保证(mongod → 副本集初始化,minio → 存储桶创建,然后是 backend,最后是 app),且长期运行的服务在退出时会自动重启,因此初次启动时能够自动恢复。
前提条件
- Docker ≥ 24:安装程序可自动协助安装(在 Linux 上通过 get.docker.com,在 macOS 上通过 Homebrew)。在 Windows 上,请先安装 Docker Desktop(启用 WSL 2 后端)。
- 主机上的
3000、3100、9000和9001端口处于可用未占用状态。MinIO 的9000端口必须对浏览器开放,因为上传的静态资源将直接从S3_PUBLIC_URL加载。 - 邮件发送服务:Resend API 密钥或 SMTP 中继服务。
1. 执行安装
在当前目录写入包含自动生成的 BETTER_AUTH_SECRET 和 S3_SECRET_ACCESS_KEY 的 ./intlayer.env,通过几个问题补全其余配置,并拉取 intlayer/cms-all:latest 镜像。
复制代码到剪贴板
In PowerShell:
复制代码到剪贴板
复制代码到剪贴板
2. 回答配置问题
安装程序会询问以下内容(按 Enter 接受建议值,所有答案之后都可以在文件中修改):
- Intlayer 对外提供服务的域名。留空则保持使用
localhost。若填写example.org这样的域名,它会建议控制面板使用https://cms.example.org、API 使用https://back.example.org、对象存储使用https://s3.example.org/intlayer,并写入DOMAIN、APP_URL、BACKEND_URL和S3_PUBLIC_URL。后续步骤参见自定义域名。 - 邮件服务:Resend(API 密钥)或 SMTP 中继(主机、端口、凭据),以及发件人地址。此步骤可以跳过,稍后手动配置。
- 可选的 OpenAI API 密钥,用于 AI 功能。
在没有终端的情况下(例如从 CI 中运行脚本),这些问题会被跳过,仅生成密钥。打开 intlayer.env 并手动配置 Resend 或 SMTP(详情参见全局邮件服务):
复制代码到剪贴板
3. 启动容器
这是安装程序输出的启动命令(使用自定义域名时,它之前还会先执行生成 intlayer/cms-all:custom 的 docker build,参见自定义域名):
复制代码到剪贴板
复制代码到剪贴板
CLI 会调用安装程序并打印其他标签页中所示的 docker run … 命令。配置好邮件发送服务后,将其粘贴到终端中运行即可。
打开 http://localhost:3000(或您的控制面板 URL)并按照首次运行设置进行操作。初次启动需要初始化数据库副本集和存储桶,请稍候约一分钟。
备份与升级
所有持久化数据均保存在 intlayer-data 数据卷中(/data/mongo、/data/redis、/data/minio)。
复制代码到剪贴板
如需升级,只需重新运行安装程序(它会拉取最新镜像并保留原有的 intlayer.env),然后执行 docker rm -f intlayer 并再次运行启动命令。若要使用外部托管的 MongoDB 而非内置数据库,请在 intlayer.env 中设置 MONGODB_URI。
在独立的 Compose 私有网络中每个服务运行一个容器。控制面板和 API 分别使用公开发布的 intlayer/cms-frontend 和 intlayer/cms-backend 镜像;数据存储采用官方的 mongo、redis 和 minio 镜像。
复制代码到剪贴板
在弹窗中打开表格以清晰地查看所有数据
| 服务 | 镜像 | 职责 |
|---|---|---|
app | intlayer/cms-frontend | 运行在 :3000 的控制面板;等待后端健康检查就绪 |
backend | intlayer/cms-backend | 包含 Chromium 运行在 :3100 的 API;等待 Mongo、Redis 和 MinIO 存储桶就绪 |
mongo | mongo:8 | 单节点副本集 rs0,通过自身的健康检查脚本自动初始化 |
redis | redis:8-alpine | 队列与缓存,采用 append-only 持久化策略 |
minio | quay.io/minio/minio | 运行在 :9000 的 S3 存储与运行在 :9001 的控制台 |
minio-init | quay.io/minio/mc | 单次运行任务:自动创建存储桶并配置匿名只读下载策略 |
数据持久保存在 intlayer_mongo-data、intlayer_redis-data 和 intlayer_minio-data 卷中。服务之间的连接设置(MONGODB_URI、REDIS_URL、S3_ENDPOINT 以及服务端渲染所用的内部后端 URL)已在 compose 文件中固定,其优先级高于 .env 文件(.env 仅用于传递敏感密钥和可选集成配置)。
前提条件
- Docker ≥ 24 并安装 Compose 插件:在 Linux 和 macOS 上安装程序可协助自动安装。在 Windows 上,请先安装 Docker Desktop(WSL 2 后端)。
- 主机上的
3000、3100、9000和9001端口可用。 - 邮件发送服务:Resend API 密钥或 SMTP 中继服务。
1. 执行安装
在 ./intlayer/ 目录中写入 docker-compose.yml 和包含自动生成密钥的 .env,询问与多合一模式相同的配置问题(域名、邮件服务、OpenAI 密钥),并拉取所需的镜像。
复制代码到剪贴板
Or by hand:
复制代码到剪贴板
In PowerShell:
复制代码到剪贴板
Or by hand:
复制代码到剪贴板
复制代码到剪贴板
2. 配置邮件服务
如果您跳过了邮件服务问题,请在 intlayer/.env 中填入 Resend 或 SMTP 配置,配置方式与多合一容器完全相同(参见全局邮件服务)。
3. 启动堆栈
复制代码到剪贴板
使用自定义域名时,安装程序还会下载 docker-compose.build.yml,启动命令变为 docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build(参见自定义域名)。
打开 http://localhost:3000(或您的控制面板 URL)并按照首次运行设置进行操作。
使用外部托管数据库
从 compose 文件中删除要替换的服务(以及 backend 中对它的 depends_on 依赖项),然后覆盖对应的环境变量:
复制代码到剪贴板
S3_ACCESS_KEY_ID / S3_SECRET_ACCESS_KEY / S3_BUCKET_NAME 适用于任何兼容 S3 协议的对象存储服务商。
集群横向扩展
app 和 backend 服务均为无状态设计(stateless)。在负载均衡器后,移除固定的主机端口映射,并配置反向代理直接按容器服务名称访问后,执行 docker compose up -d --scale backend=3 即可实现横向扩展。后台异步任务通过 Redis (BullMQ) 协调,多个后端副本可以安全地共享同一个任务队列。
从源码编译构建
可以使用 override 文件将两个 Intlayer 服务的镜像拉取模式 image: 切换为源码构建 build:。在代码仓库的检出目录中:
复制代码到剪贴板
如果没有检出仓库,可在 .env 中设置 INTLAYER_BUILD_CONTEXT=https://github.com/aymericzip/intlayer.git#main,将构建上下文直接指向仓库本身。控制面板的 VITE_* 构建参数取自同一文件中的 DOMAIN、APP_URL 和 BACKEND_URL,自定义域名正是通过这种方式生效的。
备份与升级
复制代码到剪贴板
安装程序高级选项
如果不带 --mode(或 INTLAYER_MODE)运行,安装程序会弹出交互菜单:desktop、docker(多合一)或 compose。它还支持读取一系列环境变量。由于安装脚本是通过管道输入给 shell 执行的,请在 shell 运行命令前设置这些变量,而不是传给 curl:
复制代码到剪贴板
复制代码到剪贴板
在弹窗中打开表格以清晰地查看所有数据
| Variable | Default | Applies to | Description |
|---|---|---|---|
INTLAYER_MODE | (asked) | all | desktop, docker or compose, same as --mode |
INTLAYER_DOWNLOAD_DIR | ~/Downloads | desktop | Where the app installer is saved |
INTLAYER_IMAGE | intlayer/cms-all:latest | docker | All-in-one image to pull |
INTLAYER_ENV_FILE | ./intlayer.env | docker | Where to write the environment file |
INTLAYER_CONTAINER_NAME | intlayer | docker | Container name |
INTLAYER_DATA_VOLUME | intlayer-data | docker | Named volume mounted at /data |
INTLAYER_APP_PORT | 3000 | docker | Host port for the dashboard |
INTLAYER_API_PORT | 3100 | docker | Host port for the API |
INTLAYER_S3_PORT | 9000 | docker | Host port for the MinIO S3 API |
INTLAYER_CONSOLE_PORT | 9001 | docker | Host port for the MinIO console |
INTLAYER_COMPOSE_DIR | ./intlayer | compose | Where docker-compose.yml and .env are written |
INTLAYER_SELFHOST_REF | main | both | Git ref the compose file and env template are fetched from |
INTLAYER_BUILD_CONTEXT | …/intlayer.git#main | both | Build context used when a custom domain requires a rebuild |
INTLAYER_CUSTOM_IMAGE | intlayer/cms-all:custom | docker | Tag of the all-in-one image built for a custom domain |
端口变量仅影响宿主机 host 端的端口映射。由于官方发布的镜像已将http://localhost:3000、http://localhost:3100和http://localhost:9000预编译到了前端静态代码中,因此除非您自行重新构建镜像,否则请保持这些默认端口不变,详情请参阅限制条件。
首次运行设置
在一个全新的实例中(数据库尚为空),首次在浏览器中打开控制面板会自动重定向至 /init 初始化页面:
- 注册首个管理员账户。由于用户数据集合为空,系统会自动将该账户提升为超级管理员(super admin)。
- 系统会通过 Resend 或配置的 SMTP 中继向您的邮箱发送验证邮件。邮箱验证是强制要求的,这也是为什么在启动容器之前必须配置好邮件服务。
- 点击邮件中的验证链接,然后登录系统。
一旦超级管理员创建完成,再次访问 /init 将自动重定向至标准登录页面。
环境变量参考
两种 Docker 模式均读取相同的环境变量配置文件(容器模式为 intlayer.env,Compose 模式为 .env),该文件模板派生自 docker/selfhost/.env.template。
必填变量
在弹窗中打开表格以清晰地查看所有数据
| Variable | Example | Description |
|---|---|---|
BETTER_AUTH_SECRET | (generated) | 32-byte secret for session signing |
S3_SECRET_ACCESS_KEY | (generated) | Secret for the bundled MinIO |
RESEND_API_KEY | (your key) | Transactional email via Resend. Required for first-run setup unless an SMTP relay is configured instead (see Global mailer) |
部署环境固定变量
这些变量由镜像(多合一)或 compose 文件设置,仅在非标准拓扑下才需要覆盖。DOMAIN、APP_URL、BACKEND_URL 和 S3_PUBLIC_URL 是例外:在 env 文件中设置后,它们在两种模式下都具有优先权(参见自定义域名)。
在弹窗中打开表格以清晰地查看所有数据
| Variable | All-in-one | Docker Compose | Description |
|---|---|---|---|
PORT | 3100 | 3100 | Backend listening port |
APP_URL | http://localhost:3000 | http://localhost:3000 | Public URL of the dashboard |
BACKEND_URL | http://localhost:3100 | http://localhost:3100 | Public URL of the backend API |
DOMAIN | localhost | localhost | Cookie domain |
SELF_HOSTED | true | true | Disables the cloud-only API endpoints (billing, subscriptions, marketplace) |
MONGODB_URI | mongodb://127.0.0.1:27017/intlayer?replicaSet=rs0 | mongodb://mongo:27017/… | MongoDB connection string, any mongodb:// or mongodb+srv:// cluster works |
REDIS_URL | redis://127.0.0.1:6379 | redis://redis:6379 | Redis |
S3_ENDPOINT | http://127.0.0.1:9000 | http://minio:9000 | MinIO (server-to-server) |
S3_PUBLIC_URL | http://localhost:9000/intlayer | http://localhost:9000/intlayer | Public URL for browser asset loading |
S3_BUCKET_NAME | intlayer | intlayer | Bucket name |
S3_ACCESS_KEY_ID | intlayer | intlayer | MinIO access key |
在 Compose 模式下,app 服务还会额外注入 INTLAYER_BACKEND_INTERNAL_URL=http://backend:3100:浏览器在宿主机上通过 localhost:3100 访问 API,但前端的服务端渲染(SSR)在容器内网运行,必须通过服务名通信。
自定义域名
后端在运行时读取其公开 URL,但控制面板已将这些 URL 编译进代码:官方发布的 intlayer/cms-frontend 和 intlayer/cms-all 镜像只能在 http://localhost:3000 上使用。因此,要在您自己的域名上提供 Intlayer 服务需要两样东西,在您回答域名问题时,安装程序会把两者都准备好:
env 文件中的四个变量,由后端读取(Cookie、邮件链接、OAuth 回调、资源 URL),并由
docker-compose.build.yml用作构建参数:intlayer.env复制代码复制代码到剪贴板
使用这些 URL 构建的控制面板镜像。 Docker 直接从仓库构建,无需检出代码:
sh复制代码复制代码到剪贴板
然后在容器前放置一个启用 TLS 的反向代理:cms.example.org → 端口 3000,back.example.org → 3100,s3.example.org → 9000。这三个主机必须共享 DOMAIN 后缀,因为会话 Cookie 的作用域限定在该域名。
可选变量(未配置时相关功能优雅降级)
在弹窗中打开表格以清晰地查看所有数据
| Variable | Feature |
|---|---|
OPENAI_API_KEY | AI-assisted translation and content audit |
GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET | GitHub OAuth login |
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET | Google OAuth login |
GITLAB_CLIENT_ID, GITLAB_CLIENT_SECRET | GitLab OAuth login |
MICROSOFT_CLIENT_ID, MICROSOFT_CLIENT_SECRET | Microsoft OAuth login |
全局邮件服务
所有事务性邮件,包括非组织级别的系统邮件(如重置密码、免密登录链接等),均通过以下两种全局传输方式之一发送:
- Resend:使用
RESEND_API_KEY。 - SMTP:使用
MAIL_SMTP_*变量。一旦检测到设置了MAIL_SMTP_HOST,系统将优先启用 SMTP 并忽略RESEND_API_KEY。
MAIL_PROVIDER 仅在两者皆已配置时用于强制指定发送通道(例如在配置了 SMTP 的情况下设置 MAIL_PROVIDER=resend 强制保留 Resend)。
在弹窗中打开表格以清晰地查看所有数据
| Variable | Example | Description |
|---|---|---|
MAIL_FROM | Intlayer <no-reply@acme.com> | Sender header for either transport. Accepts a bare address or Name <email> |
MAIL_SMTP_HOST | smtp.acme.com | SMTP host. Setting it selects the SMTP transport |
MAIL_SMTP_PORT | 587 | SMTP port (defaults to 587) |
MAIL_SMTP_SECURE | false | Implicit TLS. Set true for port 465 |
MAIL_SMTP_USER | (your user) | SMTP username (optional; omit for unauthenticated relays) |
MAIL_SMTP_PASSWORD | (your password) | SMTP password |
MAIL_PROVIDER | resend | Optional override: smtp or resend. Leave unset to auto-select |
优先级规则:组织在后台控制面板中独立配置的邮件服务(组织设置页面)拥有最高优先级,其次是此处配置的全局邮件服务,最后是默认的 Resend 密钥。
连接您的 Intlayer 项目
当服务堆栈成功运行后,配置您的前端项目指向自建的后端 API 和控制面板,而非官方的 intlayer.org 云端服务。
项目配置文件
复制代码到剪贴板
import type { IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
editor: {
clientId: process.env.INTLAYER_CLIENT_ID,
clientSecret: process.env.INTLAYER_CLIENT_SECRET,
/**
* URL of the self-hosted CMS dashboard.
* Default: https://app.intlayer.org
*/
cmsURL: process.env.INTLAYER_CMS_URL, // e.g. http://localhost:3000
/**
* URL of the self-hosted backend API.
* Default: https://back.intlayer.org
*/
backendURL: process.env.INTLAYER_BACKEND_URL, // e.g. http://localhost:3100
},
};
export default config;
Set the environment variables in your project's .env:
复制代码到剪贴板
登录您的自建控制面板,在 Projects → Access keys 页面(http://localhost:3000/projects)创建项目的客户端凭证。
@intlayer/api SDK
在代码中通过 SDK 调用 @intlayer/api 时,请显式传入自建后端的 backendURL:
复制代码到剪贴板
限制条件
- 自定义域名需要重新构建。 所有面向浏览器的
VITE_*接口地址均在镜像构建阶段静态固化到了前端代码中,且官方镜像(及桌面应用)默认硬编码了localhost/ Intlayer Cloud 地址。默认情况下,控制面板必须通过http://localhost:3000访问,API 为:3100,MinIO 为:9000;重映射宿主机端口也会导致同样的问题。当您提供域名时,安装程序会为从仓库重新构建准备好一切(参见自定义域名),但构建本身需要几分钟。不支持将桌面应用连接至自建后端。 - 必须配置可用的邮件发送服务。 系统的首次初始化要求必须通过邮件链接完成身份验证,因此在启动前必须配置好
RESEND_API_KEY或 SMTP 中继(MAIL_SMTP_*)。在首个超级管理员成功登录后,各个子组织可以在控制面板中单独配置属于自己的 SMTP 或 Resend 凭证。 - 桌面版应用需要在宿主机上安装 Node.js 运行时以启动其内嵌的本地前端服务。
- 没有文档助手。 intlayer.org 的 AI 文档助手(
/api/ai/ask、/api/search/doc)依赖约 130 MB 预先计算的文档 embeddings,而自托管镜像并未包含这些数据;因此在自托管模式下不会注册这两个路由。控制面板自身的 AI 功能(翻译、审计、自动补全、聊天)不受影响,只需要OPENAI_API_KEY。
相关参考链接
- Intlayer CMS 官方文档
- 项目配置参考指南
- CMS SDK:
@intlayer/api - 桌面客户端最新发布版本
- Docker Hub 镜像:
intlayer/cms-all,intlayer/cms-frontend,intlayer/cms-backend;GHCR 镜像源:ghcr.io/aymericzip/intlayer/ docker/selfhost/:Dockerfile、docker-compose.yml及.env.template配置文件模板
