有人可以提供有关如何将 Strapi 部署到 AWS Elastic Beanstalk 的信息吗?
我找到了很多关于如何在 Digital Ocean 和 Heroku 等许多其他不同平台上部署 Strapi 的资源,但我对将 Strapi 部署到 Elastic Beanstalk 非常好奇。这可能吗?我该怎么做?
有人可以提供有关如何将 Strapi 部署到 AWS Elastic Beanstalk 的信息吗?
我找到了很多关于如何在 Digital Ocean 和 Heroku 等许多其他不同平台上部署 Strapi 的资源,但我对将 Strapi 部署到 Elastic Beanstalk 非常好奇。这可能吗?我该怎么做?
首先,您需要一个运行 Node 版本 12(截至目前)的 EBS 应用程序和环境(Web 服务器)。您还需要更改package.json
您的 Strapi 项目并更新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 从 Strapi 到 Elastic Beanstalk,以下步骤对我有用:
导航到 Elastic Beanstalk 并使用应用程序的相应节点版本创建一个新应用程序
在 GitHub 上设置代码存储库(如果尚不存在)
导航到 AWS CodeBuild 并选择create build project
在源代码部分连接到您的 Github 存储库
在环境部分中选择以下配置
环境图像:管理图像
操作系统:Ubuntu
运行时:标准
图片:aws/codebuild/标准:5.0
角色名称:AWS 将为您创建一个
构建规范
保留其他默认设置并继续创建构建项目
更新您的 Strapi 代码
按照 Richárd Szegh 的建议,添加 Procfile、.npmrc,并相应地更新 package.json 文件
.ebignore
为 Elastic Beanstalk添加文件
将以下内容添加buildspec.yml
到.ebignore
您的项目中
构建规范.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
导航到 AWS CodePipeline
点击Create pipeline
管道设置
源阶段:
构建阶段:
部署阶段:
创建管道
现在您可以将更改推送到存储库,CodePipeline 将获取更改、运行构建并部署到您的 Elastic Beanstalk
这似乎对我有用,AWS Elastic Beanstalk t3.small 实例,我想使用免费层 t3.micro 但它对我不起作用,似乎 t3.micro 1GB 内存不够,t3.small 有 2GB 内存.
1) 添加部署到脚本 package.json
"scripts": {
"deploy": "NODE_ENV=production npm run build && NODE_ENV=production npm run start"
},
创建文件 .npmrc 并添加:
unsafe-perm=true
创建 Procfile 并添加:
web: npm run deploy