【问题标题】:Deploy strapi to elastic beanstalk将strapi部署到弹性豆茎
【发布时间】:2020-09-03 00:59:06
【问题描述】:

有人可以提供有关如何将 Strapi 部署到 AWS Elastic Beanstalk 的信息吗?

我找到了很多关于如何在 Digital Ocean 和 Heroku 等许多其他不同平台上部署 Strapi 的资源,但我对将 Strapi 部署到 Elastic Beanstalk 非常好奇。这可能吗?我该怎么做?

【问题讨论】:

    标签: node.js amazon-elastic-beanstalk strapi headless-cms


    【解决方案1】:

    首先,您需要一个运行 Node 版本 12(截至目前)的 EBS 应用程序和环境(Web 服务器)。您还需要在 Strapi 项目中更改 package.json 并更新 engines 部分,如下所示(主版本必须与 EBS 节点版本匹配):

    "engines": {
      "node": "12.X.Y", // minor (X) & patch (Y) versions are up to you
       ...
    },
    

    您必须将您的项目切换为使用 NPM 而不是 Yarn(EBS 目前仅支持开箱即用的 NPM),为此我推荐使用像 synp 这样的工具。 p>

    然后创建一个Procfile,它将描述您希望 EBS 如何运行您的应用程序:

    web: npm run start
    

    然后手动部署,您可以首先(在项目根目录中)运行 npm install,然后运行 ​​npm run build 来构建 Strapi Admin (React) 应用程序。构建 Strapi Admin 后,确保删除 node_modules 文件夹,因为 EBS 会自动为您安装依赖项。 (*)

    最后一步是压缩整个项目(同样,在项目根目录中运行:zip -r application.zip .),将 zip 文件上传到 AWS EBS 并让它发挥作用。希望它应该安装依赖项并自动启动您的应用程序。


    旁注:在您的项目中使用某些特定依赖项时(例如sharp),EBS 可能无法安装您的依赖项,要解决此问题,请添加一个.npmrc 文件到您的项目根目录包含以下内容:

    unsafe-perm=true
    

    附注 #2:您需要在 EBS 配置面板中设置一些环境变量才能让 Strapi 工作(如数据库凭据等)。


    (*) 虽然您可以在您的应用程序中包含 node_modules 并将其压缩并上传到 EBS(这可能有效),但有时压缩 node_modules 可能会破坏一些依赖关系,因此我建议您删除它并让 EBS为您安装依赖项。

    【讨论】:

      【解决方案2】:

      如果您想使用 AWS CodePipeline 从 Strapi 到 Elastic Beanstalk,以下步骤对我有用:

      1. 导航到 Elastic Beanstalk 并使用应用程序的相应节点版本创建一个新应用程序

        • 平台:Node.js
        • 平台分支:Node.js 12 在 64 位 Amazon Linux 2 上运行
        • 平台版本:5.4.6
        • 选择示例应用程序开始(我们将在后面的步骤中将其连接到 AWS CodePipeline)
      2. 在 GitHub 上设置代码存储库(如果尚不存在)

      3. 导航到 AWS CodeBuild 并选择 create build project

        • 在源代码部分连接到您的 Github 存储库

        • 在环境部分选择以下配置

          • 环境图片:管理图片

          • 操作系统:Ubuntu

          • 运行时:标准

          • 图片:aws/codebuild/standard:5.0

          • 角色名称:AWS 将为您创建一个

        • 构建规范

          • 选择“使用构建规范文件” - 我们必须在第 4 步中将 buildspec.yml 文件添加到我们的项目中
        • 保留其他默认设置并继续创建构建项目

      4. 更新您的 Strapi 代码

        • 按照 Richárd Szegh 的建议添加 Procfile、.npmrc,并相应地更新 package.json 文件

        • 为 Elastic Beanstalk 添加 .ebignore 文件

        • 将以下buildspec.yml.ebignore 文件添加到您的项目中

      buildspec.yml

      version: 0.2
      
      phases:
        install:
          runtime-versions:
            nodejs: 12
      
        pre_build:
          commands:
            - npm install
        
        build:
          commands:
            - npm run build
      
        post_build:
          commands:
            - rm -rf node_modules
      
      artifacts:
        files:
          - '**/*'
      

      .ebignore

      # dependencies
      node_modules/
      # repository/project stuff
      .idea/
      .git/
      .gitlab-ci.yml
      README.md
      # misc
      .DS_Store
      # debug
      npm-debug.log*
      yarn-debug.log*
      yarn-error.log*
      # local env files
      .env.local
      .env.development.local
      .env.test.local
      .env.production.local
      # non prod env files
      .env.development
      .env.test
      
      1. 导航到 AWS CodePipeline

        • 点击Create pipeline

        • 流水线设置

          • 管道名称:相应命名
          • 服务角色:新服务角色
          • 角色名称:AWS 将为您创建一个默认名称
        • 源阶段:

          • 在本例中连接到您的存储库 GitHub(版本 2)
          • 连接到 Github
          • 存储库名称:相应地选择存储库
          • 分支名称:相应选择分支
        • 构建阶段:

          • 构建提供者:AWS CodeBuild
          • 区域:选择初始创建 CodeBuild 项目的区域 步骤 3
          • 项目名称:选择您创建的 CodeBuild 项目
          • 环境变量:添加任何环境变量
        • 部署阶段:

          • 部署提供者:AWS Elastic Beanstalk
          • 地区:选择您最初创建 EB 的地区
          • 应用程序名称:选择您在第 1 步中创建的应用程序名称
          • 环境名称:选择您在第 1 步中创建的环境名称
        • 创建管道

      2. 现在您可以将更改推送到存储库,CodePipeline 将获取更改、运行构建并部署到您的 Elastic Beanstalk

      【讨论】:

      • 这个^^。我测试了两次,效果很好!
      • 可能有效 - 但天哪,aws 仍然很复杂?
      【解决方案3】:

      这似乎对我有用,AWS Elastic Beanstalk t3.small 实例,我想使用免费层 t3.micro 但它对我不起作用,似乎 t3.micro 1GB 内存不够,t3.small有 2GB 内存。

      1) 添加部署到脚本 包.json

      "scripts": {
      
          "deploy": "NODE_ENV=production npm run build && NODE_ENV=production npm run start"
        },
      

      创建文件 .npmrc 并添加:

      unsafe-perm=true
      

      创建 Procfile 并添加:

      web: npm run deploy
      
      1. 当我将更新推送到 Bitbucket 时,我使用 AWS Pipeline 触发 EB 部署(如果不用于节省 $$$,我也可以禁用 Pipeline)
      2. 我使用的是 AWS RDS PostgreSQL 免费套餐,最新版本的 PostgreSQL 没有免费套餐版本,但之前的版本确实有免费套餐选项复选框来选择它
      3. 我使用 AWS S3 存储桶来存储图像

      【讨论】:

        猜你喜欢
        • 2018-03-23
        • 2015-03-20
        • 2014-12-22
        • 2016-01-04
        • 2016-02-18
        • 2018-02-25
        • 2019-11-06
        • 2016-01-13
        • 2015-04-02
        相关资源
        最近更新 更多