diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..0a0503da --- /dev/null +++ b/.dockerignore @@ -0,0 +1,26 @@ +**/.classpath +**/.dockerignore +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +**/dist +**/reports +LICENSE +README.md diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..1f893161 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,32 @@ +# Stage 1: Build the React app +FROM node:18 as build + +# Set the working directory in the container +WORKDIR /app + +# Copy package.json and package-lock.json to the working directory +COPY package*.json ./ + +# Install dependencies +RUN npm install + +# Copy the entire app to the working directory +COPY . . + +# Build the React app +RUN npm run build + +# Stage 2: Serve the built app using a lightweight web server +FROM nginx:1.21 + +# Copy the built app from the previous stage +COPY --from=build /app/dist /usr/share/nginx/html + +# Copy the default Nginx configuration +COPY nginx.conf /etc/nginx/conf.d/default.conf + +# Expose port 8080 +EXPOSE 8080 + +# Start Nginx when the container starts +CMD ["nginx", "-g", "daemon off;"] diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 00000000..7b7ef59f --- /dev/null +++ b/nginx.conf @@ -0,0 +1,18 @@ +server { + listen 8080; + server_name localhost; + + root /usr/share/nginx/html; + index index.html; + + location / { + try_files $uri /index.html; + } + + location /api { + proxy_pass http://localhost:5000/api; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } +} diff --git a/package-lock.json b/package-lock.json index 21e3d71b..40fd530a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,11 +14,9 @@ "@metrostar/comet-uswds": "1.5.0", "@tanstack/react-query": "4.32.0", "@tanstack/react-table": "8.9.3", - "@types/keycloak-js": "^3.4.1", "@uswds/uswds": "3.6.0", "axios": "1.4.0", "axios-mock-adapter": "1.21.5", - "keycloak-js": "^22.0.1", "oidc-client-ts": "^2.2.5", "react": "18.2.0", "react-dom": "18.2.0", @@ -4020,15 +4018,6 @@ "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", "dev": true }, - "node_modules/@types/keycloak-js": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@types/keycloak-js/-/keycloak-js-3.4.1.tgz", - "integrity": "sha512-uWB18tdjmnABDxfS7XQULAy4rrL7mGxy1SN+ijvHJPbcIAhtZWqcJHrcMKruw7Eh4TKnLlK+vmIEmZDtpHFQmA==", - "deprecated": "This is a stub types definition for keycloak-js (https://github.com/keycloak/keycloak). keycloak-js provides its own type definitions, so you don't need @types/keycloak-js installed!", - "dependencies": { - "keycloak-js": "*" - } - }, "node_modules/@types/node": { "version": "20.4.5", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.5.tgz", @@ -4966,6 +4955,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, "funding": [ { "type": "github", @@ -10171,11 +10161,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/js-sha256": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", - "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -10334,15 +10319,6 @@ "resolved": "https://registry.npmjs.org/keyboardevent-key-polyfill/-/keyboardevent-key-polyfill-1.1.0.tgz", "integrity": "sha512-NTDqo7XhzL1fqmUzYroiyK2qGua7sOMzLav35BfNA/mPUSCtw8pZghHFMTYR9JdnJ23IQz695FcaM6EE6bpbFQ==" }, - "node_modules/keycloak-js": { - "version": "22.0.1", - "resolved": "https://registry.npmjs.org/keycloak-js/-/keycloak-js-22.0.1.tgz", - "integrity": "sha512-5cwOzMTMW2HuKGaIHv50BJHz2o8ID+YgzaaXKNwOk0XqD6ZOPD/jQXvqTz+Z8ID5cP46zVWnNiTouFK41NbPOQ==", - "dependencies": { - "base64-js": "^1.5.1", - "js-sha256": "^0.9.0" - } - }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", diff --git a/package.json b/package.json index cb8c0e6c..508a2b83 100644 --- a/package.json +++ b/package.json @@ -31,11 +31,9 @@ "@metrostar/comet-uswds": "1.5.0", "@tanstack/react-query": "4.32.0", "@tanstack/react-table": "8.9.3", - "@types/keycloak-js": "^3.4.1", "@uswds/uswds": "3.6.0", "axios": "1.4.0", "axios-mock-adapter": "1.21.5", - "keycloak-js": "^22.0.1", "oidc-client-ts": "^2.2.5", "react": "18.2.0", "react-dom": "18.2.0",