diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..7198135 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,12 @@ +FROM node:18-alpine + +WORKDIR /app + +COPY package*.json ./ +RUN npm install + +COPY . . + +EXPOSE 5000 + +CMD ["node", "server.js"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..a5285fc --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,36 @@ +version: '3.8' + +services: + frontend: + build: + context: ./frontend + args: + - REACT_APP_API_URL=http://localhost:9501 + ports: + - "9500:80" + depends_on: + - backend + + backend: + build: + context: ./backend + ports: + - "9501:5000" + environment: + - PORT=5000 + - MONGO_URI=mongodb://mongo:27017/elixify + # The rest are read from backend/.env or can be defined here + env_file: + - ./backend/.env + depends_on: + - mongo + + mongo: + image: mongo:latest + ports: + - "9502:27017" + volumes: + - mongo-data:/data/db + +volumes: + mongo-data: diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..68bb013 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,25 @@ +# Build stage +FROM node:18-alpine as build + +WORKDIR /app + +COPY package*.json ./ +RUN npm install + +COPY . . + +# We inject the API URL for production build so nginx serves the correct config +ARG REACT_APP_API_URL +ENV REACT_APP_API_URL=$REACT_APP_API_URL + +RUN npm run build + +# Serve stage +FROM nginx:alpine + +COPY --from=build /app/build /usr/share/nginx/html + +# Expose port 80 for Nginx +EXPOSE 80 + +CMD ["nginx", "-g", "daemon off;"]