> For the complete documentation index, see [llms.txt](https://saveyourtime.gitbook.io/saveyourtime/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://saveyourtime.gitbook.io/saveyourtime/github-actions/github-deploying-a-nest.js-app-to-aws-elastic-beanstalk-with-github-actions.md).

# Github - Deploying a Nest.js App to AWS Elastic Beanstalk (Docker Platform) with Github Actions

### Create a workflow for staging and production instances

Click on **Actions** tab within the Github repo and then Press on **New workflow**

![](/files/-MDTiQ_etQAMyhwidJkR)

![](/files/-MDTilvyQQh7RHhbz3UR)

> You can skip this (Choose a workflow template) and click the ***Setup a workflow yourself*** and start from scratch.

### Setup workflow files

![](/files/-MDTj9_1WQkqnX54NSXG)

`production.yml`

```yaml
# This is a basic workflow to help you get started with Actions

name: CD

# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
  push:
    branches: [master]
  pull_request:
    branches: [master]

# A map of environment variables that are available to all jobs and steps in the workflow
env:
  AWS_ENVIRONMENT_NAME: nest-production
  AWS_DEFAULT_REGION: ap-northeast-1

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v2

      - uses: actions/setup-node@v1
        with:
          node-version: '12.x'
          registry-url: 'https://registry.npmjs.org'

      - name: Install
        run: |
          node -v
          yarn -v
          yarn install

      - name: Build
        run: yarn build

      - name: Deploy
        uses: hmanzur/actions-aws-eb@v1.0.0
        with:
          command: 'deploy ${{ env.AWS_ENVIRONMENT_NAME }}'
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_DEFAULT_REGION: ${{ env.AWS_DEFAULT_REGION }}
```

`staging.yml`

```yaml
# This is a basic workflow to help you get started with Actions

name: CD

# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
  push:
    branches: [staging]
  pull_request:
    branches: [staging]

# A map of environment variables that are available to all jobs and steps in the workflow
env:
  AWS_ENVIRONMENT_NAME: nest-staging
  AWS_DEFAULT_REGION: ap-northeast-1

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v2

      - uses: actions/setup-node@v1
        with:
          node-version: '12.x'
          registry-url: 'https://registry.npmjs.org'

      - name: Install
        run: |
          node -v
          yarn -v
          yarn install

      - name: Build
        run: yarn build

      - name: Deploy
        uses: hmanzur/actions-aws-eb@v1.0.0
        with:
          command: 'deploy ${{ env.AWS_ENVIRONMENT_NAME }}'
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_DEFAULT_REGION: ${{ env.AWS_DEFAULT_REGION }}
```

{% hint style="info" %}
Replace `AWS_ENVIRONMENT_NAME` with your environment of the elastic beanstalk application.\
Replace `AWS_DEFAULT_REGION` with the region where you created your elastic beanstalk application.
{% endhint %}

### Add AWS secrets to Github

![](/files/-MDXfMhCg0dXnwc8fNPB)

### Push code to Github then Github Action will deploy your app to aws automatically
