You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS部署本地运行的Express后端?全栈项目整合部署遇阻

解决AWS Amplify前端与Node.js后端整合的部署方案

方案一:用AWS Amplify直接托管后端(和前端同环境,整合最顺畅)

既然前端已经在Amplify跑起来,直接用Amplify的构建流程把后端也部署进去,步骤如下:

  1. 修改amplify.yml配置,让Amplify同时构建前端和后端,同时配置反向代理让前端请求转发到后端:

    version: 1
    frontend:
      phases:
        preBuild:
          commands:
            - cd frontend/react-stuff
            - npm install
        build:
          commands:
            - npm run build
      artifacts:
        baseDirectory: build
        files:
          - '**/*'
      cache:
        paths:
          - frontend/react-stuff/node_modules/**/*
      rewrites:
        # 把前端/api开头的请求转发到后端
        - source: /api/**
          target: /backend/server.js
          status: 200
    backend:
      phases:
        preBuild:
          commands:
            - cd backend
            - npm install --production # 只安装生产依赖,减小体积
        build:
          commands:
            - echo "Backend dependencies installed successfully"
      artifacts:
        baseDirectory: backend
        files:
          - '**/*'
      cache:
        paths:
          - backend/node_modules/**/*
    
  2. 调整后端代码的端口配置:
    在server.js里把监听端口改成动态读取环境变量,适配云端分配的端口:

    const PORT = process.env.PORT || 3001;
    app.listen(PORT, () => {
      console.log(`Server running on port ${PORT}`);
    });
    
  3. 提交修改并重新部署:把修改后的amplify.yml和server.js推送到仓库,Amplify会自动重新构建并部署前后端。

方案二:解决Lambda部署包过大问题(坚持用Lambda的话)

Lambda部署包压缩后上限为50MB,你的后端超10MB可通过以下方式优化:

  1. 清理冗余文件和依赖:

    • 进入backend目录,执行npm prune --production删除开发依赖
    • 不要把mike_prompt.txt、本地.env文件打包,云端用Lambda环境变量配置这些内容
    • 删除node_modules里的文档、测试用例等非必要文件
  2. 用Lambda层分离大依赖:

    • 把express、mongoose这类体积大的公共依赖单独打包成Lambda层,部署包只保留业务代码(server.js等)
    • 创建Lambda层步骤:
      1. 新建nodejs文件夹,执行npm init -y后安装所需依赖(如npm install express)
      2. 把该文件夹压缩成zip,上传到Lambda层
      3. 在Lambda函数中关联这个层,即可直接使用依赖
  3. 打包部署代码:

    • 把server.js、package.json、package-lock.json打包成zip(不包含node_modules)
    • 上传到Lambda,配置运行时为Node.js,若对接API Gateway,需用Lambda Proxy集成适配请求格式

方案三:用Elastic Beanstalk部署后端(适合需要完整Node.js环境的场景)

如果后端需要持久化、自定义端口等灵活配置,可选择Elastic Beanstalk:

  1. 准备后端代码:

    • 单独提取backend目录,确保package.json的start命令为node server.js
    • 删除本地node_modules,云端会自动安装依赖
  2. 创建Elastic Beanstalk应用:

    • 登录AWS控制台进入Elastic Beanstalk,创建新应用并选择Node.js平台
    • 上传后端代码的zip包,平台会自动配置服务器、安装依赖并启动服务
  3. 配置环境变量:

    • 在Elastic Beanstalk环境配置中,添加原.env文件的所有变量,保持键名一致
  4. 前端对接:

    • 把前端API请求地址改为Elastic Beanstalk分配的域名,或用Route 53将前后端绑定到同一域名下

关键注意事项(保证云端与本地一致)

  • 环境变量统一:本地用.env文件,云端用对应服务的环境变量配置,变量名完全匹配
  • 依赖版本锁定:提交package-lock.json到仓库,确保云端安装的依赖版本与本地一致
  • 端口适配:后端代码不要硬写固定端口,用process.env.PORT读取云端分配的端口

内容的提问来源于stack exchange,提问作者Michael Ani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 09:38:14