如何导出并自托管 AI 搭建的应用
要自托管一个 AI 搭建的应用,先把代码导出来(下载或同步到你自己拥有的 GitHub 仓库),然后把应用的密钥重新配置为环境变量,迁移或重建它的数据库,最后部署到与应用类型相匹配的托管平台:纯前端用静态托管,任何包含后端的应用则使用能运行服务器或容器的平台。代码通常是最简单的部分,真正的工作在于数据、密钥,以及搭建工具在背后默默为你运行的那些服务。
为什么要导出
把代码带走有一些很好的理由,也有一些不那么好的理由。
好的理由:
- 所有权与保险。 在你自己的仓库中保留一份代码副本,即使搭建工具改变了定价、功能或条款,你也有所保障。
- 交接给开发者。 工程团队会希望代码位于 Git 中,并接入他们惯用的工具和审查流程。
- 特定需求。 数据驻留、指定的云服务商、公司的安全政策,或搭建工具不提供的基础设施。
- 规模或成本。 当规模大到自建基础设施确实划算时。
**不那么好的理由:**为了每月省下一小笔费用,就迁移一个只有几个用户的小应用。自托管会把工作转移到你身上:更新、备份、监控、安全补丁。这可能是正确的取舍,只是要清楚地知道自己在做这个决定。
一个明智的折中方案是:继续在现有平台上构建和托管,但**从一开始就同步到你自己的 GitHub 仓库。**这样你既获得了保险,又无需承担运维工作。如果你还不熟悉 Git,可以先阅读什么是 GitHub。
导出内容包含什么,不包含什么
在依赖导出内容之前,先打开看看。通常情况如下:
| 包含 | 通常不包含 |
|---|---|
| 源代码(前端、后端) | 密钥的值(API 密钥、密码) |
配置文件(package.json、Dockerfile、构建配置) | 已安装的依赖(node_modules 等)——它们会被重新安装 |
| 数据库结构和迁移文件(如果应用使用了这些) | 数据库中的实际数据 |
| 项目中的静态资源 | 用户上传到独立存储中的文件 |
| 由搭建平台托管的服务:托管服务、域名、数据库服务器、文件存储 |
密钥被有意排除在外——你可能会通过邮件发送或提交的压缩包,绝不应包含有效密钥。依赖之所以被排除,是因为它们会根据锁文件重新构建。
第一步:导出代码
两种常见的途径:
- 下载压缩包:快速,适合一次性迁移或备份。
- 同步到 GitHub:更适合长期维护的项目,包含完整历史记录,可以轻松克隆到任何地方,而且大多数托管平台都会在每次推送时直接从 GitHub 仓库部署。
无论采用哪种方式,都要在电脑(或云端开发环境)上解压或克隆,并查找 README 文件。如果没有,在离开搭建平台之前,请让平台中的 AI 为你编写一份:
为在本平台之外运行此项目编写一份 README:所用技术栈、所需的运行时版本、安装和构建命令、启动命令和端口、代码读取的每个环境变量(只写名称和用途,不写值),以及如何运行数据库迁移。
这一条提示词能节省数小时,因为它会把那些隐含在设置中的部分明确写下来。
第二步:先在本地运行
在部署到任何地方之前,先证明应用能够独立运行:
- 安装 README 中指定的运行时,如 Node.js、Python、Java 或 .NET,并使用匹配的版本。
- 安装依赖(
npm install、pnpm install、pip install -r requirements.txt或等效命令)。 - 创建本地
.env文件,填入环境变量,并尽量使用测试密钥。不要把它提交到 Git。什么是环境变量和密钥对这一概念做了解释。 - 连接数据库:本地 Postgres,或托管服务商提供的免费开发数据库。
- 运行迁移,然后启动应用,点击主要流程进行测试。
在这里出现的任何问题,部署到托管平台后同样会出现,而且在自己的机器上调试要容易得多。常见的意外情况包括:硬编码的搭建平台预览地址、搭建平台自动注入但你漏掉的环境变量,或者只存在于该平台上的服务(如文件存储、图片缩放)。
第三步:迁移数据
如果应用有真实用户,数据比代码更重要。
- **导出数据库。**对于 Postgres,
pg_dump会生成一个文件,可以通过pg_restore或psql恢复到新数据库中。如果你没有直接访问权限,可以让搭建平台的 AI 执行导出,并解释它生成了什么。 - **迁移上传的文件。**如果用户上传过图片或文档,这些文件保存在与数据库分开的对象存储中。把它们复制到你的新存储中(例如兼容 S3 的存储桶),如果已保存的 URL 中包含旧主机地址,还需要更新这些 URL。
- **规划切换过程。**对于正在运行的应用,简单的做法是设置一个短暂的维护窗口:停止写入,进行最后一次导出,在新主机上恢复,切换 DNS,然后重新开放服务。先把每一步写下来。
- **在正式迁移前测试恢复。**先将数据恢复到一个临时数据库中进行测试。
如果你对 Postgres 不熟悉,可以参阅什么是 Postgres了解基础知识。
第四步:选择托管平台
托管平台应与应用的类型相匹配。以下名称是截至 2026 年 9 月各类别中知名服务商的示例,并非排名;请到其官网查看最新的功能和价格。
| 应用类型 | 所需条件 | 示例平台 |
|---|---|---|
| 静态站点或单页应用(仅含 HTML、CSS、JS) | 带 CDN 的文件托管 | Netlify、Vercel、Cloudflare Pages、GitHub Pages |
| 全栈框架(Next.js 等) | 服务器或无服务器函数 | Vercel、Netlify、Render、Railway |
| API 或后端(Node、Python、Java、C#) | 常驻或可缩放至零的服务器 | Render、Railway、Fly.io、云容器服务 |
| 任何带 Dockerfile 的应用 | 容器运行时 | Fly.io、Render、Railway、AWS、Google Cloud、Azure |
| 完全掌控 | 你自己管理的虚拟服务器 | DigitalOcean、Hetzner、Linode 或任何云虚拟机 |
你还需要:
- **托管数据库。**许多应用托管平台提供 Postgres,Neon 或 Supabase 等专用服务也单独提供。使用托管数据库是值得的:备份和更新由别人负责。
- 对象存储,用于应用中的上传功能(如果有的话)。
- 邮件发送、支付和 AI 服务商——这些通常只需要在新主机上设置相同的 API 密钥即可。
客观地看待其中的取舍:平台托管(前四行)设置和维护更快捷,但你的掌控力较弱,费用可能会随流量增长。虚拟服务器在流量稳定时通常更便宜,而且完全由你掌控,但补丁、TLS、备份、监控和故障恢复都要由你自己负责。如果团队中没有人愿意承担这些工作,就选择平台托管。关于托管的基础知识,请参阅什么是网站托管。
第五步:部署并切换
- 将代码仓库连接到托管平台,或推送容器镜像。
- 在托管平台的控制台中设置环境变量——README 中列出的每一个变量都要填入真实的值。
- 设置构建和启动命令以及端口。许多平台通过
PORT环境变量传递端口;应用应当监听该端口,并监听所有网络接口(0.0.0.0),而不只是localhost。 - 在新数据库上运行迁移。
- 在修改 DNS 之前,先通过托管平台提供的临时地址进行测试。
- 更新指向旧地址的外部服务:支付 Webhook、登录所用的 OAuth 回调地址、邮件中的链接、允许的来源。
- 迁移域名:将 DNS 记录更新为新主机。如何连接自定义域名说明了这些记录的设置方法。
- 短暂保留旧的部署,直到你确认一切正常,然后再下线。
第六步是最容易被忘记的:迁移后登录或支付悄无声息地失败,通常都是因为回调地址仍指向旧主机。
第六步:接管运维
一旦实现自托管,搭建平台原本处理的事务就都由你负责了。至少需要:经过恢复测试的自动数据库备份、错误追踪、可用性告警、依赖更新,以及记录每个账户的访问人员。如何把 AI 原型推进到生产环境对这份清单有更详细的说明。
导出检查清单
- 代码位于你自己拥有的仓库中,并有涵盖运行、构建和环境变量的 README
- 应用能从一个干净的克隆在本地运行
- 数据库已导出并测试过恢复;上传的文件已复制
- 已根据应用类型选定托管平台,并配备托管数据库和存储
- 新主机上所有环境变量都已填入真实的值
- Webhook、OAuth 重定向和邮件链接已更新
- DNS 已切换,旧部署短暂保留后已移除
- 备份、监控和访问名单已就位
从 Mythex 导出
在 Mythex 中,你所构建的代码归你所有。在 Pro 套餐中,你可以在 项目设置 → 导出 中将项目下载为压缩包,也可以连接 GitHub,与你自己的仓库进行推送和拉取;免费套餐只能以只读方式查看代码,无法导出或同步。导出内容不包含密钥和 node_modules,因此请在新主机上重新配置密钥。相关步骤可参阅导出并在其他地方运行以及GitHub、导出与导入。你也可以继续使用 Mythex 托管,把 GitHub 同步仅用作自己的代码副本和交接途径;如果你决定迁移,请在新主机上线后再下线 Mythex 上的应用。
常见问题
我能从 AI 应用搭建工具中导出代码吗?
这取决于工具和套餐。有些工具允许你下载完整项目,或将其同步到你自己拥有的 GitHub 仓库;另一些则把应用保留在它们的平台内。在投入几个月时间之前先确认一下,并仔细阅读导出内容中包含和不包含哪些东西。
导出内容会包含我的数据库和 API 密钥吗?
通常只导出代码,不包含数据和密钥。密钥一般是有意排除的,而数据库内容需要单独导出,例如 Postgres 的 pg_dump。在切换托管平台之前,两者都要提前规划。
导出的应用应该托管在哪里?
静态前端很适合放在 Netlify、Vercel 或 Cloudflare Pages 等静态托管平台上。拥有自身服务器的应用则需要能运行代码或容器的平台,例如 Render、Railway 或 Fly.io,或者你自己管理的虚拟服务器。如果应用包含数据库,你还需要一个托管数据库。
自托管比继续留在搭建工具上更便宜吗?
在规模较大时有时确实更便宜。对于小型应用,如果把数据库、邮件、监控以及你自己投入的维护时间都算进去,差距通常不大。迁移应当是为了掌控权或特定需求,而不仅仅是为了每月省下几美元。