diff --git a/compose.yml b/compose.yml new file mode 100644 index 0000000..4d74047 --- /dev/null +++ b/compose.yml @@ -0,0 +1,18 @@ +services: + back: + build: ./nestjs/backend + ports: + - 3000:3000 + restart: unless-stopped + postgres: + image: postgres:latest + container_name: postgres_container + restart: always + environment: + POSTGRES_USER: nichtar + POSTGRES_PASSWORD: 1234 + POSTGRES_DB: todo + ports: + - "5432:5432" + volumes: + - postgres_data:/var/lib/postgresql/data \ No newline at end of file diff --git a/nestjs/backend/.dockerignore b/nestjs/backend/.dockerignore new file mode 100644 index 0000000..ed75a5e --- /dev/null +++ b/nestjs/backend/.dockerignore @@ -0,0 +1,3 @@ +dist/ +node_modules/ +test/ \ No newline at end of file diff --git a/nestjs/backend/Dockerfile b/nestjs/backend/Dockerfile new file mode 100644 index 0000000..3039b8c --- /dev/null +++ b/nestjs/backend/Dockerfile @@ -0,0 +1,15 @@ +FROM node:18.20.7-alpine + +WORKDIR /app + +COPY ./package*.json . + +RUN npm ci + +COPY . . + +RUN npm run build + +EXPOSE 3000 + +CMD ["npm", "run", "start"] \ No newline at end of file diff --git a/nestjs/backend/docker-compose.yml b/nestjs/backend/docker-compose.yml new file mode 100644 index 0000000..4f3d040 --- /dev/null +++ b/nestjs/backend/docker-compose.yml @@ -0,0 +1,34 @@ +version: "3.8" + +services: + backend: + container_name: nestjs_backend + build: . + ports: + - "3000:3000" + environment: + DB_HOST: 109.107.166.17 + DB_PORT: 5432 + DB_USER: nichtar + DB_PASSWORD: 6t30a72 + DB_NAME: todo + JWT_SECRET: your_secret_key + JWT_EXPIRES_IN: 3600s + depends_on: + - postgres + + postgres: + image: postgres:latest + container_name: postgres_container + restart: always + environment: + POSTGRES_USER: nichtar + POSTGRES_PASSWORD: 6t30a72 + POSTGRES_DB: todo + ports: + - "5432:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + +volumes: + postgres_data: diff --git a/nestjs/backend/package-lock.json b/nestjs/backend/package-lock.json index f39c844..f995063 100644 --- a/nestjs/backend/package-lock.json +++ b/nestjs/backend/package-lock.json @@ -15,6 +15,7 @@ "@nestjs/jwt": "^11.0.0", "@nestjs/passport": "^11.0.5", "@nestjs/platform-express": "^11.0.1", + "@nestjs/swagger": "^11.0.4", "@nestjs/typeorm": "^11.0.0", "bcrypt": "^5.1.1", "passport": "^0.7.0", @@ -22,6 +23,7 @@ "pg": "^8.13.3", "reflect-metadata": "^0.2.2", "rxjs": "^7.8.1", + "swagger-ui-express": "^5.0.1", "typeorm": "^0.3.20" }, "devDependencies": { @@ -1946,6 +1948,11 @@ "semver": "bin/semver.js" } }, + "node_modules/@microsoft/tsdoc": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.1.tgz", + "integrity": "sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==" + }, "node_modules/@napi-rs/nice": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.0.1.tgz", @@ -2395,6 +2402,25 @@ "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0" } }, + "node_modules/@nestjs/mapped-types": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.1.0.tgz", + "integrity": "sha512-W+n+rM69XsFdwORF11UqJahn4J3xi4g/ZEOlJNL6KoW5ygWSmBB2p0S2BZ4FQeS/NDH72e6xIcu35SfJnE8bXw==", + "peerDependencies": { + "@nestjs/common": "^10.0.0 || ^11.0.0", + "class-transformer": "^0.4.0 || ^0.5.0", + "class-validator": "^0.13.0 || ^0.14.0", + "reflect-metadata": "^0.1.12 || ^0.2.0" + }, + "peerDependenciesMeta": { + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, "node_modules/@nestjs/passport": { "version": "11.0.5", "resolved": "https://registry.npmjs.org/@nestjs/passport/-/passport-11.0.5.tgz", @@ -2443,6 +2469,38 @@ "typescript": ">=4.8.2" } }, + "node_modules/@nestjs/swagger": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-11.0.4.tgz", + "integrity": "sha512-wrdeQucHirv5hakCgFn34GANmqHG0//X0GF+VumYjEeE3H4AGtztbbgwnw/9XeqVM4mD2HjUFx5WYtJMpJvnWQ==", + "dependencies": { + "@microsoft/tsdoc": "0.15.1", + "@nestjs/mapped-types": "2.1.0", + "js-yaml": "4.1.0", + "lodash": "4.17.21", + "path-to-regexp": "8.2.0", + "swagger-ui-dist": "5.19.0" + }, + "peerDependencies": { + "@fastify/static": "^8.0.0", + "@nestjs/common": "^11.0.1", + "@nestjs/core": "^11.0.1", + "class-transformer": "*", + "class-validator": "*", + "reflect-metadata": "^0.1.12 || ^0.2.0" + }, + "peerDependenciesMeta": { + "@fastify/static": { + "optional": true + }, + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, "node_modules/@nestjs/testing": { "version": "11.0.10", "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-11.0.10.tgz", @@ -2561,6 +2619,12 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/@scarf/scarf": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.4.0.tgz", + "integrity": "sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==", + "hasInstallScript": true + }, "node_modules/@sec-ant/readable-stream": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", @@ -4167,7 +4231,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, "license": "Python-2.0" }, "node_modules/array-timsort": { @@ -8242,7 +8305,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -10947,6 +11009,28 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/swagger-ui-dist": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.19.0.tgz", + "integrity": "sha512-bSVZeYaqanMFeW5ZY3+EejFbsjkjazYxm1I7Lz3xayYz5XU3m2aUzvuPC0jI95WCQdduszHYV3ER4buQoy8DXA==", + "dependencies": { + "@scarf/scarf": "=1.4.0" + } + }, + "node_modules/swagger-ui-express": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-5.0.1.tgz", + "integrity": "sha512-SrNU3RiBGTLLmFU8GIJdOdanJTl4TOmT27tt3bWWHppqYmAZ6IDuEuBvMU6nZq0zLEe6b/1rACXCgLZqO6ZfrA==", + "dependencies": { + "swagger-ui-dist": ">=5.0.0" + }, + "engines": { + "node": ">= v0.10.32" + }, + "peerDependencies": { + "express": ">=4.0.0 || >=5.0.0-beta" + } + }, "node_modules/symbol-observable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", diff --git a/nestjs/backend/package.json b/nestjs/backend/package.json index 07a6019..00db524 100644 --- a/nestjs/backend/package.json +++ b/nestjs/backend/package.json @@ -26,6 +26,7 @@ "@nestjs/jwt": "^11.0.0", "@nestjs/passport": "^11.0.5", "@nestjs/platform-express": "^11.0.1", + "@nestjs/swagger": "^11.0.4", "@nestjs/typeorm": "^11.0.0", "bcrypt": "^5.1.1", "passport": "^0.7.0", @@ -33,6 +34,7 @@ "pg": "^8.13.3", "reflect-metadata": "^0.2.2", "rxjs": "^7.8.1", + "swagger-ui-express": "^5.0.1", "typeorm": "^0.3.20" }, "devDependencies": {