Pri*_*dam 13 github amazon-ec2 amazon-web-services github-actions
正如标题所说,我正在尝试使用Github Actions将我的Laravel-Angular应用程序直接从Github部署到AWS EC2实例。
在我的应用程序中,需要在部署前构建3 个Angular 8+项目。哪里不需要构建laravel。
可用的解决方案建议使用AWS Elastic Beanstalk来部署代码。但是,如果要这样做,如何将弹性豆茎附加到现有实例还不够清楚。
有没有办法在不使用Elastic Beanstalk 的情况下将代码部署到AWS EC2?
这是我的Github Actions 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
Run Code Online (Sandbox Code Playgroud)
小智 6
首先,您需要在 AWS 上完成本教程来设置 EC2 服务器,并在 CodeDeploy 中配置应用程序和部署组:教程:使用 CodeDeploy 从 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 }}
Run Code Online (Sandbox Code Playgroud)
一年后,我终于开始制作教程:https : //github.com/Andrew-Chen-Wang/cookiecutter-django-ec2-github。
我找到了一个Medium 教程,如果有人想使用 Code Pipeline,它也值得一看(有一些差异;我将我的文件存储在 GitHub 上,而 Medium 教程在 S3 上。我创建了一个其他作者没有的自定义 VPC )。
AWS 终于为带有 GitHub 存储库的 CodeDeploy 制作了一个简洁的教程:https ://docs.aws.amazon.com/codedeploy/latest/userguide/tutorials-github-prerequisites.html看看那里并享受 :)
与 ECS 教程一样,我们使用 Parameter Store 来存储我们的机密。AWS 之前希望我们获取机密的方式是通过 bash 脚本中的脚本:https : //aws.amazon.com/blogs/mt/use-parameter-store-to-securely-access-secrets-and-config-数据输入 aws 编码部署/
例如:
password=$(aws ssm get-parameters --region us-east-1 --names MySecureSQLPassword --with-decryption --query Parameters[0].Value)
password=`echo $password | sed -e 's/^"//' -e 's/"$//'`
mysqladmin -u root password $password
Run Code Online (Sandbox Code Playgroud)
新编辑(2020 年 12 月 24 日):我想我已经搞定了。下面我指出了为 AWS ECS捐赠任何东西。我已转向自部署设置。如果您查看 bin/scripts,我将利用 supervisord 和 gunicorn(用于 Python Web 开发)。但是在 EC2 的上下文中,您可以简单地将 AppSpec.yml 指向这些脚本!希望对大家有帮助!
在我开始之前:
这不是一个完整的答案。不是一个完整的演练,但有很多提示和一些代码可以帮助您设置某些 AWS 内容,例如 ALB 和您的存储库中的文件,以使其正常工作。这个答案更像是我昨晚试图让 ECS 工作的冲刺跑中混杂的几条线索。
我也没有足够的积分来评论或聊天……这是我能提供的最好的东西。
快速链接(不过,您可能应该跳过这两点):
编辑:ECS 部署现在有效。将很快开始进行 EC2 部署。
编辑 2:我添加了捐赠任何回购。此外,我不确定直接 EC2 部署(至少对我而言)是否可行,因为安装脚本有点奇怪。但是,我仍然没有找到时间去使用 EC2。同样,如果有人愿意分享他们的时间,请这样做并做出贡献!
我确实想警告大家,安全组非常重要。这阻碍了我很长时间,所以确保你把它们弄对了。在ECS教程中,我教你我是怎么做的。
完整非完整答案:
我现在正在这个 repo 中处理这个问题,另一个在这里使用 GitHub 操作针对 ECS 。我在 EC2 上还没有开始太远,但测试的基本概要是这样的:
至关重要的
测试此 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
检出代码对于……嗯……获取代码是必要的。
对于 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"
Run Code Online (Sandbox Code Playgroud)
对不起,如果这令人困惑,而不是您正在寻找的内容,或者想要一个完整的教程。我也没有真正让它工作,但距离我上次尝试也有一段时间了,上次我尝试时,我什至不知道 EC2 实例是什么......我只是做了一个独立的 EC2实例并使用 rsync 传输我的文件。希望我写的是几条线索,可以很容易地指导您找到解决方案。
如果你让它工作,请在此处分享:https : //github.com/Andrew-Chen-Wang/cookiecutter-django-ec2-gh-action以便其他人不必忍受 AWS 部署的痛苦。 ..
有没有办法在不使用 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"
Run Code Online (Sandbox Code Playgroud)
上面使用的ssh 部署GitHub 操作的详细信息。
| 归档时间: |
|
| 查看次数: |
12097 次 |
| 最近记录: |