React Boilerplate 部署实战指南:Heroku、AWS S3、子目录与 Elastic Beanstalk 全流程
React Boilerplate 部署实战指南Heroku、AWS S3、子目录与 Elastic Beanstalk 全流程【免费下载链接】react-boilerplate A highly scalable, offline-first foundation with the best developer experience and a focus on performance and best practices.项目地址: https://gitcode.com/gh_mirrors/rea/react-boilerplate本篇部署指南以 React Boilerplatedocs/general/deployment.md为核心骨架系统讲解将生产构建产物发布到 Heroku、AWS S3、现有服务器子目录以及 AWS Elastic Beanstalk 的完整流程。文章不仅复现每一步可复制的命令与配置文件还结合仓库源码webpack 构建配置、Express 生产中间件、npm scripts说明每条指令背后的运行原理帮助读者在理解构建-托管链路的基础上独立完成任意一种生产部署。部署前的准备理解构建产物与生产启动命令在进入各平台部署之前需要先理解 React Boilerplate 生产环境的两条核心链路生产构建与生产启动它们是所有部署方案共同依赖的基础。生产构建由 package.json 中的build脚本驱动build: cross-env NODE_ENVproduction webpack --config internals/webpack/webpack.prod.babel.js --color -p --progress --hide-modules --display-optimization-bailout该命令会调用 internals/webpack/webpack.prod.babel.js以 internals/webpack/webpack.base.babel.js 为公共配置进行生产打包。产物默认输出到仓库根目录下的./build文件夹build:clean脚本会先清理旧产物并额外产出 gzip 压缩包与离线缓存相关的 Service Worker 文件offline-plugin与compression-webpack-plugin详见 webpack.prod.babel.js。生产启动由start:prod脚本驱动start:prod: cross-env NODE_ENVproduction node server它启动 server/index.js 中的 Express 服务。在NODE_ENVproduction时server/middlewares/frontendMiddleware.js 会加载addProdMiddlewaresserver/middlewares/addProdMiddlewares.js其核心逻辑包括使用compression()对响应做 gzip 压缩通过express.static(outputPath)以publicPath默认/对外提供./build目录下的静态资源对任意未被静态资源匹配的路由回退返回index.html保证前端路由react-router在刷新页面时也能正确加载。默认监听端口由 server/port.js 决定优先取命令行--port参数其次取环境变量PORT最后回退到3000。理解了这两条链路下面各平台的部署步骤就一目了然平台只负责托管构建产物或运行生产服务。Heroku三步完成部署Heroku 是一个托管 PaaS 平台它直接运行 Node.js 服务进程因此部署 React Boilerplate 的核心是让 Heroku 执行start:prod而非默认的start。第 1 步创建 Procfile在项目根目录创建名为Procfile的文件写入web: npm run start:prod原因Heroku 默认以npm run start作为 Node.js 应用的启动命令而start脚本运行的是开发模式cross-env NODE_ENVdevelopment node server。必须通过 Procfile 覆盖默认启动命令让 Heroku 以NODE_ENVproduction启动生产服务。第 2 步安装 Node.js buildpack为你的 Heroku 应用设置 Node.js buildpackheroku buildpacks:set https://github.com/heroku/heroku-buildpack-nodejs#v133 -a [your app name]其中#v133是 buildpack 版本标签请务必替换为当时最新的 buildpack 版本以官方 releases 页发布的最新版本为准。buildpack 负责在 Heroku 上安装 Node.js 与 npm 依赖npm install然后执行Procfile中声明的命令。第 3 步标准 Git 推送流程git add . git commit -m Made some epic changes as per usual git push heroku mastergit push heroku master会触发 Heroku 构建拉取代码 → 安装依赖 → 运行 buildpack 钩子。由于start:prod在启动时才执行node server而生产静态资源依赖npm run build生成的./build目录——如果构建目录未提交到仓库建议在package.json中补充postinstall钩子如postinstall: npm run build让平台在安装依赖后自动构建或确保./build产物已纳入版本控制。这一点在不同平台的构建行为上略有差异需要结合自身 CI/CD 策略确认。AWS S3七步完成静态托管S3 只负责托管静态文件不运行 Node.js 进程。因此 S3 方案的核心是在本地构建出./build目录再把它作为静态网站整体上传。第 1 步本地构建npm install npm run build执行后会在项目根目录生成./build文件夹。注意 webpack.base.babel.js 中的默认输出配置output: Object.assign( { // Compile into js/build.js path: path.resolve(process.cwd(), build), publicPath: /, }, options.output, ),即产物输出到./build资源引用路径以站点根目录/为基准。publicPath为/意味着所有 JS/CSS 资源都以绝对路径引用因此必须配合根路径访问直接通过 S3 静态网站端点访问或绑定自定义域名才能正确加载资源——这也正是下文子目录部署需要显式修改publicPath的原因。第 2 步创建 S3 Bucket登录 AWS 控制台在Services下拉菜单中选择S3进入 S3 服务。第 3 步创建存储桶点击Create Bucket填写Bucket Name全局唯一与Region区域美国地区官方文档推荐US Standard即us-east-1。点击Create完成创建。第 4 步开放公共读权限选中刚创建的 Bucket在右侧Properties选项卡下打开Permissions手风琴。点击Add more permissions将Grantee设为Everyone或任何需要访问网站的主体授予View Permissions读权限点击Save。只有公开可读静态网站端点才能向匿名访客提供页面内容。第 5 步开启静态网站托管打开Static Website Hosting手风琴这里会显示网站的 URLendpoint形如example.s3-website-us-east-1.amazonaws.com。点击Enable website hosting在Index document与Error document两个输入框中都填写index.html点击Save。说明SPA 应用没有真正的404 页面Error document同样指向index.html是为了让前端路由如/about在直接访问或刷新时能回退到应用入口由 react-router 接管后续渲染——这与生产中间件中app.get(*, ...)回退返回index.html的原理一致addProdMiddlewares.js。第 6 步上传构建产物并设为公开在 Bucket 列表左侧点击该 Bucket 进入点击Upload选择./build文件夹内的所有文件点击Start Upload。上传完成后全选文件右键或点击Actions按钮选择Make Public将全部对象设为公开可读。第 7 步验证访问点击Properties选项卡打开Static Website Hosting点击其中的Endpoint链接。应用即应运行在该 URL 上。注意S3 静态网站端点不支持 HTTP 强制跳转 HTTPS如需 HTTPS 与自定义域名可配合 CloudFront CDN 分发为 Bucket 配置源站并在 Route 53 中绑定域名与证书。此为 S3 托管的最佳实践补充官方文档亦推荐此路线。部署到已有服务器的子目录如果你想把应用部署在已有服务器Apache / NGINX的一个子路径下例如用户通过https://host/web-app访问应用则需要让前端构建与路由同时感知该子路径。文档说明这一方案已在 APACHE 与 NGINX 服务器上验证通过。整个改动分为四步。第 1 步让 webpack 注入环境变量修改 internals/webpack/webpack.base.babel.js在文件顶部引入两个可被环境变量覆盖的常量 const BUILD_FOLDER_PATH process.env.BUILD_FOLDER_PATH || build; const PUBLIC_PATH process.env.PUBLIC_PATH || /;然后将output配置中的默认值替换为上述常量- path: path.resolve(process.cwd(), build), - publicPath: /, path: path.resolve(process.cwd(), BUILD_FOLDER_PATH), publicPath: PUBLIC_PATH,最后在文件底部的EnvironmentPlugin中注入默认值webpack.base.babel.js 中现有插件为NODE_ENV在此追加# inside EnvironmentPlugin PUBLIC_PATH: /,原理webpack.EnvironmentPlugin会把process.env.PUBLIC_PATH的值在编译期注入到前端代码中NODE_ENV即是现有用法webpack.base.babel.js。这样构建时若设置了PUBLIC_PATH/web-app/所有资源引用的绝对路径前缀就会自动变为/web-app/同时process.env.PUBLIC_PATH在浏览器端代码里也能被正确替换。第 2 步为路由 history 添加 basename修改 app/utils/history.js将createBrowserHistory的调用改为传入 basename- const history createHistory(); const basename process.env.PUBLIC_PATH; const history createHistory({ basename });仓库中 app/utils/history.js 当前实现为import { createBrowserHistory } from history; const history createBrowserHistory(); export default history;原理浏览器 History API 没有子目录概念路由路径/web-app/about中的/web-app只是前缀。history库的basename选项会在匹配路由时剥离该前缀使应用内部仍然只感知/about同时PUBLIC_PATH由 webpack 在构建期替换为真实值如/web-app/从而让 history 与静态资源前缀保持一致。第 3 步构建到指定子目录PUBLIC_PATH/web-app/ BUILD_FOLDER_PATHbuild/web-app npm run build执行后生产构建产物会输出到./build/web-app目录且所有资源引用与路由 basename 都以/web-app/为前缀。注意PUBLIC_PATH末尾的斜杠是必须的/web-app/而非/web-app否则拼接出的资源路径会出错。第 4 步上传到服务器 web-root将生成的web-app文件夹整体上传/放置到服务器的 web-root 目录下最终端点即为https://host/web-app服务器侧要求Apache / NGINX 需允许对该子目录的目录访问如 Apache 的AllowOverride与静态文件访问配置。由于 SPA 路由回退仍需index.html建议同时配置子目录下的重写规则如 Apache 的RewriteRule或 NGINX 的try_files ... /index.html避免直接访问/web-app/about时返回 404。AWS Elastic BeanstalkElastic Beanstalk 方案的核心思路与 Heroku 类似——平台运行 Node.js 进程因此关键在于让平台以生产模式启动。完整背景可参考仓库维护者整理的 issue #2566原文链接见 deployment.md。前置条件创建 AWS 账号并登录 AWS 控制台安装 EB CLI官方文档提供 CLI-only 安装方式配置 AWS EB Profile若使用持续部署工具可为 CD 工具单独创建一个用户通过 CLI 或 Web 控制台创建 Elastic Beanstalk 的 Application 与 Environment配置 EB CLI正确配置后本地应存在.elasticbeanstalk/config.yml文件。配置步骤第 1 步在 package.json 中添加 AWS EB 启动脚本aws-eb:prod: npm run build npm run start:prod该脚本先在平台实例上执行生产构建再以生产模式启动服务。第 2 步创建.ebextensions/aws.config文件# 详见 react-boilerplate issue #2566 option_settings: aws:elasticbeanstalk:container:nodejs: NodeCommand: npm run aws-eb:prod aws:elasticbeanstalk:application:environment: NPM_USE_PRODUCTION: false说明NodeCommand覆盖 EB 平台默认的 Node 启动命令指向aws-eb:prodNPM_USE_PRODUCTION: false让平台安装全部依赖含 devDependencies因为生产构建webpack、babel 等都在构建期运行需要 devDependencies 中的构建工具链。多环境注意如果存在多个环境如 staging / production建议移除.ebextensions中的NodeCommand条目改为在每个环境的 Web 控制台手动配置Configuration Software Node command以避免各环境共用同一命令配置。第 3 步创建.npmrc文件# 详见 react-boilerplate issue #2566 unsafe-permtrue说明部分 npm 生命周期脚本如 postinstall在以 root 用户运行时可能因权限问题被跳过unsafe-permtrue允许 npm 以当前用户而非降权后的 nobody执行脚本确保依赖安装阶段的生命周期钩子正常执行。第 4 步提交改动并通过 EB CLI 部署git add -A git commit -m Configure Elastic Beanstalk deployment eb deploy {target environment name}eb deploy会打包当前目录代码并上传到指定环境平台按.ebextensions配置执行构建与启动。部署方案对比与选择建议平台运行方式核心改动适用场景Heroku运行 Node 服务start:prod添加Procfile、设置 buildpack需要服务端能力API、SSR、快速起步的 PaaS 托管AWS S3纯静态托管构建./build并上传、开启静态网站托管纯前端 SPA、低成本静态托管可配合 CloudFront已有服务器子目录由 Apache/NGINX 托管静态文件修改 webpackpublicPath/BUILD_FOLDER_PATHhistory 加basename已有服务器、需要挂在既有域名子路径下AWS Elastic Beanstalk运行 Node 服务aws-eb:prod添加 npm script、.ebextensions、.npmrc需要 AWS 生态内可弹性伸缩的 Node 托管无论选择哪种方案底层都依赖两条链路npm run build产出的./build静态资源含 gzip 压缩包与离线缓存文件以及npm run start:prod启动的 Express 生产服务server/index.js addProdMiddlewares.js。理解这一点后遇到任何部署问题都可以回到构建产物与生产中间件两个层面排查。延伸阅读部署与服务器配置的相关背景可参考 docs/general/README.md其中列出 Deployment 为目前 Heroku AWS 相关的部署指南以及 docs/general/server-configs.md常用的开发/测试命令一览见 docs/general/commands.md。【免费下载链接】react-boilerplate A highly scalable, offline-first foundation with the best developer experience and a focus on performance and best practices.项目地址: https://gitcode.com/gh_mirrors/rea/react-boilerplate创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

