diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..22f33fa --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,33 @@ +version: "3.9" + +services: + backend: + build: ./server/backend + container_name: backend + restart: unless-stopped + environment: + - MONGO_URI=mongodb://root:example@192.168.1.3:27017/myapphttps?authSource=admin + - JWT_SECRET=master66 + - PORT=11001 + ports: + - "11001:11001" + volumes: + - /home/nvme/dockerdata/myapps/icons:/app/uploads + + frontend_server: + image: nginx:alpine + container_name: frontend_server + restart: unless-stopped + ports: + - "11003:80" + volumes: + - ./server/frontend:/usr/share/nginx/html:ro + + app_static: + image: nginx:alpine + container_name: app_static + restart: unless-stopped + ports: + - "11002:80" + volumes: + - ./app:/usr/share/nginx/html:ro diff --git a/docker_run.sh b/docker_run.sh new file mode 100755 index 0000000..9e59cef --- /dev/null +++ b/docker_run.sh @@ -0,0 +1,2 @@ +#!/bin/bash +sudo docker compose up -d diff --git a/server/Dockerfile b/server/Dockerfile deleted file mode 100644 index 2485a89..0000000 --- a/server/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM node:20-alpine - -WORKDIR /app - -COPY package.json package-lock.json* ./ -RUN npm install --production - -COPY . . - -RUN mkdir -p uploads - -EXPOSE 3000 - -CMD ["node", "index.js"] diff --git a/server/backend/Dockerfile b/server/backend/Dockerfile new file mode 100644 index 0000000..acb49c9 --- /dev/null +++ b/server/backend/Dockerfile @@ -0,0 +1,38 @@ +# ----------------------------- +# 1) Build stage +# ----------------------------- +FROM node:20-alpine AS builder + +WORKDIR /app + +# Copio solo package.json per sfruttare la cache Docker +COPY package*.json ./ + +# Installa solo le dipendenze necessarie +RUN npm ci --only=production + +# Copio il resto del codice +COPY . . + +# ----------------------------- +# 2) Runtime stage +# ----------------------------- +FROM node:20-alpine + +WORKDIR /app + +# Copio solo node_modules dal builder +COPY --from=builder /app/node_modules ./node_modules + +# Copio il codice applicativo +COPY --from=builder /app ./ + +# Utente non-root per sicurezza +RUN addgroup -S appgroup && adduser -S appuser -G appgroup +USER appuser + +# Porta interna del backend (3000) +EXPOSE 11001 + +# Avvio del server +CMD ["node", "index.js"] diff --git a/server/docker-compose.yml b/server/docker-compose.yml deleted file mode 100644 index 3ff65cd..0000000 --- a/server/docker-compose.yml +++ /dev/null @@ -1,40 +0,0 @@ -version: "3.9" - -services: - mongo: - image: mongo:7 - container_name: mongo - restart: unless-stopped - ports: - - "27017:27017" - volumes: - - mongo_data:/data/db - - api: - build: ./server - container_name: api - restart: unless-stopped - environment: - - MONGO_URI=mongodb://mongo:27017/mydb - - JWT_SECRET=supersegreto-cambialo - - PORT=3000 - ports: - - "3000:3000" - volumes: - - ./server/uploads:/app/uploads - depends_on: - - mongo - - frontend: - image: nginx:alpine - container_name: frontend - restart: unless-stopped - ports: - - "8080:80" - volumes: - - ./frontend:/usr/share/nginx/html:ro - depends_on: - - api - -volumes: - mongo_data: