From e1c9a7b81bf83381a6e1bd0b9e3acd7cf8df6086 Mon Sep 17 00:00:00 2001 From: Anthony Correa Date: Sun, 26 May 2024 10:42:21 -0500 Subject: [PATCH] cleanup to allow for debugging --- .vscode/launch.json | 32 +++++++++++++------------------- bin/www | 21 +++------------------ caddy/Caddyfile | 25 ++++++++++++++++++++++++- docker-compose.yml | 26 +++++++++++++++++++++++--- package-lock.json | 45 ++++++++++++++++++++++++++++++--------------- package.json | 7 ++++++- src/app.js | 3 ++- 7 files changed, 101 insertions(+), 58 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 8a44977..942482f 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -4,6 +4,17 @@ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ + { + "name": "Attach", + "port": 9229, + "request": "attach", + "skipFiles": [ + "/**" + ], + "type": "node", + "localRoot": "${workspaceFolder}/src", + "remoteRoot": "/home/node/app/src" + }, { "console": "integratedTerminal", "internalConsoleOptions": "neverOpen", @@ -16,25 +27,8 @@ "/**" ], "type": "node", - "env": {"NODE_ENV": "development"}, + "env": {"NODE_ENV": "development", "DEBUG": "app"}, "preLaunchTask": "npm: build-css" - }, - { - "console": "integratedTerminal", - "internalConsoleOptions": "neverOpen", - "name": "nodemon (with scss watch)", - "program": "dev (with scss watch)", - "request": "launch", - "restart": true, - "runtimeExecutable": "nodemon", - "runtimeArgs": ["-e", "js,scss"], - "skipFiles": [ - "/**" - ], - "type": "node", - "env": {"NODE_ENV": "development"}, - "preLaunchTask": "npm: build-css" - }, - + } ] } \ No newline at end of file diff --git a/bin/www b/bin/www index 13e2e8b..c606d7f 100755 --- a/bin/www +++ b/bin/www @@ -10,8 +10,7 @@ var https = require("https"); var fs = require("fs"); var debug = require("debug")("https"); const path = require("path"); - - +var livereload = require("livereload"); /** * Get port from environment and store in Express. @@ -19,30 +18,16 @@ const path = require("path"); var port = normalizePort(process.env.PORT || "3000"); app.set("port", port); - +var server = http.createServer(app); if (process.env.NODE_ENV === "development") { - /** - * Create HTTPS server. - */ - const https_options = { - key: fs.readFileSync("certs/key.pem"), - cert: fs.readFileSync("certs/cert.pem"), - }; - var livereload = require("livereload"); - - const liveReloadServer = livereload.createServer({https: https_options}); + const liveReloadServer = livereload.createServer({port:35729}); liveReloadServer.watch(path.join(__dirname, "../src/views")); liveReloadServer.server.once("connection", () => { setTimeout(() => { liveReloadServer.refresh("/"); }, 100); }); - - var server = https.createServer(https_options, app); -} -else { - var server = http.createServer(app); } /** diff --git a/caddy/Caddyfile b/caddy/Caddyfile index d39c8ff..9980f1f 100644 --- a/caddy/Caddyfile +++ b/caddy/Caddyfile @@ -1,3 +1,26 @@ +{ + {$LOG_LEVEL} # Set via environment variable +} + +localhost { + # Development configuration + @notProd { + expression {env.ENVIRONMENT} == 'development' + } + handle @notProd { + # Configuration that only applies when not in production + reverse_proxy app-dev:3000 + } +} + {$DOMAIN} { - reverse_proxy app:3000 + # Production configuration + @prod { + expression {env.ENVIRONMENT} == 'production' + } + handle @prod { + # Configuration that only applies in production + # header Strict-Transport-Security "max-age=31536000;" + reverse_proxy app:3000 + } } \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index ad431c0..a084815 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,14 +1,32 @@ -version: "3.3" - services: - app: + app: &app env_file: - .env build: . networks: - web + profiles: + - production expose: - 3000 + + app-dev: + <<: *app + ports: + - 9229:9229 #debugger + - 35729:35729 #livereload + profiles: + - development + command: npm run dev + volumes: + - ./src:/home/node/app/src + - ./package.json:/home/node/app/package.json + - ./package-lock.json:/home/node/app/package-lock.json + - ./certs:/home/node/app/certs + - ./bin/www:/home/node/app/bin/www + environment: + DEBUG: "app" + NODE_ENV: "development" caddy: image: caddy @@ -21,6 +39,8 @@ services: - web env_file: - .env + environment: + DOMAIN: benchcoach.ascorrea.com networks: web: \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 0f44e2c..d7dc921 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,6 +33,7 @@ "passport-teamsnap": "^1.1.1", "pluralize": "^8.0.0", "pug": "^3.0.2", + "sass": "^1.77.2", "sortablejs": "^1.15.0", "teamsnap.js": "github:anthonyscorrea/teamsnap-javascript-sdk#link-with-null-link", "tinymce": "^6.8.3", @@ -663,7 +664,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -834,7 +834,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, "engines": { "node": ">=8" } @@ -997,7 +996,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -1169,7 +1167,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -2040,7 +2037,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -2195,7 +2191,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -2304,7 +2299,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -2564,6 +2558,11 @@ "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", "dev": true }, + "node_modules/immutable": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz", + "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==" + }, "node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", @@ -2632,7 +2631,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -2704,7 +2702,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -2722,7 +2719,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -2745,7 +2741,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "engines": { "node": ">=0.12.0" } @@ -3373,7 +3368,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -3667,7 +3661,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "engines": { "node": ">=8.6" }, @@ -4078,7 +4071,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -4228,6 +4220,22 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/sass": { + "version": "1.77.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.2.tgz", + "integrity": "sha512-eb4GZt1C3avsX3heBNlrc7I09nyT00IUuo4eFhAbeXWU2fvA7oXI53SxODVAA+zgZCk9aunAZgO+losjR3fAwA==", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -4466,6 +4474,14 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -4735,7 +4751,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "dependencies": { "is-number": "^7.0.0" }, diff --git a/package.json b/package.json index 0328e2d..cbd6151 100644 --- a/package.json +++ b/package.json @@ -24,10 +24,14 @@ }, "scripts": { "start": "node ./bin/www", - "dev": "nodemon .", + "dev": "nodemon --inspect=0.0.0.0 ./bin/www", "build-css": "sass src/scss:src/public/css", "watch-scss": "nodemon -e scss -x \"npm run build-css\"" }, + "nodemonConfig": { + "ext": "js,hbs,scss", + "watch": ["src"] + }, "dependencies": { "@teamsnap/teamsnap-ui": "^3.12.3", "better-sqlite3": "^9.6.0", @@ -54,6 +58,7 @@ "passport-teamsnap": "^1.1.1", "pluralize": "^8.0.0", "pug": "^3.0.2", + "sass": "^1.77.2", "sortablejs": "^1.15.0", "teamsnap.js": "github:anthonyscorrea/teamsnap-javascript-sdk#link-with-null-link", "tinymce": "^6.8.3", diff --git a/src/app.js b/src/app.js index 635732e..09c6f13 100644 --- a/src/app.js +++ b/src/app.js @@ -62,9 +62,10 @@ app.set("view engine", "hbs"); app.locals.pluralize = require("pluralize"); if (process.env.NODE_ENV === "development") { + console.log('adding connectLiveReload') var connectLiveReload = require("connect-livereload"); app.use("/scss", express.static(path.join(__dirname, "scss"))); - app.use(connectLiveReload()); + app.use(connectLiveReload({port: 35729, src:"http://localhost:35729/livereload.js?snipver=1"})); } app.use(bodyParser.json());