ComfyUI模型目录全解析:checkpoints、LoRA、ControlNet放哪才对

ComfyUI模型目录全解析:checkpoints、LoRA、ControlNet放哪才对

如果你下载了模型放进 ComfyUI 却看不到它,大概率不是模型坏了,而是放进了一个它不知道的文件夹。ComfyUI 不像某些工具那么“随和”,它给模型文件划好了各自的格子,checkpoints、vae、loras、controlnet 各归各的位置&#xff0c…

2026/9/19 12:06:26 阅读更多 →
HEC-HMS安装配置全攻略:从Java环境到跑通示例项目

HEC-HMS安装配置全攻略:从Java环境到跑通示例项目

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 12:06:26 阅读更多 →
QGroundControl 8.15.0定制与PX4/Gazebo仿真联调实战指南

QGroundControl 8.15.0定制与PX4/Gazebo仿真联调实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 12:06:26 阅读更多 →

最新新闻

OpenCode 启动被 Health Guard 拦下:CFG-010 占位符 Key 改到 TaoToken 通道

OpenCode 启动被 Health Guard 拦下:CFG-010 占位符 Key 改到 TaoToken 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 13:08:53 阅读更多 →
TiXL Time Clip 时间重映射全算子一致性评估:从视频剪辑播放、Slip/Stretch 到帧精确导出的完整验证指南

