From c7eb16116ad07babd220106d63a1df97445d27f4 Mon Sep 17 00:00:00 2001 From: Daniel Henkel <9447057+dhenkel92@users.noreply.github.com> Date: Sat, 4 May 2024 13:57:56 +0200 Subject: [PATCH] make it work (#114) --- .dockerignore | 1 + async-server-provisioner/Dockerfile | 14 +- async-server-provisioner/config/default.yml | 2 +- .../src/ServiceLocator.ts | 2 +- .../src/adapters/GraphQlAdapter.ts | 7 +- .../repositories/GameDeploymentRepository.ts | 11 +- backend/.dockerignore | 2 + backend/.strapi-updater.json | 8 +- backend/Dockerfile-prod-be | 4 +- backend/Dockerfile-prod-fe | 8 +- backend/config/admin.js | 3 +- backend/package-lock.json | 265 +++++++++++++++++- backend/package.json | 2 + .../prod-patches/@strapi+admin+4.24.0.patch | 13 + .../roles/admin-server/tasks/certbot.yml | 2 +- .../roles/admin-server/templates/deploy | 4 +- .../admin-server/templates/docker-compose.yml | 2 - .../admin-server/templates/mysql.service | 2 +- .../roles/base-server/tasks/docker.yml | 23 +- .../docker/proxy-container/files/nginx.conf | 4 + .../00-aws-platform/.terraform.lock.hcl | 64 ++--- .../files/async-server-provisioner.json | 11 +- .../terraform/00-aws-platform/main.tf | 8 +- .../terraform/00-aws-platform/outputs.tf | 6 +- .../.terraform.lock.hcl | 90 +++--- .../cloud-game-server/.terraform.lock.hcl | 64 +++++ .../files/cloud_game_server_init.sh | 2 +- .../cloud-game-server/main.tf | 14 +- .../terraform/01-game-cloud-platform/main.tf | 18 +- .../01-game-cloud-platform/terraform.tfvars | 4 +- .../01-game-cloud-platform/versions.tf | 3 +- react-frontend/Dockerfile | 2 +- 32 files changed, 509 insertions(+), 156 deletions(-) create mode 100644 .dockerignore create mode 100644 backend/.dockerignore create mode 100644 backend/prod-patches/@strapi+admin+4.24.0.patch create mode 100644 infrastructure/terraform/01-game-cloud-platform/cloud-game-server/.terraform.lock.hcl diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..47327e8 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +*/**/.terraform* diff --git a/async-server-provisioner/Dockerfile b/async-server-provisioner/Dockerfile index 5771424..a237faf 100644 --- a/async-server-provisioner/Dockerfile +++ b/async-server-provisioner/Dockerfile @@ -1,4 +1,4 @@ -FROM node:14.17.0-stretch as build +FROM node:21.7-bullseye-slim as build ENV NODE_ENV=development WORKDIR /usr/src/app @@ -11,17 +11,17 @@ RUN npm ci COPY async-server-provisioner/ . RUN npm run build -FROM node:14.17.0-stretch +FROM node:21.7-bullseye-slim ENV NODE_ENV=production WORKDIR /usr/src/app RUN apt-get update \ - && apt-get install -y wget unzip \ - && wget https://releases.hashicorp.com/terraform/1.1.9/terraform_1.1.9_linux_amd64.zip -O /root/terraform.zip \ - && unzip -d /root/ /root/terraform.zip \ - && mv /root/terraform /usr/bin/terraform \ - && wget https://github.com/gruntwork-io/terragrunt/releases/download/v0.36.7/terragrunt_linux_amd64 -O /usr/bin/terragrunt \ + && apt-get install -y wget curl unzip \ + && curl --proto '=https' --tlsv1.2 -fsSL https://get.opentofu.org/install-opentofu.sh -o install-opentofu.sh \ + && chmod +x install-opentofu.sh \ + && ./install-opentofu.sh --install-method deb \ + && wget https://github.com/gruntwork-io/terragrunt/releases/download/v0.58.0/terragrunt_linux_amd64 -O /usr/bin/terragrunt \ && chmod +x /usr/bin/terragrunt COPY --from=build /usr/src/app/package.json . diff --git a/async-server-provisioner/config/default.yml b/async-server-provisioner/config/default.yml index 036eded..56f2fa9 100644 --- a/async-server-provisioner/config/default.yml +++ b/async-server-provisioner/config/default.yml @@ -19,6 +19,6 @@ datadog: api_key: placeholder cloudGame: - ansibleBranch: create-restore-backups + ansibleBranch: main apiUrl: http://host.docker.internal:1337 apiToken: placeholder diff --git a/async-server-provisioner/src/ServiceLocator.ts b/async-server-provisioner/src/ServiceLocator.ts index e3c7176..51a7892 100644 --- a/async-server-provisioner/src/ServiceLocator.ts +++ b/async-server-provisioner/src/ServiceLocator.ts @@ -126,7 +126,7 @@ export default class ServiceLocator { } const adapter = await this.getMySqlAdapter(); const dirtyAdapter = await this.getDirtyMySqlAdapter(); - const repo = new GameDeploymentRepository(adapter, dirtyAdapter); + const repo = new GameDeploymentRepository(adapter, dirtyAdapter, this.getLogger()); this.setCache('GameDeploymentRepository', repo); return repo; diff --git a/async-server-provisioner/src/adapters/GraphQlAdapter.ts b/async-server-provisioner/src/adapters/GraphQlAdapter.ts index 2831889..72789dc 100644 --- a/async-server-provisioner/src/adapters/GraphQlAdapter.ts +++ b/async-server-provisioner/src/adapters/GraphQlAdapter.ts @@ -1,9 +1,11 @@ import * as config from 'config'; +import pino from 'pino'; const apiUrl = config.get('cloudGame.apiUrl'); -export async function gqlQuery(query: string, data: any): Promise { - const res = await fetch(`${apiUrl}/graphql`, { +export async function gqlQuery(logger: pino.Logger, query: string, data: any): Promise { + logger.child({ url: `${apiUrl}/graphql`, query, data }).info('Fetch API data'); + return fetch(`${apiUrl}/graphql`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -15,5 +17,4 @@ export async function gqlQuery(query: string, data: any): Promise { variables: data, }), }); - return res.json(); } diff --git a/async-server-provisioner/src/repositories/GameDeploymentRepository.ts b/async-server-provisioner/src/repositories/GameDeploymentRepository.ts index a9a2965..0b0bb9e 100644 --- a/async-server-provisioner/src/repositories/GameDeploymentRepository.ts +++ b/async-server-provisioner/src/repositories/GameDeploymentRepository.ts @@ -3,6 +3,7 @@ import { GameDeployment, gameDeploymentFactory } from '../entities/GameDeploymen import { v4 } from 'uuid'; import { TerraformGSOutput } from '../services/TerraformService'; import { gqlQuery } from '../adapters/GraphQlAdapter'; +import pino from 'pino'; const query = ` query($id: ID) { @@ -54,7 +55,8 @@ query($id: ID) { export default class GameDeploymentRepository { constructor( private mysqlAdapter: MySqlAdapter, - private dirtyMysqlAdapter: MySqlAdapter + private dirtyMysqlAdapter: MySqlAdapter, + private logger: pino.Logger ) {} public async getDeployment(): Promise { @@ -83,7 +85,12 @@ export default class GameDeploymentRepository { return null; } - const data = await gqlQuery(query, { id: rows[0].gd_id }); + const res = await gqlQuery(this.logger, query, { id: rows[0].gd_id }); + const data = await res.json(); + if (data.errors && data.errors.length != 0) { + this.logger.child({ errors: data.errors }).error('Failed to fetch game deployment data'); + return null; + } const gameDeployment = gameDeploymentFactory(uuid, data); // eslint-disable-next-line no-console console.log(JSON.stringify(gameDeployment, null, 2)); diff --git a/backend/.dockerignore b/backend/.dockerignore new file mode 100644 index 0000000..dd87e2d --- /dev/null +++ b/backend/.dockerignore @@ -0,0 +1,2 @@ +node_modules +build diff --git a/backend/.strapi-updater.json b/backend/.strapi-updater.json index de6ce50..cce03c3 100644 --- a/backend/.strapi-updater.json +++ b/backend/.strapi-updater.json @@ -1,5 +1,5 @@ { - "latest": "4.24.0", - "lastUpdateCheck": 1714554785847, - "lastNotification": 1655564816994 -} \ No newline at end of file + "latest": "4.24.1", + "lastUpdateCheck": 1714740073758, + "lastNotification": 1714740179673 +} diff --git a/backend/Dockerfile-prod-be b/backend/Dockerfile-prod-be index e058abb..89d5861 100644 --- a/backend/Dockerfile-prod-be +++ b/backend/Dockerfile-prod-be @@ -1,4 +1,4 @@ -FROM node:16.14-bullseye as build +FROM node:21.7-bullseye-slim as build ENV NODE_ENV=production WORKDIR /usr/src/app @@ -10,7 +10,7 @@ RUN npm ci COPY backend . -FROM node:16.14-bullseye +FROM node:21.7-bullseye-slim WORKDIR /usr/src/app diff --git a/backend/Dockerfile-prod-fe b/backend/Dockerfile-prod-fe index 6748ebe..a8c507e 100644 --- a/backend/Dockerfile-prod-fe +++ b/backend/Dockerfile-prod-fe @@ -1,8 +1,11 @@ -FROM node:16.14-bullseye as build +FROM node:21.7-bullseye-slim as build -ARG ADMIN_URL=http://localhost:1337/admin +ARG ADMIN_URL=/ ENV ADMIN_URL=$ADMIN_URL +ARG SERVE_ADMIN_PANEL=false +ENV SERVE_ADMIN_PANEL=$SERVE_ADMIN_PANEL + ARG SERVER_URL=http://localhost:1337 ENV SERVER_URL=$SERVER_URL @@ -11,6 +14,7 @@ WORKDIR /usr/src/app COPY package.json . COPY package-lock.json . +COPY prod-patches patches RUN npm ci diff --git a/backend/config/admin.js b/backend/config/admin.js index 10f8495..2981622 100644 --- a/backend/config/admin.js +++ b/backend/config/admin.js @@ -1,5 +1,6 @@ module.exports = ({ env }) => ({ - url: env("ADMIN_URL", "http://localhost:1337/admin"), + url: env("ADMIN_URL", "/admin/"), + serveAdminPanel: env("SERVE_ADMIN_PANEL", true), auth: { secret: env("ADMIN_JWT_SECRET"), }, diff --git a/backend/package-lock.json b/backend/package-lock.json index 70df489..e52438e 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -21,6 +21,9 @@ "strapi-plugin-entity-relationship-chart": "^4.14.6", "styled-components": "^5.3.11" }, + "devDependencies": { + "patch-package": "^8.0.0" + }, "engines": { "node": ">=12.x.x <=16.x.x", "npm": ">=6.0.0" @@ -5085,6 +5088,12 @@ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -5605,6 +5614,15 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -6203,12 +6221,18 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8788,6 +8812,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "dependencies": { + "micromatch": "^4.0.2" + } + }, "node_modules/findup-sync": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", @@ -10995,6 +11028,30 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, + "node_modules/json-stable-stringify": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz", + "integrity": "sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "isarray": "^2.0.5", + "jsonify": "^0.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/json-stable-stringify/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -11017,6 +11074,15 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/jsonwebtoken": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", @@ -11110,6 +11176,15 @@ "node": ">=0.10.0" } }, + "node_modules/klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11" + } + }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -13369,6 +13444,170 @@ "node": ">= 0.4.0" } }, + "node_modules/patch-package": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.0.tgz", + "integrity": "sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA==", + "dev": true, + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^4.1.2", + "ci-info": "^3.7.0", + "cross-spawn": "^7.0.3", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^9.0.0", + "json-stable-stringify": "^1.0.2", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.6", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^7.5.3", + "slash": "^2.0.0", + "tmp": "^0.0.33", + "yaml": "^2.2.2" + }, + "bin": { + "patch-package": "index.js" + }, + "engines": { + "node": ">=14", + "npm": ">5" + } + }, + "node_modules/patch-package/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/patch-package/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/patch-package/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/patch-package/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/patch-package/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/patch-package/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/patch-package/node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/patch-package/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/patch-package/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/patch-package/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/patch-package/node_modules/yaml": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.2.tgz", + "integrity": "sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/path-case": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", @@ -15364,6 +15603,22 @@ "randombytes": "^2.1.0" } }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", diff --git a/backend/package.json b/backend/package.json index d0cd67c..a06f966 100644 --- a/backend/package.json +++ b/backend/package.json @@ -10,6 +10,7 @@ "scripts": { "build": "strapi build", "develop": "strapi develop", + "postinstall": "patch-package", "start": "strapi start", "strapi": "strapi" }, @@ -23,6 +24,7 @@ "@strapi/strapi": "^4.24.0", "dd-trace": "^5.12.0", "mysql2": "3.9.7", + "patch-package": "^8.0.0", "react": "^18.3.1", "react-dom": "^18.3.1", "react-router-dom": "^5.3.4", diff --git a/backend/prod-patches/@strapi+admin+4.24.0.patch b/backend/prod-patches/@strapi+admin+4.24.0.patch new file mode 100644 index 0000000..c913736 --- /dev/null +++ b/backend/prod-patches/@strapi+admin+4.24.0.patch @@ -0,0 +1,13 @@ +diff --git a/node_modules/@strapi/admin/dist/_chunks/index-sNH2VWbC.js b/node_modules/@strapi/admin/dist/_chunks/index-sNH2VWbC.js +index b284917..81e03db 100644 +--- a/node_modules/@strapi/admin/dist/_chunks/index-sNH2VWbC.js ++++ b/node_modules/@strapi/admin/dist/_chunks/index-sNH2VWbC.js +@@ -619,7 +619,7 @@ const createBuildContext = async ({ + const { bundler = "webpack", ...restOptions } = options; + const buildContext = { + appDir, +- basePath: `${adminPath}/`, ++ basePath: `${adminPath}`, + bundler, + customisations, + cwd, diff --git a/infrastructure/ansible/roles/admin-server/tasks/certbot.yml b/infrastructure/ansible/roles/admin-server/tasks/certbot.yml index e6f5f2c..41a4e69 100644 --- a/infrastructure/ansible/roles/admin-server/tasks/certbot.yml +++ b/infrastructure/ansible/roles/admin-server/tasks/certbot.yml @@ -8,7 +8,7 @@ mode: 775 - name: Create Certs for Domains - shell: /usr/bin/certbot certonly --dns-route53 --dns-route53-propagation-seconds 30 -d {{ item }} + shell: /usr/bin/certbot certonly --register-unsafely-without-email --dns-route53 -d {{ item }} args: creates: /etc/letsencrypt/live/{{ item }}/fullchain.pem loop: "{{ domains }}" diff --git a/infrastructure/ansible/roles/admin-server/templates/deploy b/infrastructure/ansible/roles/admin-server/templates/deploy index daf7a09..9e909f2 100644 --- a/infrastructure/ansible/roles/admin-server/templates/deploy +++ b/infrastructure/ansible/roles/admin-server/templates/deploy @@ -4,5 +4,5 @@ set -ex aws ecr get-login-password | docker login --username AWS --password-stdin 220002198733.dkr.ecr.eu-central-1.amazonaws.com -docker-compose -f /root/docker-compose.yaml pull -docker-compose -f /root/docker-compose.yaml up -d +docker compose -f /root/docker-compose.yaml pull +docker compose -f /root/docker-compose.yaml up -d diff --git a/infrastructure/ansible/roles/admin-server/templates/docker-compose.yml b/infrastructure/ansible/roles/admin-server/templates/docker-compose.yml index 7e73147..2f09dc5 100644 --- a/infrastructure/ansible/roles/admin-server/templates/docker-compose.yml +++ b/infrastructure/ansible/roles/admin-server/templates/docker-compose.yml @@ -1,5 +1,3 @@ -version: '3' - services: proxy: image: {{ images.proxy }}:latest diff --git a/infrastructure/ansible/roles/admin-server/templates/mysql.service b/infrastructure/ansible/roles/admin-server/templates/mysql.service index 027a5db..e9aded1 100644 --- a/infrastructure/ansible/roles/admin-server/templates/mysql.service +++ b/infrastructure/ansible/roles/admin-server/templates/mysql.service @@ -15,7 +15,7 @@ ExecStart=docker run -i \ -e "MYSQL_USER=strapi" \ -e "MYSQL_PASSWORD={{ mysql.strapi_pw }}" \ -v /var/lib/mysql:/var/lib/mysql \ - percona:5.7.31 + percona:8.0-centos ExecStop=docker stop mysql Restart=always diff --git a/infrastructure/ansible/roles/base-server/tasks/docker.yml b/infrastructure/ansible/roles/base-server/tasks/docker.yml index 489cfc2..f511543 100644 --- a/infrastructure/ansible/roles/base-server/tasks/docker.yml +++ b/infrastructure/ansible/roles/base-server/tasks/docker.yml @@ -2,11 +2,11 @@ - name: Install required packages apt: pkg: - - apt-transport-https - - ca-certificates - - curl - - gnupg-agent - - software-properties-common + - apt-transport-https + - ca-certificates + - curl + - gnupg-agent + - software-properties-common state: present update_cache: true @@ -24,14 +24,9 @@ - name: Install Docker apt: pkg: - - docker-ce - - docker-ce-cli - - containerd.io + - docker-ce + - docker-ce-cli + - containerd.io + - docker-compose-plugin state: present update_cache: true - -- name: Install Docker-compose - get_url: - url: https://github.com/docker/compose/releases/download/1.27.4/docker-compose-Linux-x86_64 - dest: /usr/local/bin/docker-compose - mode: 755 diff --git a/infrastructure/docker/proxy-container/files/nginx.conf b/infrastructure/docker/proxy-container/files/nginx.conf index e444936..b2d4f1e 100644 --- a/infrastructure/docker/proxy-container/files/nginx.conf +++ b/infrastructure/docker/proxy-container/files/nginx.conf @@ -23,6 +23,10 @@ http { types_hash_max_size 2048; # server_tokens off; + proxy_buffer_size 128k; + proxy_buffers 4 256k; + proxy_busy_buffers_size 256k; + # server_names_hash_bucket_size 64; # server_name_in_redirect off; diff --git a/infrastructure/terraform/00-aws-platform/.terraform.lock.hcl b/infrastructure/terraform/00-aws-platform/.terraform.lock.hcl index 826938b..e58a438 100644 --- a/infrastructure/terraform/00-aws-platform/.terraform.lock.hcl +++ b/infrastructure/terraform/00-aws-platform/.terraform.lock.hcl @@ -1,42 +1,40 @@ -# This file is maintained automatically by "terraform init". +# This file is maintained automatically by "tofu init". # Manual edits may be lost in future updates. -provider "registry.terraform.io/hashicorp/aws" { - version = "2.70.0" - constraints = "~> 2.0" +provider "registry.opentofu.org/hashicorp/aws" { + version = "5.48.0" hashes = [ - "h1:mM6eIaG1Gcrk47TveViXBO9YjY6nDaGukbED2bdo8Mk=", - "zh:01a5f351146434b418f9ff8d8cc956ddc801110f1cc8b139e01be2ff8c544605", - "zh:1ec08abbaf09e3e0547511d48f77a1e2c89face2d55886b23f643011c76cb247", - "zh:606d134fef7c1357c9d155aadbee6826bc22bc0115b6291d483bc1444291c3e1", - "zh:67e31a71a5ecbbc96a1a6708c9cc300bbfe921c322320cdbb95b9002026387e1", - "zh:75aa59ae6f0834ed7142c81569182a658e4c22724a34db5d10f7545857d8db0c", - "zh:76880f29fca7a0a3ff1caef31d245af2fb12a40709d67262e099bc22d039a51d", - "zh:aaeaf97ffc1f76714e68bc0242c7407484c783d604584c04ad0b267b6812b6dc", - "zh:ae1f88d19cc85b2e9b6ef71994134d55ef7830fd02f1f3c58c0b3f2b90e8b337", - "zh:b155bdda487461e7b3d6e3a8d5ce5c887a047e4d983512e81e2c8266009f2a1f", - "zh:ba394a7c391a26c4a91da63ad680e83bde0bc1ecc0a0856e26e9d62a4e77c408", - "zh:e243c9d91feb0979638f28eb26f89ebadc179c57a2bd299b5729fb52bd1902f2", - "zh:f6c05e20d9a3fba76ca5f47206dde35e5b43b6821c6cbf57186164ce27ba9f15", + "h1:UL6B4QXA/ENh05gOYhJGAUWKvgVRhfmnzqQMobSEh9A=", + "zh:212b33b4270a4f20025dec83b181b0e8044ef382491e0c89ad07c64d6dfacff0", + "zh:2dd2dadd6fc8752edb6241bdac1bdd49ce64384527dc335a021d61d3870a0393", + "zh:3d449e369958ab3d0afe2db6be5de22061f8635fe176771c98af41a7f770f1b5", + "zh:3dd6ca9a102c6164683800d8b1b5def29a51d575b5223063961125de81cca136", + "zh:422586cf2ea78f8464c97b95f153acdc84b660b2eb474a100338e360593e2d84", + "zh:70ea10113b724cc69f83e2c1fd65d7d304aaf6bd9f6a45cd1622a5f36506690c", + "zh:84a48c4a7eb8498beb9f5d78bef5e58516e11a8df131042fb43d3dec62dc899b", + "zh:9724c095fb8d8d7695769a828e6cc0de95da264487c91af39a645713b293323c", + "zh:ad9117ef8c7fd8e26aab482a286aa2e641e4887d1816117caa1fd7eaff6a050c", + "zh:ff32af11624e5104fd4ddd38cecd1beb09da9a7be7f49b0d496080667882b90e", ] } -provider "registry.terraform.io/hetznercloud/hcloud" { - version = "1.26.2" +provider "registry.opentofu.org/hetznercloud/hcloud" { + version = "1.47.0" hashes = [ - "h1:U1RJI7YKEfyDWBSjmcCU++uAIp81HCGvbuk5g75NNUw=", - "zh:17cd6983c85e6dcc0e70bac525d29b9aedd09805fd90214aa556c84d0af13061", - "zh:2b28d90522a91d91bb0b189317c34b8374d8c479e7a2b9ca0f6d0d1d14286303", - "zh:35581626f3b700897fbe1697ddc8ff274079b7e2b6aefc20ca2316f621e212d5", - "zh:3a7a2dc5a85957ae0c1e2608c5164f3d6cbc5be78cc343231c3a57307e839c0f", - "zh:592eabdc6486bdcfa724cfe86f374b8ee9a416f3489704af99ee3a3901dfa973", - "zh:62818a42119f6359cdf581c9d00d1d2d4acfda11a1b362a747963886ed226ba5", - "zh:8d3b70ddb4ed0242a0ed16013b991314fe7793afd26155145dcd5f353381b493", - "zh:9188e9aecd9407e25fa7f5655eb1eaab7ae6960a8407357c968d9cca69f50805", - "zh:bd00e893950b70e1c950d19249febbf8fb9c4c2d47f4414bc5c256a5c0d4148c", - "zh:c7329d5fe20bd4cf2975c0aafb31ae722b4bb092ee654a31261bd8c080de0127", - "zh:ddd2d132fc0d1a8169e4c4d95e19b753ed4c9bc8a6d2fbc045c436a530638c69", - "zh:e28807a7c2f9a4975638fa7a12b9f0525396cccf5b86d1c2dd00f6f073cc3168", - "zh:ec828709926eadf2f2f1526d1bd8304435ef42875cf5b4c7005854b8206c5a34", + "h1:KQbtq1sXF4deoc0DKgjyyJMdIuHfhfhAPkVV0DlTMRI=", + "zh:0759f0c23d0e59baab3382320eef4eb314e0c5967b6ef67ff07135da07a97b34", + "zh:0e9ca84c4059d6d7e2c9f13d3c2b1cd91f7d9a47bedcb4b80c7c77d536eff887", + "zh:17a033ac4650a39ddacf3265a449edabaea528f81542c4e63e254272d5aac340", + "zh:2997c76a500e42b7519b24fa1f8646d9baab70c68277f80394560d3e1fd06e6d", + "zh:37f3fe7bb34cac63c69123e43e5426bab75816b3665dbe7125276a8d2ee6b2d8", + "zh:45d4b04dc470f24ad96c1c0b6636ea5422c659004f3e472c863bc50130fabf25", + "zh:46df99d972a78af6875565e53a73df66d870c474a20cd90e9e0a3092aa25197f", + "zh:4b5bb8d49366ad895c6c767efe16a1b8143802414abfe3fdb1184cbbecf424eb", + "zh:55c6199eb401c4b0a6c948ceac8b50f352e252e1c985903ed173bf26ad0f109e", + "zh:7b6efe897bffa37248064155a699e67953350b5b9a5476456c0160ce59254557", + "zh:7bc004bcb649ce1ec70e2cf848392e10a1edbcbf11b3292a4cc5c5d49bd769e4", + "zh:e1b17b7595f158fbb3021afa8869b541b5c10bdd2d8d2b2b3eaa82200b104ddd", + "zh:f741ca40e8e99a3e4114ad108ea2b5a5bccbedb008326c7f647f250580e69c0e", + "zh:fae9c7f8d08a447bb0972529f6db06999c35391046320206041a988aeca6b54c", ] } diff --git a/infrastructure/terraform/00-aws-platform/identity/files/async-server-provisioner.json b/infrastructure/terraform/00-aws-platform/identity/files/async-server-provisioner.json index 90f3540..9a8e6c5 100644 --- a/infrastructure/terraform/00-aws-platform/identity/files/async-server-provisioner.json +++ b/infrastructure/terraform/00-aws-platform/identity/files/async-server-provisioner.json @@ -25,10 +25,7 @@ { "Sid": "AllowGetAndPutS3ActionsOnSpecifiedTerragruntBucketPath", "Effect": "Allow", - "Action": [ - "s3:PutObject", - "s3:GetObject" - ], + "Action": ["s3:PutObject", "s3:GetObject"], "Resource": "arn:aws:s3:::cloud-game-tf-states/*" }, { @@ -41,6 +38,12 @@ "dynamodb:DeleteItem" ], "Resource": "arn:aws:dynamodb:eu-central-1:220002198733:table/terraform-locks" + }, + { + "Sid": "AllowS3DefaultKMSKey", + "Resource": ["*"], + "Effect": "Allow", + "NotAction": ["kms:GenerateDataKey"] } ] } diff --git a/infrastructure/terraform/00-aws-platform/main.tf b/infrastructure/terraform/00-aws-platform/main.tf index 6dd8742..8eea04e 100644 --- a/infrastructure/terraform/00-aws-platform/main.tf +++ b/infrastructure/terraform/00-aws-platform/main.tf @@ -35,7 +35,7 @@ module "identity" { tags = var.tags } -module "ecr" { - source = "./container-registry" - tags = local.tags -} +# module "ecr" { +# source = "./container-registry" +# tags = local.tags +# } diff --git a/infrastructure/terraform/00-aws-platform/outputs.tf b/infrastructure/terraform/00-aws-platform/outputs.tf index 28566b7..7868cd9 100644 --- a/infrastructure/terraform/00-aws-platform/outputs.tf +++ b/infrastructure/terraform/00-aws-platform/outputs.tf @@ -3,6 +3,6 @@ output "access_keys" { value = module.identity.access_keys } -output "images" { - value = module.ecr.images -} +# output "images" { +# value = module.ecr.images +# } diff --git a/infrastructure/terraform/01-game-cloud-platform/.terraform.lock.hcl b/infrastructure/terraform/01-game-cloud-platform/.terraform.lock.hcl index 424e680..c1b805e 100644 --- a/infrastructure/terraform/01-game-cloud-platform/.terraform.lock.hcl +++ b/infrastructure/terraform/01-game-cloud-platform/.terraform.lock.hcl @@ -1,59 +1,57 @@ -# This file is maintained automatically by "terraform init". +# This file is maintained automatically by "tofu init". # Manual edits may be lost in future updates. -provider "registry.terraform.io/hashicorp/aws" { - version = "3.44.0" +provider "registry.opentofu.org/hashicorp/aws" { + version = "5.48.0" hashes = [ - "h1:VOVZWybe1x0E4qyawTwt7jXVBRUplTrzVFHim217DqI=", - "zh:0680315b29a140e9b7e4f5aeed3f2445abdfab31fc9237f34dcad06de4f410df", - "zh:13811322a205fb4a0ee617f0ae51ec94176befdf569235d0c7064db911f0acc7", - "zh:25e427a1cfcb1d411bc12040cf0684158d094416ecf18889a41196bacc761729", - "zh:40cd6acd24b060823f8d116355d8f844461a11925796b1757eb2ee18abc0bc7c", - "zh:94e2463eef555c388cd27f6e85ad803692d6d80ffa621bdc382ab119001d4de4", - "zh:aadc3bc216b14839e85b463f07b8507920ace5f202a608e4a835df23711c8a0d", - "zh:ab50dc1242af5a8fcdb18cf89beeaf2b2146b51ecfcecdbea033913a5f4c1c14", - "zh:ad48bbf4af66b5d48ca07c5c558d2f5724311db4dd943c1c98a7f3f107e03311", - "zh:ad76796c2145a7aaec1970a5244f5c0a9d200556121e2c5b382f296597b1a03c", - "zh:cf0a2181356598f8a2abfeaf0cdf385bdeea7f2e52821c850a2a08b60c26b9f6", - "zh:f76801af6bc34fe4a5bf1c63fa0204e24b81691049efecd6baa1526593f03935", + "h1:UL6B4QXA/ENh05gOYhJGAUWKvgVRhfmnzqQMobSEh9A=", + "zh:212b33b4270a4f20025dec83b181b0e8044ef382491e0c89ad07c64d6dfacff0", + "zh:2dd2dadd6fc8752edb6241bdac1bdd49ce64384527dc335a021d61d3870a0393", + "zh:3d449e369958ab3d0afe2db6be5de22061f8635fe176771c98af41a7f770f1b5", + "zh:3dd6ca9a102c6164683800d8b1b5def29a51d575b5223063961125de81cca136", + "zh:422586cf2ea78f8464c97b95f153acdc84b660b2eb474a100338e360593e2d84", + "zh:70ea10113b724cc69f83e2c1fd65d7d304aaf6bd9f6a45cd1622a5f36506690c", + "zh:84a48c4a7eb8498beb9f5d78bef5e58516e11a8df131042fb43d3dec62dc899b", + "zh:9724c095fb8d8d7695769a828e6cc0de95da264487c91af39a645713b293323c", + "zh:ad9117ef8c7fd8e26aab482a286aa2e641e4887d1816117caa1fd7eaff6a050c", + "zh:ff32af11624e5104fd4ddd38cecd1beb09da9a7be7f49b0d496080667882b90e", ] } -provider "registry.terraform.io/hashicorp/random" { - version = "3.1.0" +provider "registry.opentofu.org/hashicorp/random" { + version = "3.6.1" hashes = [ - "h1:rKYu5ZUbXwrLG1w81k7H3nce/Ys6yAxXhWcbtk36HjY=", - "zh:2bbb3339f0643b5daa07480ef4397bd23a79963cc364cdfbb4e86354cb7725bc", - "zh:3cd456047805bf639fbf2c761b1848880ea703a054f76db51852008b11008626", - "zh:4f251b0eda5bb5e3dc26ea4400dba200018213654b69b4a5f96abee815b4f5ff", - "zh:7011332745ea061e517fe1319bd6c75054a314155cb2c1199a5b01fe1889a7e2", - "zh:738ed82858317ccc246691c8b85995bc125ac3b4143043219bd0437adc56c992", - "zh:7dbe52fac7bb21227acd7529b487511c91f4107db9cc4414f50d04ffc3cab427", - "zh:a3a9251fb15f93e4cfc1789800fc2d7414bbc18944ad4c5c98f466e6477c42bc", - "zh:a543ec1a3a8c20635cf374110bd2f87c07374cf2c50617eee2c669b3ceeeaa9f", - "zh:d9ab41d556a48bd7059f0810cf020500635bfc696c9fc3adab5ea8915c1d886b", - "zh:d9e13427a7d011dbd654e591b0337e6074eef8c3b9bb11b2e39eaaf257044fd7", - "zh:f7605bd1437752114baf601bdf6931debe6dc6bfe3006eb7e9bb9080931dca8a", + "h1:egGGMQ18ihxoFBTgL/6aRL2N5/0bTI738Mg+TTsvBHA=", + "zh:1208af24d1f66e858740812dd5da12e8951b1ca75cc6edb1975ba22bfdeefb1b", + "zh:19137e9b4d3c15e1d99d2352888b98ec0e69bd5b2e89049150379d7bbd115063", + "zh:26613834a1a8ac60390c7a4cbd4cb794b01dfe237d2b0c10f132f3e434a21e03", + "zh:2cbe4425918f3f401609d89e6381f7d120493d637a3d103d827f0c0fd00b1600", + "zh:44ef27a972540435efa88f323280f96d6ac77934079225e7fcc3560cc28aae59", + "zh:8c5d4ca7d1ce007f7c055807cde77aad4685eb807ff802c93ffbec8589068f17", + "zh:9a4fa908d6af48805c862cd4f3a1031d552b96d863a94263e390ac92915d74a9", + "zh:ba396849f0f6d488784f6039095634e1c84e67e31375f3d17218fcf8ce952cb8", + "zh:cb695db8798957bd64ce411f061307e39cb2baa69668b4d42ccf010db47d2e39", + "zh:d02704bf99a93dc0b1ca00bd6051df9c431fbe17cd662a1ab58db1b96264a26f", ] } -provider "registry.terraform.io/hetznercloud/hcloud" { - version = "1.26.2" - constraints = "1.26.2" +provider "registry.opentofu.org/hetznercloud/hcloud" { + version = "1.46.1" hashes = [ - "h1:U1RJI7YKEfyDWBSjmcCU++uAIp81HCGvbuk5g75NNUw=", - "zh:17cd6983c85e6dcc0e70bac525d29b9aedd09805fd90214aa556c84d0af13061", - "zh:2b28d90522a91d91bb0b189317c34b8374d8c479e7a2b9ca0f6d0d1d14286303", - "zh:35581626f3b700897fbe1697ddc8ff274079b7e2b6aefc20ca2316f621e212d5", - "zh:3a7a2dc5a85957ae0c1e2608c5164f3d6cbc5be78cc343231c3a57307e839c0f", - "zh:592eabdc6486bdcfa724cfe86f374b8ee9a416f3489704af99ee3a3901dfa973", - "zh:62818a42119f6359cdf581c9d00d1d2d4acfda11a1b362a747963886ed226ba5", - "zh:8d3b70ddb4ed0242a0ed16013b991314fe7793afd26155145dcd5f353381b493", - "zh:9188e9aecd9407e25fa7f5655eb1eaab7ae6960a8407357c968d9cca69f50805", - "zh:bd00e893950b70e1c950d19249febbf8fb9c4c2d47f4414bc5c256a5c0d4148c", - "zh:c7329d5fe20bd4cf2975c0aafb31ae722b4bb092ee654a31261bd8c080de0127", - "zh:ddd2d132fc0d1a8169e4c4d95e19b753ed4c9bc8a6d2fbc045c436a530638c69", - "zh:e28807a7c2f9a4975638fa7a12b9f0525396cccf5b86d1c2dd00f6f073cc3168", - "zh:ec828709926eadf2f2f1526d1bd8304435ef42875cf5b4c7005854b8206c5a34", + "h1:CuZcBfbdOZfcgnKC2nQXYWlM1YtDfbpYDjvPeOHwHUQ=", + "zh:0d8fb959c331b7cd9a13800198d65f61c604221b2fb05e0681c9cd432a6e2242", + "zh:31ab652fb504bff3fdee0de8e06cb4c7d08805f4d3e8430dac6a4ee8a52b949f", + "zh:493770ce314fc4f7b9536da077b217aa5af77b1d8c969639a257fda3dbd3e38b", + "zh:4c25ee2977d359db15c044a8bfeb00f64ca94a6bdea00774307768a9bad97996", + "zh:605c8e776cb69b1928c516ab1a9be9ea793c9405f038f224de5586db4983e621", + "zh:8c9b966a881f177199738253003dc1ee4944034598be4dfbb5465f6d28349c66", + "zh:8e6ec6e0f0572222f5a2d5748948c229a426408418c6500707711b1ae82fff1c", + "zh:a63e3ac7f84f0ad0c27399fb2ae4469570d9b216bbc06a89edeca6ff569f0ea0", + "zh:b03e6050ce2054665d824a02fcbe450cdfad29c082cf1d8adb29f8c138023457", + "zh:b40e03710694792cff0eb5ca3f7dc80ff0befd2957b0af3b248d36a4ac77293e", + "zh:bbd264b083a3f5e80a90c02ea3ec377231d030f4d9035bb0f1627f3b09504b00", + "zh:de2b119e4c39b3454199c34f4ce0fd60af11bd9012c46e2c907db53fd5969278", + "zh:e845750317897e45ab68e71326a43a7f143e0b5312aa9eba4fec907a3800a7f2", + "zh:eebc0085e7fa25d4eaf4e47be00dd7f64259f725ed86581d0acef8b8fde31b49", ] } diff --git a/infrastructure/terraform/01-game-cloud-platform/cloud-game-server/.terraform.lock.hcl b/infrastructure/terraform/01-game-cloud-platform/cloud-game-server/.terraform.lock.hcl new file mode 100644 index 0000000..7c5db67 --- /dev/null +++ b/infrastructure/terraform/01-game-cloud-platform/cloud-game-server/.terraform.lock.hcl @@ -0,0 +1,64 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/aws" { + version = "5.48.0" + hashes = [ + "h1:sdlIu2yp0/x9nyEgJcKOYDE95hMd6SFvcO8aWzJFAqE=", + "zh:0876d94be46be905d1f6c149461979cd6e9bec80d5ffad43fd6267fe7c3a924d", + "zh:3a853f887e6f61c2ba383c46e71bcec97ecd31d25a78dab08958f43bbbaecb86", + "zh:43235595e26dd131f00704b5b64a65c4e7c4984a559b30d4272170e1b78e99b7", + "zh:6866f7535ec2ef8fe6ed16eecee2e31418a2bd86cec73e1d18e47bd3bb87f68e", + "zh:756a4ed97f30ea6e8871c16446b24ce55601143a715e067b7f9ebdae8349da34", + "zh:793e8414962934be9805186874f207ca1dc8d162b6665e4938893ad827a545c6", + "zh:79b2f886507f21ff1b752ff140ed95ed551f389abf0c8177c7b5f5bbbd95da8e", + "zh:8653b1bc6f7e62404e02f940d962d0c2ba0c4dd4c28bd595945454cf348c2697", + "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", + "zh:9bd612f013c075685c129e5d0ec9243572cd51359599b7218459babe0e9b6ac7", + "zh:aabafe758ee8392f56d2c894017203de4dae38c1e3e0d274c54e194b9b8fccff", + "zh:aded7d6034115ca512b79ca17da65ebb8906e3b8def78dcbc0640142b0c05ca0", + "zh:ce383ee19b37666aba60db6b01cbe7a1fcbb40c6dd54d0cb36b2ba114ee5ae62", + "zh:ceaf1b998b9ced4b63f35da386358e4c7ad6def582438987c91bceffefb9e258", + "zh:d79225a9ae6a7391c33aa2d794bf9b167db66398c4f054f94d557615b051a40d", + ] +} + +provider "registry.terraform.io/hashicorp/random" { + version = "3.6.1" + hashes = [ + "h1:a+Goawwh6Qtg4/bRWzfDtIdrEFfPlnVy0y4LdUQY3nI=", + "zh:2a0ec154e39911f19c8214acd6241e469157489fc56b6c739f45fbed5896a176", + "zh:57f4e553224a5e849c99131f5e5294be3a7adcabe2d867d8a4fef8d0976e0e52", + "zh:58f09948c608e601bd9d0a9e47dcb78e2b2c13b4bda4d8f097d09152ea9e91c5", + "zh:5c2a297146ed6fb3fe934c800e78380f700f49ff24dbb5fb5463134948e3a65f", + "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", + "zh:7ce41e26f0603e31cdac849085fc99e5cd5b3b73414c6c6d955c0ceb249b593f", + "zh:8c9e8d30c4ef08ee8bcc4294dbf3c2115cd7d9049c6ba21422bd3471d92faf8a", + "zh:93e91be717a7ffbd6410120eb925ebb8658cc8f563de35a8b53804d33c51c8b0", + "zh:982542e921970d727ce10ed64795bf36c4dec77a5db0741d4665230d12250a0d", + "zh:b9d1873f14d6033e216510ef541c891f44d249464f13cc07d3f782d09c7d18de", + "zh:cfe27faa0bc9556391c8803ade135a5856c34a3fe85b9ae3bdd515013c0c87c1", + "zh:e4aabf3184bbb556b89e4b195eab1514c86a2914dd01c23ad9813ec17e863a8a", + ] +} + +provider "registry.terraform.io/hetznercloud/hcloud" { + version = "1.47.0" + hashes = [ + "h1:KQbtq1sXF4deoc0DKgjyyJMdIuHfhfhAPkVV0DlTMRI=", + "zh:0759f0c23d0e59baab3382320eef4eb314e0c5967b6ef67ff07135da07a97b34", + "zh:0e9ca84c4059d6d7e2c9f13d3c2b1cd91f7d9a47bedcb4b80c7c77d536eff887", + "zh:17a033ac4650a39ddacf3265a449edabaea528f81542c4e63e254272d5aac340", + "zh:2997c76a500e42b7519b24fa1f8646d9baab70c68277f80394560d3e1fd06e6d", + "zh:37f3fe7bb34cac63c69123e43e5426bab75816b3665dbe7125276a8d2ee6b2d8", + "zh:45d4b04dc470f24ad96c1c0b6636ea5422c659004f3e472c863bc50130fabf25", + "zh:46df99d972a78af6875565e53a73df66d870c474a20cd90e9e0a3092aa25197f", + "zh:4b5bb8d49366ad895c6c767efe16a1b8143802414abfe3fdb1184cbbecf424eb", + "zh:55c6199eb401c4b0a6c948ceac8b50f352e252e1c985903ed173bf26ad0f109e", + "zh:7b6efe897bffa37248064155a699e67953350b5b9a5476456c0160ce59254557", + "zh:7bc004bcb649ce1ec70e2cf848392e10a1edbcbf11b3292a4cc5c5d49bd769e4", + "zh:e1b17b7595f158fbb3021afa8869b541b5c10bdd2d8d2b2b3eaa82200b104ddd", + "zh:f741ca40e8e99a3e4114ad108ea2b5a5bccbedb008326c7f647f250580e69c0e", + "zh:fae9c7f8d08a447bb0972529f6db06999c35391046320206041a988aeca6b54c", + ] +} diff --git a/infrastructure/terraform/01-game-cloud-platform/cloud-game-server/files/cloud_game_server_init.sh b/infrastructure/terraform/01-game-cloud-platform/cloud-game-server/files/cloud_game_server_init.sh index b97d659..2047a69 100644 --- a/infrastructure/terraform/01-game-cloud-platform/cloud-game-server/files/cloud_game_server_init.sh +++ b/infrastructure/terraform/01-game-cloud-platform/cloud-game-server/files/cloud_game_server_init.sh @@ -40,4 +40,4 @@ chown -R 999:999 /var/lib/mysql rm -Rf /var/lib/mysql/lost+found -# ansible-playbook /root/ansible/game-server.yml --extra-vars "@/root/ansible/vars/game-server.yaml" +# ansible-playbook /root/ansible/admin-server.yml --extra-vars "@/root/ansible/vars/game-server.yaml" diff --git a/infrastructure/terraform/01-game-cloud-platform/cloud-game-server/main.tf b/infrastructure/terraform/01-game-cloud-platform/cloud-game-server/main.tf index 068da6c..c9411c1 100644 --- a/infrastructure/terraform/01-game-cloud-platform/cloud-game-server/main.tf +++ b/infrastructure/terraform/01-game-cloud-platform/cloud-game-server/main.tf @@ -16,14 +16,16 @@ module "firewall" { name = var.name rules = [ { - proto = "tcp" - port = "443" - source_ips = ["0.0.0.0/0"] + proto = "tcp" + port = "443" + source_ips = ["0.0.0.0/0"] + description = "https" }, { - proto = "tcp" - port = "22" - source_ips = ["0.0.0.0/0"] + proto = "tcp" + port = "22" + source_ips = ["0.0.0.0/0"] + description = "ssh" } ] } diff --git a/infrastructure/terraform/01-game-cloud-platform/main.tf b/infrastructure/terraform/01-game-cloud-platform/main.tf index 3ca1beb..f543091 100644 --- a/infrastructure/terraform/01-game-cloud-platform/main.tf +++ b/infrastructure/terraform/01-game-cloud-platform/main.tf @@ -40,12 +40,18 @@ module "network" { module "cloud_game_server" { source = "./cloud-game-server" - name = var.name - subnet_id = module.network.subnet_ids[0] - location = var.location - ssh_keys = module.ssh_keys.ids - cloud_game_server = var.cloud_game_server - container_images = data.terraform_remote_state.aws_platform.outputs.images + name = var.name + subnet_id = module.network.subnet_ids[0] + location = var.location + ssh_keys = module.ssh_keys.ids + cloud_game_server = var.cloud_game_server + container_images = { + proxy = "cloudgame/proxy" + consumer = "cloudgame/async-server-provisioner" + strapi_fe = "cloudgame/backend-admin" + strapi_be = "cloudgame/backend-api" + react_fe = "cloudgame/frontend" + } ecr_readonly_creds = data.terraform_remote_state.aws_platform.outputs.access_keys["ecr_readonly.cloud-game"] certbot_creds = data.terraform_remote_state.aws_platform.outputs.access_keys["certbot.cloud-game"] consumer_creds = data.terraform_remote_state.aws_platform.outputs.access_keys["async-server-provisioner.cloud-game"] diff --git a/infrastructure/terraform/01-game-cloud-platform/terraform.tfvars b/infrastructure/terraform/01-game-cloud-platform/terraform.tfvars index 307a0e2..6e63376 100644 --- a/infrastructure/terraform/01-game-cloud-platform/terraform.tfvars +++ b/infrastructure/terraform/01-game-cloud-platform/terraform.tfvars @@ -7,8 +7,8 @@ ssh_keys = { } cloud_game_server = { - image = "26563390" - server_type = "cx11" + image = "162785630" + server_type = "cx21" volume = { create = true size = 10 diff --git a/infrastructure/terraform/01-game-cloud-platform/versions.tf b/infrastructure/terraform/01-game-cloud-platform/versions.tf index 9c8451d..a70fba8 100644 --- a/infrastructure/terraform/01-game-cloud-platform/versions.tf +++ b/infrastructure/terraform/01-game-cloud-platform/versions.tf @@ -4,8 +4,7 @@ terraform { source = "hashicorp/aws" } hcloud = { - source = "hetznercloud/hcloud" - version = "1.26.2" + source = "hetznercloud/hcloud" } } required_version = ">= 1.0" diff --git a/react-frontend/Dockerfile b/react-frontend/Dockerfile index 272306e..90ca04d 100644 --- a/react-frontend/Dockerfile +++ b/react-frontend/Dockerfile @@ -1,4 +1,4 @@ -FROM node:14.17.0-stretch as build +FROM node:21.7-bullseye-slim as build ARG API_URL=http://localhost:1337 ENV REACT_APP_API_URL=$API_URL