From b6a2427c08f8e6d0a282829a0219315d75458e9e Mon Sep 17 00:00:00 2001 From: Tiago Garcia Date: Wed, 25 Oct 2023 16:45:21 +0200 Subject: [PATCH] Add infrastructure code; add AWS SES Strapi provider --- .github/workflows/deploy.yml | 210 +++++++++++ .github/workflows/e2e_client.yml | 5 +- cms/Dockerfile.prod | 58 +++ cms/config/plugins.ts | 14 + cms/entrypoint.sh | 21 ++ cms/package.json | 4 +- cms/yarn.lock | 355 +++++++++++++++++- infrastructure/.gitignore | 11 + infrastructure/README.md | 47 +++ infrastructure/architecture.png | Bin 0 -> 89330 bytes infrastructure/base/.terraform.lock.hcl | 82 ++++ infrastructure/base/main.tf | 284 ++++++++++++++ infrastructure/base/modules/beanstalk/iam.tf | 47 +++ infrastructure/base/modules/beanstalk/main.tf | 198 ++++++++++ .../base/modules/beanstalk/outputs.tf | 18 + .../base/modules/beanstalk/variables.tf | 66 ++++ infrastructure/base/modules/ecr/main.tf | 63 ++++ infrastructure/base/modules/ecr/outputs.tf | 3 + infrastructure/base/modules/ecr/variables.tf | 21 ++ infrastructure/base/modules/email/main.tf | 34 ++ infrastructure/base/modules/email/outputs.tf | 31 ++ .../base/modules/email/variables.tf | 9 + .../base/modules/env/certificate.tf | 21 ++ infrastructure/base/modules/env/main.tf | 72 ++++ infrastructure/base/modules/env/outputs.tf | 69 ++++ infrastructure/base/modules/env/variables.tf | 80 ++++ .../base/modules/github_values/main.tf | 15 + .../base/modules/github_values/variables.tf | 13 + infrastructure/base/modules/iam/main.tf | 60 +++ infrastructure/base/modules/iam/outputs.tf | 14 + .../iam_policy_secrets_read.json.tpl | 17 + .../base/modules/postgresql/main.tf | 94 +++++ .../base/modules/postgresql/outputs.tf | 34 ++ .../base/modules/postgresql/variables.tf | 76 ++++ infrastructure/base/outputs.tf | 77 ++++ infrastructure/base/variables.tf | 109 ++++++ infrastructure/base/vars/terraform.tfvars | 18 + infrastructure/base/versions.tf | 31 ++ .../.ebextensions/authorized_keys.config | 18 + .../source_bundle/proxy/conf.d/orcasa.conf | 32 ++ infrastructure/state/.terraform.lock.hcl | 25 ++ infrastructure/state/main.tf | 55 +++ infrastructure/state/outputs.tf | 7 + infrastructure/state/permissions.json | 45 +++ infrastructure/state/variables.tf | 14 + infrastructure/state/vars/terraform.tfvars | 3 + 46 files changed, 2566 insertions(+), 14 deletions(-) create mode 100644 .github/workflows/deploy.yml create mode 100644 cms/Dockerfile.prod create mode 100755 cms/entrypoint.sh create mode 100644 infrastructure/.gitignore create mode 100644 infrastructure/README.md create mode 100644 infrastructure/architecture.png create mode 100644 infrastructure/base/.terraform.lock.hcl create mode 100644 infrastructure/base/main.tf create mode 100644 infrastructure/base/modules/beanstalk/iam.tf create mode 100644 infrastructure/base/modules/beanstalk/main.tf create mode 100644 infrastructure/base/modules/beanstalk/outputs.tf create mode 100644 infrastructure/base/modules/beanstalk/variables.tf create mode 100644 infrastructure/base/modules/ecr/main.tf create mode 100644 infrastructure/base/modules/ecr/outputs.tf create mode 100644 infrastructure/base/modules/ecr/variables.tf create mode 100644 infrastructure/base/modules/email/main.tf create mode 100644 infrastructure/base/modules/email/outputs.tf create mode 100644 infrastructure/base/modules/email/variables.tf create mode 100644 infrastructure/base/modules/env/certificate.tf create mode 100644 infrastructure/base/modules/env/main.tf create mode 100644 infrastructure/base/modules/env/outputs.tf create mode 100644 infrastructure/base/modules/env/variables.tf create mode 100644 infrastructure/base/modules/github_values/main.tf create mode 100644 infrastructure/base/modules/github_values/variables.tf create mode 100644 infrastructure/base/modules/iam/main.tf create mode 100644 infrastructure/base/modules/iam/outputs.tf create mode 100644 infrastructure/base/modules/postgresql/iam_policy_secrets_read.json.tpl create mode 100644 infrastructure/base/modules/postgresql/main.tf create mode 100644 infrastructure/base/modules/postgresql/outputs.tf create mode 100644 infrastructure/base/modules/postgresql/variables.tf create mode 100644 infrastructure/base/outputs.tf create mode 100644 infrastructure/base/variables.tf create mode 100644 infrastructure/base/vars/terraform.tfvars create mode 100644 infrastructure/base/versions.tf create mode 100644 infrastructure/source_bundle/.ebextensions/authorized_keys.config create mode 100644 infrastructure/source_bundle/proxy/conf.d/orcasa.conf create mode 100644 infrastructure/state/.terraform.lock.hcl create mode 100644 infrastructure/state/main.tf create mode 100644 infrastructure/state/outputs.tf create mode 100644 infrastructure/state/permissions.json create mode 100644 infrastructure/state/variables.tf create mode 100644 infrastructure/state/vars/terraform.tfvars diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000..537d01fa --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,210 @@ +name: Run deploy + +on: + workflow_dispatch: + push: + branches: +# - main + - staging + paths: + - 'client/**' + - 'cms/**' + - '.github/workflows/*' + - 'infrastructure/**' + +jobs: + build_client_image: + name: Build Client image and push to Amazon ECR + runs-on: ubuntu-22.04 + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - uses: dorny/paths-filter@v2 + id: client-changes + with: + filters: | + client: + - 'client/**' + - '.github/workflows/**' + + - name: Extract branch name + if: steps.client-changes.outputs.client == 'true' + run: | + { + branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}} + echo "branch=${branch}" + echo "branch_upper=${branch^^}" + } >> $GITHUB_OUTPUT + id: extract_branch + + - name: Copy env variables to docker + if: steps.client-changes.outputs.client == 'true' + run: | + echo "${{ steps.extract_branch.outputs.branch == 'main' && secrets.PRODUCTION_CLIENT_ENV_FILE || secrets[format('{0}_CLIENT_ENV_FILE', steps.extract_branch.outputs.branch_upper)] }}" > client/.env.local + + - name: Configure AWS credentials + if: steps.client-changes.outputs.client == 'true' + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-access-key-id: ${{ secrets.PIPELINE_USER_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.PIPELINE_USER_SECRET_ACCESS_KEY }} + aws-region: ${{ vars.AWS_REGION }} + + - name: Login to Amazon ECR + if: steps.client-changes.outputs.client == 'true' + id: login-ecr + uses: aws-actions/amazon-ecr-login@v1 + with: + mask-password: 'true' + + - name: Set up Docker Buildx + if: steps.client-changes.outputs.client == 'true' + uses: docker/setup-buildx-action@v3 + + - name: Build, tag, and push Client image to Amazon ECR + if: steps.client-changes.outputs.client == 'true' + uses: docker/build-push-action@v5 + with: + context: ./client + cache-from: type=gha + cache-to: type=gha,mode=max + file: ./client/Dockerfile.prod + push: true + tags: | + ${{ steps.login-ecr.outputs.registry }}/${{ secrets.CLIENT_REPOSITORY_NAME }}:${{ github.sha }} + ${{ steps.login-ecr.outputs.registry }}/${{ secrets.CMS_REPOSITORY_NAME }}:${{ steps.extract_branch.outputs.branch == 'main' && 'production' || steps.extract_branch.outputs.branch }} + + build_cms_image: + name: Build CMS image and push to Amazon ECR + runs-on: ubuntu-22.04 + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - uses: dorny/paths-filter@v2 + id: api-changes + with: + filters: | + cms: + - 'cms/**' + - '.github/workflows/**' + + - name: Extract branch name + if: steps.cms-changes.outputs.cms == 'true' + run: | + { + branch=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}} + echo "branch=${branch}" + echo "branch_upper=${branch^^}" + } >> $GITHUB_OUTPUT + id: extract_branch + + - name: Copy env variables to docker + if: steps.cms-changes.outputs.cms == 'true' + run: | + echo "${{ steps.extract_branch.outputs.branch == 'main' && secrets.PRODUCTION_CMS_ENV_FILE || secrets[format('{0}_CMS_ENV_FILE', steps.extract_branch.outputs.branch_upper)] }}" > cms/.env + + - name: Configure AWS credentials + if: steps.cms-changes.outputs.cms == 'true' + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-access-key-id: ${{ secrets.PIPELINE_USER_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.PIPELINE_USER_SECRET_ACCESS_KEY }} + aws-region: ${{ vars.AWS_REGION }} + + - name: Login to Amazon ECR + if: steps.cms-changes.outputs.cms == 'true' + id: login-ecr + uses: aws-actions/amazon-ecr-login@v1 + with: + mask-password: 'true' + + - name: Set up Docker Buildx + if: steps.cms-changes.outputs.cms == 'true' + uses: docker/setup-buildx-action@v3 + + - name: Build, tag, and push API image to Amazon ECR + if: steps.cms-changes.outputs.cms == 'true' + uses: docker/build-push-action@v5 + with: + context: ./cms + cache-from: type=gha + cache-to: type=gha,mode=max + file: ./cms/Dockerfile.prod + push: true + tags: | + ${{ steps.login-ecr.outputs.registry }}/${{ secrets.API_REPOSITORY_NAME }}:${{ github.sha }} + ${{ steps.login-ecr.outputs.registry }}/${{ secrets.API_REPOSITORY_NAME }}:${{ steps.extract_branch.outputs.branch == 'main' && 'production' || steps.extract_branch.outputs.branch }} + + deploy: + name: Deploy Client and CMS to Amazon EB + needs: [build_client_image, build_cms_image] + runs-on: ubuntu-22.04 + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-access-key-id: ${{ secrets.PIPELINE_USER_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.PIPELINE_USER_SECRET_ACCESS_KEY }} + aws-region: ${{ vars.AWS_REGION }} + + - name: Login to Amazon ECR + id: login-ecr + uses: aws-actions/amazon-ecr-login@v1 + with: + mask-password: 'true' + + - name: Generate docker compose file + working-directory: infrastructure/source_bundle + env: + ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} + ECR_REPOSITORY_CLIENT: ${{ secrets.CLIENT_REPOSITORY_NAME }} + ECR_REPOSITORY_CMS: ${{ secrets.CMS_REPOSITORY_NAME }} + IMAGE_TAG: ${{ steps.extract_branch.outputs.branch == 'main' && 'production' || steps.extract_branch.outputs.branch }} + run: | + echo "version: '3.3'" > docker-compose.yml + echo "services:" >> docker-compose.yml + echo " client:" >> docker-compose.yml + echo " image: $ECR_REGISTRY/$ECR_REPOSITORY_CLIENT:$IMAGE_TAG" >> docker-compose.yml + echo " restart: always" >> docker-compose.yml + echo " ports:" >> docker-compose.yml + echo " - 3000:3000" >> docker-compose.yml + echo " cms:" >> docker-compose.yml + echo " image: $ECR_REGISTRY/$ECR_REPOSITORY_CMS:$IMAGE_TAG" >> docker-compose.yml + echo " restart: always" >> docker-compose.yml + echo " ports:" >> docker-compose.yml + echo " - 1337:1337" >> docker-compose.yml + echo " nginx:" >> docker-compose.yml + echo " image: nginx" >> docker-compose.yml + echo " restart: always" >> docker-compose.yml + echo " volumes:" >> docker-compose.yml + echo " - ./proxy/conf.d:/etc/nginx/conf.d" >> docker-compose.yml + echo " - \"\${EB_LOG_BASE_DIR}/nginx:/var/log/nginx\"" >> docker-compose.yml + echo " ports:" >> docker-compose.yml + echo " - 80:80" >> docker-compose.yml + echo " depends_on:" >> docker-compose.yml + echo " - cms" >> docker-compose.yml + echo " - client" >> docker-compose.yml + + - name: Generate zip file + working-directory: infrastructure/source_bundle + run: | + zip -r deploy.zip * .[^.]* + + - name: Deploy to Amazon EB + uses: einaregilsson/beanstalk-deploy@v21 + with: + aws_access_key: ${{ secrets.PIPELINE_USER_ACCESS_KEY_ID }} + aws_secret_key: ${{ secrets.PIPELINE_USER_SECRET_ACCESS_KEY }} + application_name: orcasa-${{ steps.extract_branch.outputs.branch == 'main' && 'production' || steps.extract_branch.outputs.branch }} + environment_name: orcasa-${{ steps.extract_branch.outputs.branch == 'main' && 'production' || steps.extract_branch.outputs.branch }}-environment + region: ${{ vars.AWS_REGION }} + version_label: ${{ github.sha }}-${{ github.run_id }}-${{ github.run_attempt }} + deployment_package: infrastructure/source_bundle/deploy.zip diff --git a/.github/workflows/e2e_client.yml b/.github/workflows/e2e_client.yml index f6609cb8..e3776b6b 100644 --- a/.github/workflows/e2e_client.yml +++ b/.github/workflows/e2e_client.yml @@ -1,4 +1,4 @@ -name: e2e_client +name: Client E2E tests on: push: paths: @@ -8,10 +8,9 @@ on: jobs: e2e_client: + name: Client E2E tests timeout-minutes: 15 runs-on: ubuntu-22.04 - strategy: - fail-fast: false defaults: run: working-directory: client diff --git a/cms/Dockerfile.prod b/cms/Dockerfile.prod new file mode 100644 index 00000000..1618644f --- /dev/null +++ b/cms/Dockerfile.prod @@ -0,0 +1,58 @@ +# Build all the things +FROM node:18.17-bullseye-slim as build +RUN apt-get update -y && \ + apt-get upgrade -y && \ + apt-get install -y \ + build-essential \ + gcc autoconf \ + automake \ + zlib1g-dev \ + libpng-dev \ + nasm bash \ + libvips-dev \ + && apt-get clean + +ENV NODE_ENV production + +WORKDIR /app + +COPY .yarn ./.yarn +COPY config ./config +COPY database ./database +COPY public ./public +COPY src ./src + +COPY .env \ + .nvmrc \ + .yarnrc.yml \ + favicon.png \ + package.json \ + entrypoint.sh \ + tsconfig.json \ + yarn.lock + ./ + +RUN yarn install + +RUN yarn build + +# Copy only the built files into the final image +FROM node:18.17-bullseye-slim AS runner +RUN apt-get update -y && \ + apt-get upgrade -y && \ + apt-get install -y libvips-dev && \ + apt-get clean + +ENV NODE_ENV production + +WORKDIR /app + +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 strapi + +COPY --from=build --chown=strapi:nodejs /app ./ + +USER strapi + +EXPOSE 1337 +ENTRYPOINT ["/app/entrypoint.sh"] diff --git a/cms/config/plugins.ts b/cms/config/plugins.ts index d4f3be17..91996b43 100644 --- a/cms/config/plugins.ts +++ b/cms/config/plugins.ts @@ -12,6 +12,20 @@ module.exports = ({ env }) => ({ ], }, }, + email: { + config: { + provider: 'amazon-ses', + providerOptions: { + key: env('AWS_SES_ACCESS_KEY_ID'), + secret: env('AWS_SES_ACCESS_KEY_SECRET'), + amazon: `https://email.${env('AWS_REGION')}.amazonaws.com`, + }, + settings: { + defaultFrom: `no-reply@no-reply.${env('AWS_SES_DOMAIN')}`, + defaultReplyTo: `no-reply@no-reply.${env('AWS_SES_DOMAIN')}`, + }, + }, + }, documentation: { config: { "x-strapi-config": { diff --git a/cms/entrypoint.sh b/cms/entrypoint.sh new file mode 100755 index 00000000..94d96ba6 --- /dev/null +++ b/cms/entrypoint.sh @@ -0,0 +1,21 @@ +#!/bin/bash +set -e + +case "${NODE_ENV}" in + development) + echo "Running Development Server" + exec yarn dev + ;; + test) + echo "Running Test" + exec yarn test + ;; + production) + echo "Import config" + yarn config-sync import -y + echo "Running Production Server" + exec yarn start + ;; + *) + echo "Unknown NODE environment: \"${NODE_ENV}\"" +esac diff --git a/cms/package.json b/cms/package.json index d7f9421c..21f014c9 100644 --- a/cms/package.json +++ b/cms/package.json @@ -14,6 +14,7 @@ "@strapi/plugin-documentation": "^4.14.5", "@strapi/plugin-i18n": "4.14.5", "@strapi/plugin-users-permissions": "4.14.5", + "@strapi/provider-email-amazon-ses": "4.14.5", "@strapi/strapi": "4.14.5", "pg": "8.8.0", "strapi-plugin-config-sync": "^1.2.1", @@ -23,7 +24,8 @@ "name": "Vizzuality" }, "strapi": { - "uuid": "d6c35ecd-a7d3-4e06-bbec-080329e0e5b8" + "uuid": "d6c35ecd-a7d3-4e06-bbec-080329e0e5b8", + "telemetryDisabled": true }, "engines": { "node": ">=16.0.0 <=20.x.x", diff --git a/cms/yarn.lock b/cms/yarn.lock index 79262fb0..bb83ff69 100644 --- a/cms/yarn.lock +++ b/cms/yarn.lock @@ -2797,6 +2797,16 @@ __metadata: languageName: node linkType: hard +"@strapi/provider-email-amazon-ses@npm:4.14.5": + version: 4.14.5 + resolution: "@strapi/provider-email-amazon-ses@npm:4.14.5" + dependencies: + "@strapi/utils": 4.14.5 + node-ses: ^3.0.3 + checksum: d94cafa2db97a2fa3a0b869fa66bf3dac84bd7423723d620d35f3708375230146ad26664d917f76a976ee6515a0d0f6c0a8e033df339a38e1761db639957af37 + languageName: node + linkType: hard + "@strapi/provider-email-sendmail@npm:4.14.5": version: 4.14.5 resolution: "@strapi/provider-email-sendmail@npm:4.14.5" @@ -3839,7 +3849,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.12.5": +"ajv@npm:^6.12.3, ajv@npm:^6.12.5": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -4084,6 +4094,22 @@ __metadata: languageName: node linkType: hard +"asn1@npm:~0.2.3": + version: 0.2.6 + resolution: "asn1@npm:0.2.6" + dependencies: + safer-buffer: ~2.1.0 + checksum: 39f2ae343b03c15ad4f238ba561e626602a3de8d94ae536c46a4a93e69578826305366dc09fbb9b56aec39b4982a463682f259c38e59f6fa380cd72cd61e493d + languageName: node + linkType: hard + +"assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": + version: 1.0.0 + resolution: "assert-plus@npm:1.0.0" + checksum: 19b4340cb8f0e6a981c07225eacac0e9d52c2644c080198765d63398f0075f83bbc0c8e95474d54224e297555ad0d631c1dcd058adb1ddc2437b41a6b424ac64 + languageName: node + linkType: hard + "assign-symbols@npm:^1.0.0": version: 1.0.0 resolution: "assign-symbols@npm:1.0.0" @@ -4114,6 +4140,27 @@ __metadata: languageName: node linkType: hard +"aws-sign2@npm:~0.7.0": + version: 0.7.0 + resolution: "aws-sign2@npm:0.7.0" + checksum: b148b0bb0778098ad8cf7e5fc619768bcb51236707ca1d3e5b49e41b171166d8be9fdc2ea2ae43d7decf02989d0aaa3a9c4caa6f320af95d684de9b548a71525 + languageName: node + linkType: hard + +"aws4@npm:1.9.1": + version: 1.9.1 + resolution: "aws4@npm:1.9.1" + checksum: aa6f42024a4a191136d663bfca3866e97a2683e4facc77485e48a0ee1c1675d0a84fd006c911930f5c78596fab9d7b5e6579eb71be2f041f130210a6e90e43b7 + languageName: node + linkType: hard + +"aws4@npm:^1.8.0": + version: 1.12.0 + resolution: "aws4@npm:1.12.0" + checksum: 68f79708ac7c335992730bf638286a3ee0a645cf12575d557860100767c500c08b30e24726b9f03265d74116417f628af78509e1333575e9f8d52a80edfe8cbc + languageName: node + linkType: hard + "axios@npm:1.5.0": version: 1.5.0 resolution: "axios@npm:1.5.0" @@ -4187,6 +4234,15 @@ __metadata: languageName: node linkType: hard +"bcrypt-pbkdf@npm:^1.0.0": + version: 1.0.2 + resolution: "bcrypt-pbkdf@npm:1.0.2" + dependencies: + tweetnacl: ^0.14.3 + checksum: 4edfc9fe7d07019609ccf797a2af28351736e9d012c8402a07120c4453a3b789a15f2ee1530dc49eee8f7eb9379331a8dd4b3766042b9e502f74a68e7f662291 + languageName: node + linkType: hard + "bcryptjs@npm:2.4.3": version: 2.4.3 resolution: "bcryptjs@npm:2.4.3" @@ -4599,6 +4655,13 @@ __metadata: languageName: node linkType: hard +"caseless@npm:~0.12.0": + version: 0.12.0 + resolution: "caseless@npm:0.12.0" + checksum: b43bd4c440aa1e8ee6baefee8063b4850fd0d7b378f6aabc796c9ec8cb26d27fb30b46885350777d9bd079c5256c0e1329ad0dc7c2817e0bb466810ebb353751 + languageName: node + linkType: hard + "ccsa-cms@workspace:.": version: 0.0.0-use.local resolution: "ccsa-cms@workspace:." @@ -4606,6 +4669,7 @@ __metadata: "@strapi/plugin-documentation": ^4.14.5 "@strapi/plugin-i18n": 4.14.5 "@strapi/plugin-users-permissions": 4.14.5 + "@strapi/provider-email-amazon-ses": 4.14.5 "@strapi/strapi": 4.14.5 pg: 8.8.0 strapi-plugin-config-sync: ^1.2.1 @@ -5050,7 +5114,7 @@ __metadata: languageName: node linkType: hard -"combined-stream@npm:^1.0.8": +"combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8, combined-stream@npm:~1.0.6": version: 1.0.8 resolution: "combined-stream@npm:1.0.8" dependencies: @@ -5294,6 +5358,13 @@ __metadata: languageName: node linkType: hard +"core-util-is@npm:1.0.2": + version: 1.0.2 + resolution: "core-util-is@npm:1.0.2" + checksum: 7a4c925b497a2c91421e25bf76d6d8190f0b2359a9200dbeed136e63b2931d6294d3b1893eda378883ed363cd950f44a12a401384c609839ea616befb7927dab + languageName: node + linkType: hard + "core-util-is@npm:^1.0.2, core-util-is@npm:~1.0.0": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" @@ -5475,6 +5546,15 @@ __metadata: languageName: node linkType: hard +"dashdash@npm:^1.12.0": + version: 1.14.1 + resolution: "dashdash@npm:1.14.1" + dependencies: + assert-plus: ^1.0.0 + checksum: 3634c249570f7f34e3d34f866c93f866c5b417f0dd616275decae08147dcdf8fccfaa5947380ccfb0473998ea3a8057c0b4cd90c875740ee685d0624b2983598 + languageName: node + linkType: hard + "date-fns@npm:2.30.0": version: 2.30.0 resolution: "date-fns@npm:2.30.0" @@ -5484,7 +5564,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.3.3": +"debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.3.3, debug@npm:^2.6.9": version: 2.6.9 resolution: "debug@npm:2.6.9" dependencies: @@ -5969,6 +6049,16 @@ __metadata: languageName: node linkType: hard +"ecc-jsbn@npm:~0.1.1": + version: 0.1.2 + resolution: "ecc-jsbn@npm:0.1.2" + dependencies: + jsbn: ~0.1.0 + safer-buffer: ^2.1.0 + checksum: 22fef4b6203e5f31d425f5b711eb389e4c6c2723402e389af394f8411b76a488fa414d309d866e2b577ce3e8462d344205545c88a8143cc21752a5172818888a + languageName: node + linkType: hard + "ecdsa-sig-formatter@npm:1.0.11": version: 1.0.11 resolution: "ecdsa-sig-formatter@npm:1.0.11" @@ -6630,7 +6720,7 @@ __metadata: languageName: node linkType: hard -"extend@npm:^3.0.0": +"extend@npm:^3.0.0, extend@npm:~3.0.2": version: 3.0.2 resolution: "extend@npm:3.0.2" checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515 @@ -6664,6 +6754,20 @@ __metadata: languageName: node linkType: hard +"extsprintf@npm:1.3.0": + version: 1.3.0 + resolution: "extsprintf@npm:1.3.0" + checksum: cee7a4a1e34cffeeec18559109de92c27517e5641991ec6bab849aa64e3081022903dd53084f2080d0d2530803aa5ee84f1e9de642c365452f9e67be8f958ce2 + languageName: node + linkType: hard + +"extsprintf@npm:^1.2.0": + version: 1.4.1 + resolution: "extsprintf@npm:1.4.1" + checksum: a2f29b241914a8d2bad64363de684821b6b1609d06ae68d5b539e4de6b28659715b5bea94a7265201603713b7027d35399d10b0548f09071c5513e65e8323d33 + languageName: node + linkType: hard + "fast-deep-equal@npm:3.1.3, fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -6888,6 +6992,13 @@ __metadata: languageName: node linkType: hard +"forever-agent@npm:~0.6.1": + version: 0.6.1 + resolution: "forever-agent@npm:0.6.1" + checksum: 766ae6e220f5fe23676bb4c6a99387cec5b7b62ceb99e10923376e27bfea72f3c3aeec2ba5f45f3f7ba65d6616965aa7c20b15002b6860833bb6e394dea546a8 + languageName: node + linkType: hard + "fork-ts-checker-webpack-plugin@npm:8.0.0": version: 8.0.0 resolution: "fork-ts-checker-webpack-plugin@npm:8.0.0" @@ -6922,6 +7033,17 @@ __metadata: languageName: node linkType: hard +"form-data@npm:~2.3.2": + version: 2.3.3 + resolution: "form-data@npm:2.3.3" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.6 + mime-types: ^2.1.12 + checksum: 10c1780fa13dbe1ff3100114c2ce1f9307f8be10b14bf16e103815356ff567b6be39d70fc4a40f8990b9660012dc24b0f5e1dde1b6426166eb23a445ba068ca3 + languageName: node + linkType: hard + "formidable@npm:^1.1.1": version: 1.2.6 resolution: "formidable@npm:1.2.6" @@ -7206,6 +7328,15 @@ __metadata: languageName: node linkType: hard +"getpass@npm:^0.1.1": + version: 0.1.7 + resolution: "getpass@npm:0.1.7" + dependencies: + assert-plus: ^1.0.0 + checksum: ab18d55661db264e3eac6012c2d3daeafaab7a501c035ae0ccb193c3c23e9849c6e29b6ac762b9c2adae460266f925d55a3a2a3a3c8b94be2f222df94d70c046 + languageName: node + linkType: hard + "git-diff@npm:^2.0.6": version: 2.0.6 resolution: "git-diff@npm:2.0.6" @@ -7472,6 +7603,23 @@ __metadata: languageName: node linkType: hard +"har-schema@npm:^2.0.0": + version: 2.0.0 + resolution: "har-schema@npm:2.0.0" + checksum: d8946348f333fb09e2bf24cc4c67eabb47c8e1d1aa1c14184c7ffec1140a49ec8aa78aa93677ae452d71d5fc0fdeec20f0c8c1237291fc2bcb3f502a5d204f9b + languageName: node + linkType: hard + +"har-validator@npm:~5.1.3": + version: 5.1.5 + resolution: "har-validator@npm:5.1.5" + dependencies: + ajv: ^6.12.3 + har-schema: ^2.0.0 + checksum: b998a7269ca560d7f219eedc53e2c664cd87d487e428ae854a6af4573fc94f182fe9d2e3b92ab968249baec7ebaf9ead69cf975c931dc2ab282ec182ee988280 + languageName: node + linkType: hard + "has-ansi@npm:^2.0.0": version: 2.0.0 resolution: "has-ansi@npm:2.0.0" @@ -7881,6 +8029,17 @@ __metadata: languageName: node linkType: hard +"http-signature@npm:~1.2.0": + version: 1.2.0 + resolution: "http-signature@npm:1.2.0" + dependencies: + assert-plus: ^1.0.0 + jsprim: ^1.2.2 + sshpk: ^1.7.0 + checksum: 3324598712266a9683585bb84a75dec4fd550567d5e0dd4a0fff6ff3f74348793404d3eeac4918fa0902c810eeee1a86419e4a2e92a164132dfe6b26743fb47c + languageName: node + linkType: hard + "http2-wrapper@npm:^1.0.0-beta.5.2": version: 1.0.3 resolution: "http2-wrapper@npm:1.0.3" @@ -8578,7 +8737,7 @@ __metadata: languageName: node linkType: hard -"is-typedarray@npm:^1.0.0": +"is-typedarray@npm:^1.0.0, is-typedarray@npm:~1.0.0": version: 1.0.0 resolution: "is-typedarray@npm:1.0.0" checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7 @@ -8749,6 +8908,13 @@ __metadata: languageName: node linkType: hard +"jsbn@npm:~0.1.0": + version: 0.1.1 + resolution: "jsbn@npm:0.1.1" + checksum: e5ff29c1b8d965017ef3f9c219dacd6e40ad355c664e277d31246c90545a02e6047018c16c60a00f36d561b3647215c41894f5d869ada6908a2e0ce4200c88f2 + languageName: node + linkType: hard + "jsesc@npm:^2.5.1": version: 2.5.2 resolution: "jsesc@npm:2.5.2" @@ -8786,6 +8952,20 @@ __metadata: languageName: node linkType: hard +"json-schema@npm:0.4.0": + version: 0.4.0 + resolution: "json-schema@npm:0.4.0" + checksum: 66389434c3469e698da0df2e7ac5a3281bcff75e797a5c127db7c5b56270e01ae13d9afa3c03344f76e32e81678337a8c912bdbb75101c62e487dc3778461d72 + languageName: node + linkType: hard + +"json-stringify-safe@npm:~5.0.1": + version: 5.0.1 + resolution: "json-stringify-safe@npm:5.0.1" + checksum: 48ec0adad5280b8a96bb93f4563aa1667fd7a36334f79149abd42446d0989f2ddc58274b479f4819f1f00617957e6344c886c55d05a4e15ebb4ab931e4a6a8ee + languageName: node + linkType: hard + "json5@npm:^2.1.2, json5@npm:^2.2.0, json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" @@ -8820,6 +9000,18 @@ __metadata: languageName: node linkType: hard +"jsprim@npm:^1.2.2": + version: 1.4.2 + resolution: "jsprim@npm:1.4.2" + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.4.0 + verror: 1.10.0 + checksum: 2ad1b9fdcccae8b3d580fa6ced25de930eaa1ad154db21bbf8478a4d30bbbec7925b5f5ff29b933fba9412b16a17bd484a8da4fdb3663b5e27af95dd693bab2a + languageName: node + linkType: hard + "jwa@npm:^1.4.1": version: 1.4.1 resolution: "jwa@npm:1.4.1" @@ -9713,7 +9905,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:2.1.35, mime-types@npm:^2.1.12, mime-types@npm:^2.1.18, mime-types@npm:^2.1.27, mime-types@npm:^2.1.28, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:2.1.35, mime-types@npm:^2.1.12, mime-types@npm:^2.1.18, mime-types@npm:^2.1.27, mime-types@npm:^2.1.28, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -10242,6 +10434,18 @@ __metadata: languageName: node linkType: hard +"node-ses@npm:^3.0.3": + version: 3.0.3 + resolution: "node-ses@npm:3.0.3" + dependencies: + aws4: 1.9.1 + debug: ^2.6.9 + request: 2.88.2 + xml2js: ^0.4.19 + checksum: 51754546d78d426d2a98dba913629767e1d59a829dfb919c02e9daf6f55ae99348a5900e9568c89cf59765985c7aaf67302189df970b2b09fed3c12ca66b67b3 + languageName: node + linkType: hard + "nodemailer-fetch@npm:1.6.0": version: 1.6.0 resolution: "nodemailer-fetch@npm:1.6.0" @@ -10332,7 +10536,7 @@ __metadata: languageName: node linkType: hard -"oauth-sign@npm:^0.9.0": +"oauth-sign@npm:^0.9.0, oauth-sign@npm:~0.9.0": version: 0.9.0 resolution: "oauth-sign@npm:0.9.0" checksum: 8f5497a127967866a3c67094c21efd295e46013a94e6e828573c62220e9af568cc1d2d04b16865ba583e430510fa168baf821ea78f355146d8ed7e350fc44c64 @@ -10969,6 +11173,13 @@ __metadata: languageName: node linkType: hard +"performance-now@npm:^2.1.0": + version: 2.1.0 + resolution: "performance-now@npm:2.1.0" + checksum: 534e641aa8f7cba160f0afec0599b6cecefbb516a2e837b512be0adbe6c1da5550e89c78059c7fabc5c9ffdf6627edabe23eb7c518c4500067a898fa65c2b550 + languageName: node + linkType: hard + "pg-connection-string@npm:2.6.1": version: 2.6.1 resolution: "pg-connection-string@npm:2.6.1" @@ -11370,6 +11581,13 @@ __metadata: languageName: node linkType: hard +"psl@npm:^1.1.28": + version: 1.9.0 + resolution: "psl@npm:1.9.0" + checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d + languageName: node + linkType: hard + "pump@npm:^3.0.0": version: 3.0.0 resolution: "pump@npm:3.0.0" @@ -11380,7 +11598,7 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^2.1.0": +"punycode@npm:^2.1.0, punycode@npm:^2.1.1": version: 2.3.0 resolution: "punycode@npm:2.3.0" checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 @@ -11427,6 +11645,13 @@ __metadata: languageName: node linkType: hard +"qs@npm:~6.5.2": + version: 6.5.3 + resolution: "qs@npm:6.5.3" + checksum: 6f20bf08cabd90c458e50855559539a28d00b2f2e7dddcb66082b16a43188418cb3cb77cbd09268bcef6022935650f0534357b8af9eeb29bf0f27ccb17655692 + languageName: node + linkType: hard + "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -12093,6 +12318,34 @@ __metadata: languageName: node linkType: hard +"request@npm:2.88.2": + version: 2.88.2 + resolution: "request@npm:2.88.2" + dependencies: + aws-sign2: ~0.7.0 + aws4: ^1.8.0 + caseless: ~0.12.0 + combined-stream: ~1.0.6 + extend: ~3.0.2 + forever-agent: ~0.6.1 + form-data: ~2.3.2 + har-validator: ~5.1.3 + http-signature: ~1.2.0 + is-typedarray: ~1.0.0 + isstream: ~0.1.2 + json-stringify-safe: ~5.0.1 + mime-types: ~2.1.19 + oauth-sign: ~0.9.0 + performance-now: ^2.1.0 + qs: ~6.5.2 + safe-buffer: ^5.1.2 + tough-cookie: ~2.5.0 + tunnel-agent: ^0.6.0 + uuid: ^3.3.2 + checksum: 4e112c087f6eabe7327869da2417e9d28fcd0910419edd2eb17b6acfc4bfa1dad61954525949c228705805882d8a98a86a0ea12d7f739c01ee92af7062996983 + languageName: node + linkType: hard + "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -12354,7 +12607,7 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 @@ -12377,7 +12630,7 @@ __metadata: languageName: node linkType: hard -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.1.0": +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 @@ -12398,6 +12651,13 @@ __metadata: languageName: node linkType: hard +"sax@npm:>=0.6.0": + version: 1.3.0 + resolution: "sax@npm:1.3.0" + checksum: 238ab3a9ba8c8f8aaf1c5ea9120386391f6ee0af52f1a6a40bbb6df78241dd05d782f2359d614ac6aae08c4c4125208b456548a6cf68625aa4fe178486e63ecd + languageName: node + linkType: hard + "scheduler@npm:^0.23.0": version: 0.23.0 resolution: "scheduler@npm:0.23.0" @@ -13033,6 +13293,27 @@ __metadata: languageName: node linkType: hard +"sshpk@npm:^1.7.0": + version: 1.18.0 + resolution: "sshpk@npm:1.18.0" + dependencies: + asn1: ~0.2.3 + assert-plus: ^1.0.0 + bcrypt-pbkdf: ^1.0.0 + dashdash: ^1.12.0 + ecc-jsbn: ~0.1.1 + getpass: ^0.1.1 + jsbn: ~0.1.0 + safer-buffer: ^2.0.2 + tweetnacl: ~0.14.0 + bin: + sshpk-conv: bin/sshpk-conv + sshpk-sign: bin/sshpk-sign + sshpk-verify: bin/sshpk-verify + checksum: 01d43374eee3a7e37b3b82fdbecd5518cbb2e47ccbed27d2ae30f9753f22bd6ffad31225cb8ef013bc3fb7785e686cea619203ee1439a228f965558c367c3cfa + languageName: node + linkType: hard + "ssri@npm:^10.0.0": version: 10.0.5 resolution: "ssri@npm:10.0.5" @@ -13657,6 +13938,16 @@ __metadata: languageName: node linkType: hard +"tough-cookie@npm:~2.5.0": + version: 2.5.0 + resolution: "tough-cookie@npm:2.5.0" + dependencies: + psl: ^1.1.28 + punycode: ^2.1.1 + checksum: 16a8cd090224dd176eee23837cbe7573ca0fa297d7e468ab5e1c02d49a4e9a97bb05fef11320605eac516f91d54c57838a25864e8680e27b069a5231d8264977 + languageName: node + linkType: hard + "tr46@npm:~0.0.3": version: 0.0.3 resolution: "tr46@npm:0.0.3" @@ -13701,6 +13992,13 @@ __metadata: languageName: node linkType: hard +"tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0": + version: 0.14.5 + resolution: "tweetnacl@npm:0.14.5" + checksum: 6061daba1724f59473d99a7bb82e13f211cdf6e31315510ae9656fefd4779851cb927adad90f3b488c8ed77c106adc0421ea8055f6f976ff21b27c5c4e918487 + languageName: node + linkType: hard + "type-fest@npm:^0.20.2": version: 0.20.2 resolution: "type-fest@npm:0.20.2" @@ -14027,6 +14325,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^3.3.2": + version: 3.4.0 + resolution: "uuid@npm:3.4.0" + bin: + uuid: ./bin/uuid + checksum: 58de2feed61c59060b40f8203c0e4ed7fd6f99d42534a499f1741218a1dd0c129f4aa1de797bcf822c8ea5da7e4137aa3673431a96dae729047f7aca7b27866f + languageName: node + linkType: hard + "uuid@npm:^8.3.2": version: 8.3.2 resolution: "uuid@npm:8.3.2" @@ -14059,6 +14366,17 @@ __metadata: languageName: node linkType: hard +"verror@npm:1.10.0": + version: 1.10.0 + resolution: "verror@npm:1.10.0" + dependencies: + assert-plus: ^1.0.0 + core-util-is: 1.0.2 + extsprintf: ^1.2.0 + checksum: c431df0bedf2088b227a4e051e0ff4ca54df2c114096b0c01e1cbaadb021c30a04d7dd5b41ab277bcd51246ca135bf931d4c4c796ecae7a4fef6d744ecef36ea + languageName: node + linkType: hard + "vite@npm:4.4.9": version: 4.4.9 resolution: "vite@npm:4.4.9" @@ -14515,6 +14833,23 @@ __metadata: languageName: node linkType: hard +"xml2js@npm:^0.4.19": + version: 0.4.23 + resolution: "xml2js@npm:0.4.23" + dependencies: + sax: ">=0.6.0" + xmlbuilder: ~11.0.0 + checksum: ca0cf2dfbf6deeaae878a891c8fbc0db6fd04398087084edf143cdc83d0509ad0fe199b890f62f39c4415cf60268a27a6aed0d343f0658f8779bd7add690fa98 + languageName: node + linkType: hard + +"xmlbuilder@npm:~11.0.0": + version: 11.0.1 + resolution: "xmlbuilder@npm:11.0.1" + checksum: 7152695e16f1a9976658215abab27e55d08b1b97bca901d58b048d2b6e106b5af31efccbdecf9b07af37c8377d8e7e821b494af10b3a68b0ff4ae60331b415b0 + languageName: node + linkType: hard + "xtend@npm:^4.0.0, xtend@npm:~4.0.1": version: 4.0.2 resolution: "xtend@npm:4.0.2" diff --git a/infrastructure/.gitignore b/infrastructure/.gitignore new file mode 100644 index 00000000..fdd52eb4 --- /dev/null +++ b/infrastructure/.gitignore @@ -0,0 +1,11 @@ +base/.terraform +base/vars/* +!base/vars/terraform.tfvars + +state/.terraform +state/vars/* +!state/vars/terraform.tfvars + +state/terraform.tfstate +state/terraform.tfstate.backup + diff --git a/infrastructure/README.md b/infrastructure/README.md new file mode 100644 index 00000000..90baf6a5 --- /dev/null +++ b/infrastructure/README.md @@ -0,0 +1,47 @@ +# Architecture + +This solution is based on the following architecture: + +![Architecture](./architecture.png) + +The solution is composed of the following components: +- cms: a headless Strapi CMS that provides a REST API to manage the content of the website +- client: a Next.js application that consumes the CMS API and renders the website + +Both are deployed on AWS using the following services: +- ECR: to store the Docker images +- Elastic Beanstalk: to deploy the Docker images using a multi-container Docker environment +- EC2: to host the Docker images (managed by Elastic Beanstalk) +- ALB: to route the traffic to the EC2 instances and provide SSL termination +- RDS: to host the database + +Other AWS services are used internally by Elastic Beanstalk, for example: +- Autocaling: to scale the EC2 instances +- S3: to store the logs + +# Deployment + +The deployment is automated using a GH Action that builds the Docker images and deploys them to Elastic Beanstalk. + +# Infrastructure as Code + +The resources required to deploy the solution are defined in the `infrastructure` folder. The infrastructure is defined using Terraform. + +There are two Terraform projects in the `infrastructure` folder: +- state: to store the Terraform remote state in an S3 bucket +- base: to deploy the infrastructure, using the remote state stored in the S3 bucket + +The `state` project must be deployed first, and then the `base` project can be deployed. + +# Elastic Beanstalk customisation + +Customisation of the Elastic Beanstalk environment is done partly at the point of provisioning. For example, the instance types of the EC2 and RDS instances. + +However, it is also possible to customise the environment after it has been provisioned. For example, the environment variables of the EC2 instances, nginx configurations. + +The customisation options for Amazon Linux 2 platform can be found here: +https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platforms-linux-extend.html + +We're using the following customisation options, using the ".platform" folder: +- .platform/nginx/conf.d/platform.conf: to configure nginx to proxy the requests to the CMS and client applications +- .ebextensions/authorized_keys.config: to add public SSH keys to the EC2 instances diff --git a/infrastructure/architecture.png b/infrastructure/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..a4b9d48208721849e2368a7f9cf7c6f1bcc89cf6 GIT binary patch literal 89330 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⪼9CJJ>&F; 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�V>BI0{pdb@{qIe)e;^V5;SQ4 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