TiXL Time Clip 时间重映射全算子一致性评估:从视频剪辑播放、Slip/Stretch 到帧精确导出的完整验证指南

TiXL Time Clip 时间重映射全算子一致性评估:从视频剪辑播放、Slip/Stretch 到帧精确导出的完整验证指南 【免费下载链接】t3 TiXL is an open source software to create realtime motion graphics. 项目地址: https://gitcode.com/GitHub_Trending/t3/t3 导…

2026/9/19 13:08:53 阅读更多 →
MILP-TD3融合方法:用户侧储能实时调度与优化策略解析

MILP-TD3融合方法:用户侧储能实时调度与优化策略解析

简介:资源围绕基于MILP-TD3的用户侧储能系统优化运行展开,面向具备编程基础、关注储能调度与深度强化学习结合的科研人员和工程师,重点解决深度强化学习在储能控制中难以严格满足运行约束的问题,适用于实时调度策略设计、MILP与TD…

2026/9/19 13:08:53 阅读更多 →
Taro Radio 与 RadioGroup 单选组件深度解析:API、源码实现与跨端实践

Taro Radio 与 RadioGroup 单选组件深度解析:API、源码实现与跨端实践

Taro Radio 与 RadioGroup 单选组件深度解析:API、源码实现与跨端实践 【免费下载链接】taro 开放式跨端跨框架解决方案,支持使用 React/Vue/Nerv 等框架来开发微信/京东/百度/支付宝/字节跳动/ QQ 小程序/H5/React Native 等应用。 https://taro.zone/ …

