将系带展开到有弹性的豆茎上



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

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

首先需要一个EBS应用程序&运行Node版本12(截至目前)的环境(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的工具。

然后创建一个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为您安装依赖关系

如果您想使用AWS CodePipeline在Elastic Beanstalk上部署Strapi,以下步骤对我有效:

  1. 导航到Elastic Beanstalk并为应用程序创建一个具有相应Node版本的新应用程序

    • 平台:Node.js
    • 平台分支:64位Amazon Linux 2上的Node.js 12搞笑
    • 平台版本:5.4.6
    • 选择要启动的示例应用程序(我们将在稍后的步骤中将其连接到AWS CodePipeline)
  2. 在GitHub上设置代码库(如果还不存在)

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

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

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

      • 环境图像:管理图像

      • 操作系统:Ubuntu

      • 运行时间:标准

      • 图像:aws/codebuild/标准:5.0

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

    • 建筑规范

      • 选择"使用buildspec文件"-在步骤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:
- '**/*'

.ebnore

# 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弹性Beanstalk
      • 区域:选择最初创建EB的区域
      • 应用程序名称:选择您在步骤1中创建的应用程序名称
      • 环境名称:选择您在步骤1中创建的环境名称
    • 创建管道

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

这似乎对我有效,AWS Elastic Beanstalk t3.small实例,我想使用Free tier t3.micro,但它对我不起作用,t3.micro1GB内存似乎不够,t3.smal有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存储桶来存储图像

最新更新