有人能提供有关如何将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,以下步骤对我有效:
-
导航到Elastic Beanstalk并为应用程序创建一个具有相应Node版本的新应用程序
- 平台:Node.js
- 平台分支:64位Amazon Linux 2上的Node.js 12搞笑
- 平台版本:5.4.6
- 选择要启动的示例应用程序(我们将在稍后的步骤中将其连接到AWS CodePipeline)
-
在GitHub上设置代码库(如果还不存在)
-
导航至AWS CodeBuild并选择
create build project
-
在源代码部分连接到您的Github存储库
-
在"环境"部分中,选择以下配置
-
环境图像:管理图像
-
操作系统:Ubuntu
-
运行时间:标准
-
图像:aws/codebuild/标准:5.0
-
角色名称:AWS将为您创建一个
-
-
建筑规范
- 选择"使用buildspec文件"-在步骤4中,我们必须将buildspec.yml文件添加到我们的项目中
-
保留其他默认设置并继续创建构建项目
-
-
更新您的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
导航到AWS CodePipeline
点击
Create pipeline
管道设置
- 管道名称:相应的名称
- 服务角色:新服务角色
- 角色名称:AWS将为您创建一个默认名称
来源阶段:
- 在本例中连接到您的存储库GitHub(版本2)
- 连接到Github
- 存储库名称:相应地选择存储库
- 分支名称:相应地选择分支
构建阶段:
- 构建提供程序:AWS CodeBuild
- 区域:选择初始创建CodeBuild项目的区域步骤3
- 项目名称:选择您创建的CodeBuild项目
- 环境变量:添加任何环境变量
部署阶段:
- 部署提供商:AWS弹性Beanstalk
- 区域:选择最初创建EB的区域
- 应用程序名称:选择您在步骤1中创建的应用程序名称
- 环境名称:选择您在步骤1中创建的环境名称
创建管道
现在,您可以将更改推送到存储库,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
- 当我向Bitbucket推送更新时,我使用AWS Pipeline触发EB部署(如果不用于节省$$$,我也可以禁用Pipeline)
- 我使用了AWS RDS PostgreSQL免费层,最新版本的PostgreSQL没有免费层版本,但以前的版本确实有免费层选项复选框来选择它
- 我使用AWS S3存储桶来存储图像