2026/9/19 13:08:53 阅读更多 →
Agent Fellow 属于什么项目,能给 AI Agent 创业者带来哪些技术、商业层面支持?

Agent Fellow 属于什么项目,能给 AI Agent 创业者带来哪些技术、商业层面支持?

先分清项目主体,再看懂亚马逊云科技的创业赋能路径很多AI Agent创业者都会问到“Agent Fellow”相关扶持问题,首先明确核心事实:目前亚马逊云科技官方网站、“一人公司”全球创业复兴项目的所有公开资料里,没有名为“Agent Fellow…

2026/9/19 13:08:53 阅读更多 →
企业架构治理落地指南:四层模型、流程优化与RACI实践

企业架构治理落地指南:四层模型、流程优化与RACI实践

简介:一套关于EA企业架构治理规划方法论的完整PPT讲解资料,面向企业架构师、IT治理负责人、CIO及数字化转型项目成员,用于解决企业架构与业务战略对齐、IT投资回报不高、架构治理缺乏体系化等问题。资源包仅包含1个pptx演示文稿,压…

2026/9/19 13:07:53 阅读更多 →

日新闻

BP神经网络时序预测:滑窗长度与多窗口平均策略

BP神经网络时序预测:滑窗长度与多窗口平均策略

简介:面向机器学习、深度学习与数据建模学习者的一份完整研究文献,聚焦BP神经网络在农业产量预测中的应用。文档以1980—2018年全国棉花产量为样本,系统讲解数据归一化处理、激活函数原理、多层神经网络结构搭建及训练流程,展示敏…

2026/9/19 0:00:30 阅读更多 →
Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

上个月调一个Deformable DETR模型,在单卡上要跑将近两天。第二天早上我下意识打开终端翻日志,发现loss从凌晨两点就开始往上爬,一路从0.8涨到1.35,整整六个小时没人发现。那六个小时的训练不仅白跑,还霸占着卡——等于…

2026/9/19 0:00:30 阅读更多 →
OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南 【免费下载链接】opencloud 🌤️ OpenCloud is the open source platform for file management, sharing and collaboration. Simple and sovereign. 项目地址: htt…

2026/9/19 0:00:30 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/19 3:59:36 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/19 3:53:08 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/19 4:02:43 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/15 21:39:18 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →