diff --git a/Dockerfile b/Dockerfile index 62590a2b..3694ae8e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,5 @@ -FROM node:24-slim as build +FROM node:24-alpine as build + # Set build arguments with defaults ARG NODE_ENV=production ARG NPM_INSTALL_FLAGS= @@ -15,10 +16,10 @@ RUN npm ci $NPM_INSTALL_FLAGS # Copy website files COPY website/ ./ -FROM node:24-slim +FROM node:24-alpine -# Create a non-root user and group -RUN addgroup --system appgroup && adduser --system --ingroup appgroup appuser +# Create a non-root user and group +RUN addgroup -S appgroup && adduser -S -G appgroup appuser # Copy layer wfrom build image COPY --chown=appuser:appgroup --from=build /app /app diff --git a/website/modules/@apostrophecms/express/index.js b/website/modules/@apostrophecms/express/index.js index acf8e146..ce9f6351 100644 --- a/website/modules/@apostrophecms/express/index.js +++ b/website/modules/@apostrophecms/express/index.js @@ -1,4 +1,5 @@ const { getEnv } = require('../../../utils/env'); +const morgan = require('morgan'); module.exports = { options: { @@ -7,4 +8,13 @@ module.exports = { secret: getEnv('SESSION_SECRET'), }, }, + middleware(_self) { + return { + logRequests: { + middleware: morgan( + ':date[iso] :method :url :status :response-time ms - :remote-addr - :user-agent', + ), + }, + }; + }, }; diff --git a/website/package-lock.json b/website/package-lock.json index 0a16a4e8..52d6f083 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -24,6 +24,7 @@ "lodash": "^4.17.21", "lozad": "^1.16.0", "mongodb": "^6.17.0", + "morgan": "^1.10.0", "node-fetch": "^2.6.7", "normalize.css": "^8.0.1", "pm2-runtime": "^5.4.1", @@ -6222,6 +6223,24 @@ ], "license": "MIT" }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -13080,6 +13099,58 @@ "node": ">=16.20.1" } }, + "node_modules/morgan": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.1.tgz", + "integrity": "sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==", + "license": "MIT", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.1.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/morgan/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/morgan/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/morgan/node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", diff --git a/website/package.json b/website/package.json index d3b211c2..81f940d3 100644 --- a/website/package.json +++ b/website/package.json @@ -53,6 +53,7 @@ "lodash": "^4.17.21", "lozad": "^1.16.0", "mongodb": "^6.17.0", + "morgan": "^1.10.0", "node-fetch": "^2.6.7", "normalize.css": "^8.0.1", "pm2-runtime": "^5.4.1",