正如标题所述,我正在尝试使用 Github将 Laravel-Angular 应用程序直接从 Github 部署到 AWS EC2 实例动作。
在我的应用程序中,需要3个 Angular 8 + 项目,这些项目需要在部署之前进行构建。不需要构建laravel。
可用的解决方案建议使用 AWS Elastic Beanstalk 部署代码。但是,如果这样做,如何将弹性beantalk附加到现有实例还不够清楚。
是否可以在不使用 Elastic Beanstalk 的情况下将代码部署到 AWS EC2 ?
这是我的 Github操作 build.yml:
name: Build Develop Branch
on:
push:
branches: [ develop ]
pull_request:
branches: [ develop ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14.x]
steps:
- name: Code Checkout
uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: App 1 npm install
run: npm install
working-directory: angular-app-1
- name: App 1 Build
run: npm run build:staging
working-directory: angular-app-1
- name: App 2 npm install
run: npm install
working-directory: angular-app-2
- name: App 2 Build
run: node node_modules/@angular/cli/bin/ng build --configuration=staging
working-directory: angular-app-2
- name: App 3 npm install
run: npm install
working-directory: angular-app-3
- name: App 3 Build
run: node node_modules/@angular/cli/bin/ng build --configuration=staging
working-directory: angular-app-3
答案 0 :(得分:6)
开始之前:
这不是完整的答案。这不是一个完整的演练,但是有许多提示和一些代码将帮助您设置某些AWS内容(例如ALB)以及您的存储库中的文件,以使其正常工作。这个答案更像是我昨晚试图使ECS正常运行时从我的冲刺跑中获得的一些线索。
我也没有足够的观点来发表评论或聊天...这是我能提供的最好的东西。
快速链接(不过您可能应该跳过这两点):
编辑:ECS部署现在可以工作。即将开始进行EC2部署。
编辑2:我添加了Donate Anything回购。另外,我不确定直接EC2部署(至少对我而言)是否可行,因为安装脚本有点奇怪。但是,我仍然没有时间去EC2。同样,如果有人愿意分享自己的时间,请贡献自己的力量!
我确实想警告大家,安全小组非常重要。那阻塞了我很长一段时间,所以请确保您安装正确。 Donate Anything's GitHub repository,我教你如何做。
完整的非完整答案:
我现在正在In the ECS tutorial中处理此问题,并正在使用GitHub操作在ECS this repo中进行处理。在EC2上我还没有开始太远,但是测试的基本步骤是:
CRUCIAL
在测试此AWS设置时的一些提示:
您的测试概要如下:
version: 0.0
os: linux
files:
- source: /
destination: /code
hooks:
BeforeInstall:
- location: aws_scripts/install_dependencies
timeout: 300
runas: root
ApplicationStop:
- location: aws_scripts/start_server
runas: root
GitHub动作:
您至少需要什么:
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# TODO Change your AWS region here!
aws-region: us-east-2
签出代码对于...好吧...获取代码很有必要。
对于AWS凭证的配置,您需要使用适当的IAM凭证将AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
添加到GitHub机密中。为此,我相信IAM唯一需要的角色是完整的CodeDeploy内容。
部署代码:
这是在达到此步骤之前应尝试的测试代码的时间。设置好工作流程后,让我们将CLI中的代码粘贴到您的操作中。
- name: Deploying with CodeDeploy
id: a-task
env:
an-environment-variable: anything you want
run: |
echo "Your CLI code should be placed here"
很抱歉,如果这令人困惑,不是您要查找的内容,或者想要完整的教程。我也没有实际使用过,但是自上次尝试以来已经有一段时间了,上次尝试时,我什至不知道什么是EC2实例...我只是做了一个独立的EC2实例并使用rsync传输我的文件。希望我写的是一些线索,可以很容易地指导您解决问题。
如果您可以使用它,请在此处共享它:here,这样就没有其他人可以承受AWS部署的痛苦了……
答案 1 :(得分:4)
是否可以在不使用 Elastic Beanstalk 的情况下将代码部署到 AWS EC2?
我找到了一种使用 GitHub Actions 部署到 EC2 实例(或任何通过 rsync
接受 ssh
命令的服务器)的简单方法。
我在存储库的 .github/workflows 文件夹中有一个简单的文件,每当向我的 GitHub 存储库进行推送时,GitHub Actions 就会运行该文件以部署到我的 EC2 实例.
没有麻烦,没有大惊小怪,没有特殊的咒语或拜占庭式的 AWS 配置细节。
文件.github/workflows/pushtoec2.yml:
name: Push-to-EC2
on: push
jobs:
deploy:
name: Push to EC2 Instance
runs-on: ubuntu-latest
steps:
- name: Checkout the code
uses: actions/checkout@v1
- name: Deploy to my EC2 instance
uses: easingthemes/ssh-deploy@v2.1.5
env:
SSH_PRIVATE_KEY: ${{ secrets.EC2_SSH_KEY }}
SOURCE: "./"
REMOTE_HOST: "ec2-34-213-48-149.us-west-2.compute.amazonaws.com"
REMOTE_USER: "ec2-user"
TARGET: "/home/ec2-user/SampleExpressApp"
上面使用的 ssh deploy GitHub 操作的详细信息。
答案 2 :(得分:1)
是的,我今天能够解决这个问题。
首先,您需要在 AWS 上完成本教程以设置您的 EC2 服务器,以及在 CodeDeploy 中配置应用程序和部署组:Tutorial: Use CodeDeploy to deploy an application from GitHub
然后,您可以使用 GitHub Actions 中的以下工作流程在推送时部署您的代码。您本质上是使用 AWS CLI 创建新部署。将 CLI 的 AWS 凭证存储在 GitHub Secrets 中。
以下是部署 Node 应用的示例:
name: Deploy to AWS
on:
push:
branches: [ main ]
jobs:
deploy:
name: Deploy AWS
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [12.x]
app-name: ['your-codedeploy-application']
deployment-group: ['your-codedeploy-deploy-group']
repo: ['username/repository-name']
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies
run: npm install
- name: Build app
run: npm run build
- name: Install AWS CLI
run: |
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install --update
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-session-token: ${{ secrets.AWS_SESSION_TOKEN }}
aws-region: us-east-1
- name: Deploy to AWS
run: |
aws deploy create-deployment \
--application-name ${{ matrix.app-name }} \
--deployment-config-name CodeDeployDefault.OneAtATime \
--deployment-group-name ${{ matrix.deployment-group }} \
--description "GitHub Deployment for the ${{ matrix.app-name }}-${{ github.sha }}" \
--github-location repository=${{ matrix.repo }},commitId=${{ github.sha }}