From e77b99c31e771a16e6f6d5754359bbe9765f0c71 Mon Sep 17 00:00:00 2001 From: kinou-p Date: Mon, 20 Mar 2023 22:09:50 +0100 Subject: [PATCH] start setup nginx and node js --- backend/package-lock.json | 432 ++++++++++++++++++++++++++++ backend/package.json | 15 + backend/server.js | 46 +++ conf/nginx.conf | 54 +++- docker-compose.yml | 38 ++- dockerfiles/Dockerfile.backEnd | 26 +- dockerfiles/Dockerfile.nginx | 4 +- frontend/css/header.css | 174 +++++++++++ frontend/img/pp.jpg | Bin 0 -> 28393 bytes frontend/img/pp.jpg:Zone.Identifier | 4 + frontend/index.html | 45 ++- 11 files changed, 814 insertions(+), 24 deletions(-) create mode 100644 backend/package-lock.json create mode 100644 backend/package.json create mode 100644 backend/server.js create mode 100644 frontend/css/header.css create mode 100644 frontend/img/pp.jpg create mode 100644 frontend/img/pp.jpg:Zone.Identifier diff --git a/backend/package-lock.json b/backend/package-lock.json new file mode 100644 index 00000000..53ec8114 --- /dev/null +++ b/backend/package-lock.json @@ -0,0 +1,432 @@ +{ + "name": "dockernodejspong", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + } + } +} diff --git a/backend/package.json b/backend/package.json new file mode 100644 index 00000000..dd412dc3 --- /dev/null +++ b/backend/package.json @@ -0,0 +1,15 @@ +{ + "name": "dockernodejspong", + "version": "1.0.0", + "description": "Web server to run an online pong", + "author": "apommier", + "main": "server.js", + "scripts": { + "start": "node server.js" + }, + "dependencies": { + "express": "^4.18.2" + }, + "devDependencies": {}, + "license": "ISC" +} diff --git a/backend/server.js b/backend/server.js new file mode 100644 index 00000000..14d42625 --- /dev/null +++ b/backend/server.js @@ -0,0 +1,46 @@ +// const http = require('https'); +// const host = 'localhost'; +// const port = 443; + + +// // const server = http.createServer((req, res) => { +// // res.end('Voilà la réponse du serveur !'); +// // }); + +// const requestListener = function (req, res) { +// res.writeHead(200); +// res.end("My first server!"); +// }; + +// const server = http.createServer(requestListener); +// server.listen(port, host, () => { +// console.log(`Server is running on http://${host}:${port}`); +// }); + +// 'use strict'; + +// const express = require('express'); +// const app = express(); +// app.get('/', (req, res) => { +// res.send('Hello World!') +// }) +// app.listen(5000, () => console.log('Server is up and running')); + +// const express = require('express') +// const app = express() +// const port = 5000 +// const name = process.env.name || "World" + +// app.get('/', (req, res) => { +// res.send(`Hello ${name} !`) +// }) +// app.listen(port, () => { +// console.log(`Server Started on Port ${port}`) +// }) + +const express = require('express'); +const app = express(); +app.get('/', (req, res) => { + res.sendfile('/var/www/html') +}) +app.listen(5000, () => console.log('Server is up and running')); \ No newline at end of file diff --git a/conf/nginx.conf b/conf/nginx.conf index eab2922c..f9c1211b 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,16 +1,58 @@ +# server { +# location / { +# proxy_set_header Host $host; +# proxy_set_header X-Real-IP $remote_addr; +# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; +# proxy_set_header X-Forwarded-Proto $scheme; + +# proxy_pass http://backend:5000; +# } +# } + server { listen 443 ssl; listen 80 ssl; + # listen 443 ssl; + #listen 80; - server_name homemadePong.42.fr; + # server_name homemadePong.42.fr; ssl_protocols TLSv1.3; ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt; ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; - index index.php; + # root /var/www/html; + # index index.html; - root /var/www/html; - - autoindex on; -} \ No newline at end of file + # autoindex on; + + location / { + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + proxy_pass http://backend:5000; + } + #proxy_pass http://localhost:5000 +} + + + +# server { +# listen 80; +# server_name localhost; + +# } + +# upstream loadbalancer { +# server backend:5000; +# } + +# server { +# listen 80; +# server_name localhost; +# location / { +# proxy_pass http://loadbalancer; +# } +# } diff --git a/docker-compose.yml b/docker-compose.yml index d40a8764..297292f3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,28 +10,34 @@ services: #image: nginx:homemade depends_on: - backend + # - backend ports: - - 443:443 - volumes: - - ./frontend:/var/www/html + - 80:80 + # - 443:443 + restart: unless-stopped networks: - pongNetwork + # backend: backend: build: context : ./ dockerfile: ./dockerfiles/Dockerfile.backEnd - container_name: webapp + container_name: backend + ports: + - 5000:5000 #image: wordpress:homemade env_file: .env - #volumes: - # - wp_files:/var/www/html + volumes: + - ./frontend:/var/www/html + # volumes: + # - ./backend:/home/node/app depends_on: - postgresql networks: - pongNetwork - restart: unless-stopped + # restart: unless-stopped postgresql: build: #./dockerfiles/Dockerfile.PostgreSQL @@ -64,4 +70,20 @@ volumes: driver_opts: type: none o: 'bind' - device: '/home/apommier/data/mariadb' \ No newline at end of file + device: '/home/apommier/data/mariadb' + +# version: "3.3" +# services: +# backend: +# build: +# context: ./dockerfiles +# dockerfile: Dockerfile.backEnd +# ports: +# - "5000:5000" +# nginx: +# restart: always +# build: +# context: ./dockerfiles +# dockerfile: Dockerfile.nginx +# ports: +# - "80:80" \ No newline at end of file diff --git a/dockerfiles/Dockerfile.backEnd b/dockerfiles/Dockerfile.backEnd index ab57fa8a..4b211627 100644 --- a/dockerfiles/Dockerfile.backEnd +++ b/dockerfiles/Dockerfile.backEnd @@ -1,13 +1,33 @@ # **************************************************************************** # # # # ::: :::::::: # -# Dockerfile.webPage :+: :+: :+: # +# Dockerfile.backEnd :+: :+: :+: # # +:+ +:+ +:+ # # By: apommier +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2023/03/19 09:28:33 by apommier #+# #+# # -# Updated: 2023/03/19 11:36:48 by apommier ### ########.fr # +# Updated: 2023/03/20 21:24:40 by apommier ### ########.fr # # # # **************************************************************************** # -FROM node:latest \ No newline at end of file +# FROM node:latest +# # RUN npm install +# # RUN apt install -y npm +# # RUN npm install express --save +# EXPOSE 8080 +# WORKDIR /home/node/app +# COPY /backend/package*.json ./ +# # RUN ls +# RUN npm install +# # RUN npm install express && npm install +# CMD [ "node", "server.js" ] + +FROM node:alpine +FROM node:latest +WORKDIR /usr/src/app +COPY /backend/package*.json ./ +RUN npm install +COPY /backend/ . +EXPOSE 5000 +CMD ["npm", "start"] +# CMD ["node", "server.js"] diff --git a/dockerfiles/Dockerfile.nginx b/dockerfiles/Dockerfile.nginx index 08725ec8..52244f2f 100644 --- a/dockerfiles/Dockerfile.nginx +++ b/dockerfiles/Dockerfile.nginx @@ -6,12 +6,12 @@ # By: apommier +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2023/03/19 09:28:32 by apommier #+# #+# # -# Updated: 2023/03/19 09:28:33 by apommier ### ########.fr # +# Updated: 2023/03/20 19:48:53 by apommier ### ########.fr # # # # **************************************************************************** # FROM nginx:latest - + RUN apt update -y RUN apt-get install -y openssl diff --git a/frontend/css/header.css b/frontend/css/header.css new file mode 100644 index 00000000..be9f3275 --- /dev/null +++ b/frontend/css/header.css @@ -0,0 +1,174 @@ +body { + margin: 0%; + background-color: rgb(47, 47, 47); + color: white; +} + +footer { + text-align: center; + position: absolute; + bottom: 0; + width: 100%; + background-color: rgb(0, 0, 0); +} + +/* #footer { + position:absolute; + bottom:0; /* on le colle en bas */ + /* width:100%; + height:100px; */ + + +.pp { + height: 10vh; + width: 10vh; + border-radius: 50%; +} + +.loginHere{ + /* justify-content: center; */ + font-size: 5vh; + font-family: 'Rubik Iso'; + text-align: center; + margin-top: 10vh; + /* border: 5px solid rgb(255, 255, 255); */ + +} + +::placeholder { + font-size: 3vh; + text-align: center; + align-items: center; + margin:auto; +} + +.submit:hover { + background-color: blueviolet; +} + +input{ + height: 5vh; + border-radius: 100vh; +} + +.pp:hover { + border: 5px solid rgb(255, 255, 255); +} + +.userTxt:hover { + color:blueviolet;; +} + +.userTxt { + margin-right: 5%; +} + +.username { + display: flex; + font-size: 4vh; + max-width: 33%; + color: aqua; + /* text-align: right; */ + /* width: 10%; */ + justify-content: right; + /* align-self: flex-end; */ + /* margin-left: auto; */ + /* text-align: right; */ +} + +label{ + /* border: 5px solid rgb(255, 255, 255); */ + /* width: 15vw; */ +} + +.login { + /* text-align: center; */ + /* justify-content: center; */ +} + +.loginForm { + /* margin-top: 20vh; */ + align-items: center; + height: 50vh; + /* text-align: center; */ + display: flex; + flex-direction: column; + /* border: 5px solid rgb(255, 255, 255); */ + justify-content: space-around; + +} + +/* .menu:hover { + color:blueviolet; +} */ + +.menu { + color: aqua; + font-size: 4vh; + /* margin-left: %; */ + /* padding-left: 2vw; */ + /* margin-left: 20px; */ + /* max-width: 33%; */ + /* margin-right: auto; */ + /* align-self: flex-start; */ + /* justify-content: start; */ + /* text-align: left; */ +} + +.pong{ + font-family:'Rubik Iso'; +} + +.box { + /* border: 2px solid white; */ + width: 33%; +} + +.center { + /* text-align: center; */ + align-self: center; +} + +.headerName { + /* margin: auto; */ + display:flex; + max-width: 33%; + /* align-items: center; */ + height: 100%; + font-size: 50px; + /* text-align: center; */ + /* align-self: center; */ + /* margin: auto; */ + /* border: 2px solid white; */ + /* height: 100px; */ + color:blueviolet; + /* align-items: center; */ + /* text-align-last:center; */ + font-size: 12vh; + justify-content: center; +} + +.header { + display: flex; + /* border: 2px solid white; */ + /* border: 5px solid white; */ + margin: 0; + height: 15vh; + /* justify-content: space-between; */ + align-items: center; + /* justify-content: center; */ + /* margin: 0%; */ + /* padding: 0% ; */ + /* border: 0cap; */ + /* width: 100%; */ + /* margin-top: 0%; */ + /* padding-top: 0%; */ + background-color: rgb(0, 0, 0); + /* background-attachment: fixed */ + /* color: white; */ +} + +h1 { + color:blueviolet + /* background-color: rgb(153, 32, 32) !important; */ +} diff --git a/frontend/img/pp.jpg b/frontend/img/pp.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c827bcebb44298c3b7c68305b2a5c10418c34397 GIT binary patch literal 28393 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 z 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 Ml>hiPqCeCB2SD*SiU0rr literal 0 HcmV?d00001 diff --git a/frontend/img/pp.jpg:Zone.Identifier b/frontend/img/pp.jpg:Zone.Identifier new file mode 100644 index 00000000..033331e2 --- /dev/null +++ b/frontend/img/pp.jpg:Zone.Identifier @@ -0,0 +1,4 @@ +[ZoneTransfer] +ZoneId=3 +ReferrerUrl=https://www.google.com/ +HostUrl=https://img.ev.mu/images/articles/600x/775102.jpg diff --git a/frontend/index.html b/frontend/index.html index fb73b2dd..9dbda605 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -1,10 +1,45 @@ - + - Ma première page web + + + BEST PONG EVER -

Bienvenue sur ma page web !

-

Je suis content de vous accueillir sur ma première page web.

+
+ +
+

PONG

+ +
+
+

UserName

+ profile picture +
+ + +
+ + +
+

@apommier | apommier@student.42.fr

+
- \ No newline at end of file + + + + + \ No newline at end of file