ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Wasp 应用部署到 Fly.io 完全指南:手动 fly CLI 与 wasp deploy fly 两种实战方案

Wasp 应用部署到 Fly.io 完全指南:手动 fly CLI 与 wasp deploy fly 两种实战方案 Wasp 应用部署到 Fly.io 完全指南手动 fly CLI 与 wasp deploy fly 两种实战方案【免费下载链接】waspThe batteries-included full-stack framework for the AI era. Develop JS/TS web apps (React, Node.js, and Prisma) using declarative code that abstracts away complex full-stack features like auth, background jobs, RPC, email sending, end-to-end type safety, single-command deployment, and more.项目地址: https://gitcode.com/GitHub_Trending/wa/wasp本篇技术指南聚焦于将 Wasp 全栈应用部署到 Fly.io 平台的完整流程既包括使用wasp deploy fly单命令自动完成客户端、服务端与数据库部署的推荐方案也包括通过flyCLI 手动构建、配置环境变量与数据库的手工部署路线。读完本文你将掌握.wasp/out构建产物、fly.toml配置、JWT_SECRET/WASP_WEB_CLIENT_URL/WASP_SERVER_URL等关键环境变量、数据库 VM 参数调优以及构建后重新部署的注意事项能够独立将 Wasp 应用上线到 Fly.io 生产环境。部署前须知两条路线怎么选Wasp 官方对 Fly.io 部署提供两条路线见 web/docs/guides/deployment/cloud-providers/flyio.md自动部署推荐使用 Wasp DeployWasp CLI 用一条命令自动完成客户端、服务端与数据库的创建和部署适合绝大多数场景手动部署只部署服务端Server并在 Fly.io 上开通数据库Database客户端另行托管到任意静态托管平台文档建议使用 Netlify适合已有存量 Fly.io 应用或需要对 Fly 侧配置有完全掌控的场景。无论哪条路线前提都是你的 Wasp 项目已完成 PostgreSQL 切换。Wasp 默认使用 SQLite 开发而生产环境要求 PostgreSQL——如果你还在使用 SQLitewasp build会直接失败必须先按 迁移指南 切换到 PostgreSQL 再继续部署。另外需要明确的是生产环境下.env.client与.env.server文件会被忽略所有服务端环境变量都必须通过 Fly 的 secrets 机制提供详见 部署环境变量。方案一使用 wasp deploy fly 自动部署推荐Wasp CLI 内置了针对 Fly.io 的部署子命令实现原理见源码 waspc/data/packages/deploy/src/providers/fly/index.ts它通过commander注册了launch、setup、create-db、deploy、cmd五个子命令底层封装flyctl完成所有 Fly 侧操作。一次性启动wasp deploy fly launch前置条件注册 Fly.io 账号安装flyCLI注意Fly 要求添加支付方式后才能部署超过两个应用而 Wasp 部署一次需要三个应用客户端、服务端、数据库。然后执行单条命令完成从创建到部署的全过程wasp deploy fly launch my-wasp-app dfwmy-wasp-app是应用基名必须在整个 Fly 平台唯一否则部署会失败dfw是区域代码达拉斯可运行fly platform regions查看全部可用区域如果你的 Fly 账号属于多个组织还需追加--org org-slug指定组织可用fly orgs list查看组织名。launch内部等价于依次执行setup、create-db、deploy三条命令源码中makeFlyLaunchCommand的描述即为 calls setup, create-db, and deploy。命令运行期间不要 CTRL-C 或关闭终端。部署完成后你的 Fly 控制台会出现三个应用my-wasp-app-client、my-wasp-app-server、my-wasp-app-db同时项目根目录会生成两个新文件fly-server.tomlfly-client.toml这两个文件应当纳入版本控制后续只需执行wasp deploy fly deploy即可增量更新部署。launch 命令的数据库参数launch与create-db都支持一组可选的数据库参数见 web/docs/deployment/deployment-methods/wasp-deploy/_fly-db-options.md参数作用默认值--db-vm-size vmSize数据库 VM 规格决定 CPU 类型、核数与内存shared-cpu-1x--db-vm-memory vmMemoryVM 内存MB由 vm-size 决定--db-vm-cpus vmCpusVM CPU 核数由 vm-size 决定--db-vm-cpu-kind vmCpuKindVM CPU 类型由 vm-size 决定--db-initial-cluster-size n初始集群机器数1--db-volume-size gb数据卷大小GB1--db-image imagePostgreSQL Docker 镜像flyio/postgres-flex:18注意 Fly 只接受特定组合的 CPU 类型、核数与内存手动覆盖--db-vm-cpus或--db-vm-cpu-kind时请选择符合 Fly 机器规格规则的--db-vm-memory值。若你的应用默认内存不够用创建数据库时用--db-vm-memory显式调大即可。从源码 waspc/data/packages/deploy/src/providers/fly/index.ts#L16-L20 可以看到默认镜像flyio/postgres-flex:18是刻意钉死的它保持与 Wasp 开发数据库相同的 PostgreSQL 大版本避免flyctl使用 Fly 服务端默认镜像该默认镜像可能在主版本间被 Fly 升级。如果你的应用需要其他 PostgreSQL 镜像例如要添加 PostGIS、pgvector 等扩展用--db-image docker-image指定但自定义镜像必须兼容 Fly 平台最稳妥的做法是基于官方flyio/postgres-flex镜像二次构建。launch 命令的环境变量launch命令会自动为你的服务端应用配置三组必需环境变量见 web/docs/deployment/deployment-methods/wasp-deploy/_launch-command-env-vars.mdWASP_WEB_CLIENT_URL与WASP_SERVER_URL客户端与服务端互相连接所必需DATABASE_URL服务端连接数据库所必需JWT_SECRET认证功能正常工作的密钥。如果你的应用还需要其他服务端环境变量例如社交登录的 OAuth 密钥可以通过--server-secret选项传入可多次使用wasp deploy fly launch my-wasp-app dfw \ --server-secret GOOGLE_CLIENT_ID... \ --server-secret GOOGLE_CLIENT_SECRET...客户端环境变量即 Wasp 中定义的 客户端 env vars如REACT_APP_*必须在运行部署命令的终端会话中预先注入REACT_APP_ANOTHER_VARsomevalue wasp deploy fly launch my-wasp-app dfw客户端变量在构建时被打包进静态 JS 代码任何人都能读取绝不能在其中存放密钥。而且每次部署都必须重新注入否则构建产物将缺少这些变量。如果希望客户端连接的服务端地址不是默认生成的例如服务端使用自定义域名可追加--custom-server-url选项wasp deploy fly launch my-wasp-app dfw --custom-server-url https://api.myapp.com日常更新wasp deploy fly deploy应用首次通过launch部署后后续每次代码更新只需执行wasp deploy fly deploy该命令会把构建好的客户端与服务端同时推送上线源码中makeFlyDeployCommand还提供了--skip-client与--skip-server选项可分别跳过某一端。同样地客户端环境变量需要每次都传入REACT_APP_ANOTHER_VARsomevalue wasp deploy fly deploy为了避免遗忘官方建议在package.json中固化一个 deploy 脚本{ scripts: { deploy: REACT_APP_ANOTHER_VARsomevalue wasp deploy fly deploy } }之后只需npm run deploy。自由执行 fly 命令wasp deploy fly cmd想对某个上下文客户端或服务端执行任意flyctl命令时使用cmdwasp deploy fly cmd secrets list --context server wasp deploy fly cmd secrets set FOObar --contextserver wasp deploy fly cmd --context client certs create mycoolapp.com--context取值只能是client或server源码中通过ContextOption枚举约束。setup / create-db分步执行setup注册客户端与服务端应用并设置必需环境变量只执行一次不会触发部署。重复执行会在 Fly 上创建多余应用。运行后同样生成fly-server.toml与fly-client.toml。create-db创建数据库并挂载到服务端应用同样只执行一次重复执行会创建多个数据库。Wasp 在deploy时会读取项目根目录的 TOML 文件来驱动部署如果你编辑了这两个文件后续部署会按你的修改执行。要维护多套环境如 dev/staging可用--fly-toml-dir abs-path指向不同目录。真实 TOML 文件长什么样仓库中的示例应用 waspello 已提交了实际生成的配置文件服务端 examples/waspello/fly-server.toml 内容如下app waspello-app-server primary_region cdg [build] [http_service] internal_port 8080 force_https true auto_stop_machines stop auto_start_machines true min_machines_running 1 processes [app] [[vm]] memory 1gb cpu_kind shared cpus 1客户端 examples/waspello/fly-client.toml 结构类似区别在于internal_port 8043且min_machines_running 0客户端为静态站点允许缩容到零。注意internal_port 8080与服务端环境变量PORT8080是配套的Fly 的 HTTP 服务会把外部流量转发到该内部端口服务端进程必须监听同一端口。方案二手动部署服务端与数据库手动路线只部署服务端并在 Fly 上开通数据库客户端另行托管。完整流程记录在 web/docs/guides/deployment/cloud-providers/flyio.md。前置条件创建 Fly.io 账号安装flyCLI登录用fly auth whoami检查登录状态未登录则执行fly auth login。第一步生成可部署代码并创建 Fly 应用先构建 Wasp 应用生成部署产物详见 构建可部署代码wasp build产物输出在.wasp/out/目录包含服务端 Dockerfile、服务端代码与构建好的客户端静态文件。然后进入该目录cd .wasp/out运行 launch 命令创建新应用并生成fly.tomlfly launch --remote-only交互式问答中请注意对Would you like to set up a PostgreSQL database now?回答yes数据库方案选择DevelopmentFly 会自动为你配置DATABASE_URL对Would you like to deploy now?以及后续附加问题回答no——因为还需要先设置若干环境变量。如果 Development 预设的内存不满足需求可以选更大规格的数据库方案参见 Fly 的 VM 规格文档。创建失败怎么办如果创建新应用失败先执行fly apps destroy app-name再重试——Fly 不允许同名应用重复创建。数据库部署成功后在 Fly 控制台即可看到对应的数据库实例。接下来把fly.toml复制回 Wasp 项目目录妥善保存cp fly.toml ../../第二步设置服务端环境变量fly secrets set PORT8080 fly secrets set JWT_SECRETrandom_string_at_least_32_characters_long fly secrets set WASP_WEB_CLIENT_URLurl_of_where_client_will_be_deployed fly secrets set WASP_SERVER_URLurl_of_where_server_will_be_deployedPORT必须与fly.toml中http_service.internal_port一致8080JWT_SECRET至少 32 字符随机串用于 Wasp 认证的 JWT 签名如果暂时不知道客户端地址WASP_WEB_CLIENT_URL可以等客户端部署完成后再设置若使用社交登录如 Google/GitHub OAuth还需把GOOGLE_CLIENT_ID等额外密钥通过同样的fly secrets set命令设置见 web/docs/guides/deployment/cloud-providers/flyio.md 中的外部认证环境变量提醒。使用fly secrets list可核对已设置的 secrets——出于安全考虑显示的是哈希值。第三步部署服务端仍在.wasp/out/目录下执行fly deploy --remote-only --config ../../fly.toml这会远程构建并部署 Wasp 应用的后端到https://app-name.fly.dev。服务端上线后再部署客户端并回填地址fly secrets set WASP_WEB_CLIENT_URLurl_of_deployed_client官方建议客户端使用 Netlify但任何能托管静态文件的平台都可以把.wasp/out/web-app/build/目录内容上传即可该目录含 SPA 回退用的200.html。常用运维命令fly logs # 查看应用日志 fly secrets list # 查看已配置的 secrets fly ssh console # 进入应用容器交互式终端方案三自定义域名基于 wasp deploy fly如果你的应用通过wasp deploy fly部署绑定自定义域名分三步1. 为客户端应用创建证书wasp deploy fly cmd --context client certs create mycoolapp.com命令会输出 DNS 记录指引通常是的 A 记录与 AAAA 记录例如1: Adding an A record to your DNS service which reads A 66.241.1XX.154 2: Adding an AAAA record to your DNS service which reads: AAAA 2a09:82XX:1::1:ff402. 到域名服务商添加对应 DNS 记录A 记录与 AAAA 记录值取上一步输出。3. 为服务端设置客户端 URL保持 CORS 配置正确wasp deploy fly cmd --context server secrets set WASP_WEB_CLIENT_URLhttps://mycoolapp.com完成后应用即可通过https://mycoolapp.com访问。如需www子域名再为www.mycoolapp.com创建证书并添加一条 CNAME 记录TypeNameValueTTLCNAMEwwwmycoolapp.com3600CORS 提醒同时使用www与non-www域名需要为服务端提供自定义 CORS 配置允许来自两个域名的请求。构建后重新部署手动方案的关键坑wasp build每次都会清空并重建.wasp/out/目录因此里面保存的fly.toml会丢失。官方给出三种应对方式把fly.toml复制到版本化目录如 Wasp 项目根目录之后用fly deploy --config path显式指定配置文件在每次wasp build前备份fly.toml构建后再复制回.wasp/out/——这样部署时无需--config参数用fly config save -a app-name从 Fly 远程状态重新生成fly.toml。这也是手动方案相比wasp deploy fly的明显劣势CLI 方案会把fly-server.toml/fly-client.toml生成在项目根目录并建议提交进版本控制天然规避了构建目录被清空的问题。集成 CI/CD 自动重部署应用首次通过wasp deploy fly launch部署成功后就可以把wasp deploy fly deploy放进 CI/CD 流程实现每次提交自动更新线上版本详见 CI/CD 部署。以 GitHub Actions 为例需要先生成 Fly 组织级令牌fly tokens create org并存入仓库 secrets 为FLY_API_TOKEN工作流大致为checkout 代码 → 安装 Node.js 与 Wasp CLI → 执行wasp deploy fly deploy。注意在 CI 中同样需要为构建注入客户端环境变量。小结两种方案的取舍wasp deploy fly推荐一条命令搞定客户端、服务端、数据库三件套自动配置WASP_WEB_CLIENT_URL、WASP_SERVER_URL、DATABASE_URL、JWT_SECRETTOML 文件由 Wasp 管理并建议入库重部署体验顺滑支持数据库参数调优、自定义镜像、多组织、CI/CD。手动flyCLI适合已有 Fly 应用或需要精细控制fly.toml的场景只需fly launch 若干fly secrets setfly deploy即可上线服务端与数据库客户端可自由选择静态托管代价是需要自己维护fly.toml并在每次wasp build后处理配置文件的保存问题。无论选择哪条路线核心环境变量PORT、JWT_SECRET、WASP_WEB_CLIENT_URL、WASP_SERVER_URL、DATABASE_URL都是生产环境服务的生命线务必确保它们与fly.toml的端口配置、客户端实际地址一一对应。【免费下载链接】waspThe batteries-included full-stack framework for the AI era. Develop JS/TS web apps (React, Node.js, and Prisma) using declarative code that abstracts away complex full-stack features like auth, background jobs, RPC, email sending, end-to-end type safety, single-command deployment, and more.项目地址: https://gitcode.com/GitHub_Trending/wa/wasp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表