ludo-web-multiplayer/Dockerfile

112 lines
2.6 KiB
Docker

# FROM node:14 as frontend
# WORKDIR /app
# COPY . /app
# RUN npm install --production
# RUN npm run build
# FROM node:14 as backend
# WORKDIR /app
# COPY /backend /app
# RUN npm install
# FROM node:14
# WORKDIR /app
# COPY --from=backend /app /app/
# COPY --from=frontend /app/build /app/build
# EXPOSE 8080
# CMD ["npm", "run", "start"]
const express = require('express');
const cors = require('cors');
const path = require('path');
const cookieParser = require('cookie-parser');
const mongoose = require('mongoose');
require('dotenv').config();
const { sessionMiddleware } = require('./config/session');
const PORT = process.env.PORT || 5000;
const app = express();
app.use(cookieParser());
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
app.set('trust proxy', 1);
/* ---------- CORS ---------- */
app.use(
cors({
origin:
process.env.NODE_ENV === 'production'
? true // same origin (Docker / prod)
: 'http://localhost:3000',
credentials: true,
})
);
app.use(sessionMiddleware);
const server = app.listen(PORT, "0.0.0.0", () => {
console.log(`Server listening on port ${PORT}`);
});
/* ---------- Mongo + Socket ---------- */
require('./config/database')(mongoose);
require('./config/socket')(server);
/* ---------- Serve React build ---------- */
if (process.env.NODE_ENV === 'production') {
const buildPath = path.resolve(__dirname, 'build');
app.use(express.static(buildPath));
app.get('*', (req, res) => {
res.sendFile(path.join(buildPath, 'index.html'));
});
}
module.exports = { server };
root@DietPi:~/mern-ludo/backend# ^C
root@DietPi:~/mern-ludo/backend# cd .
root@DietPi:~/mern-ludo/backend# cd ..
root@DietPi:~/mern-ludo# nano Dockerfile
root@DietPi:~/mern-ludo# cat Dockerfile
# Node 20 for Pi 5 (ARM64)
FROM node:20-bullseye-slim
WORKDIR /app
# Copy all files
COPY . /app
# Install frontend (root) dependencies
RUN npm install --legacy-peer-deps
# Build frontend
RUN npm run build
# Install backend dependencies
RUN cd backend && npm install --production --legacy-peer-deps
# Move frontend build into backend/public for Express
# RUN cp -r build backend/public
RUN rm -rf backend/build
RUN cp -r build backend/build
# Copy wait-for-mongo.sh and make it executable
COPY wait-for-mongo.sh ./
RUN chmod +x wait-for-mongo.sh
# Default fallback values (can be overridden by Compose)
ENV NODE_ENV=production
ENV PORT=8080
ENV CONNECTION_URI=mongodb://192.168.0.197:27017/ludo?replicaSet=rs0
EXPOSE 18081
# Start backend with wait-for-mongo
CMD ["bash", "./wait-for-mongo.sh", "mongo", "27017", "node", "backend/server.js"]