From 6c57e960aab28df317ef0d07c87df8218acf6505 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Tue, 11 Nov 2025 15:19:34 -0600 Subject: [PATCH] web: frontend: Switch to express --- web/frontend/Dockerfile | 14 ++++++++++++-- web/frontend/server.js | 26 ++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 web/frontend/server.js diff --git a/web/frontend/Dockerfile b/web/frontend/Dockerfile index 84e8179..b6f7316 100644 --- a/web/frontend/Dockerfile +++ b/web/frontend/Dockerfile @@ -1,6 +1,16 @@ -FROM node:18-alpine +# Build Stage +FROM node:18-alpine AS build WORKDIR /app COPY package*.json ./ RUN npm install COPY . . -CMD ["npm", "start"] +RUN npm run build + +# Production Stage +FROM node:18-alpine AS production +WORKDIR /app +COPY --from=build /app/build ./build +COPY server.js ./ +RUN npm install --production express +EXPOSE 3000 +CMD ["node", "server.js"] \ No newline at end of file diff --git a/web/frontend/server.js b/web/frontend/server.js new file mode 100644 index 0000000..fb74f88 --- /dev/null +++ b/web/frontend/server.js @@ -0,0 +1,26 @@ +const express = require('express'); +const path = require('path'); + +const app = express(); +const PORT = process.env.PORT || 3000; + +// Serve static files from the build directory +app.use(express.static(path.join(__dirname, 'build'))); + +// Handle client-side routing - serve index.html for all routes +app.get('/*splat', (req, res) => { + res.sendFile(path.join(__dirname, 'build', 'index.html')); +}); + +const server = app.listen(PORT, () => { + console.log(`Server is running on port ${PORT}`); +}); + +// Graceful shutdown on CTRL+C +process.on('SIGINT', () => { + console.log('\nShutting down gracefully...'); + server.close(() => { + console.log('Server closed'); + process.exit(0); + }); +});