diff --git a/.dockerignore b/.dockerignore index 00fa812..2691cf2 100644 --- a/.dockerignore +++ b/.dockerignore @@ -8,6 +8,7 @@ npm-debug.log .idea frontend/build frontend/dist +backend/.env backend/node_modules frontend/node_modules diff --git a/.gitignore b/.gitignore index 1ae8931..235662a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,14 @@ -node_modules/ -dist/ +node_modules +**/node_modules +npm-debug.log +.DS_Store +.git +.vscode +.idea +frontend/build +frontend/dist +backend/node_modules backend/.env +frontend/node_modules +docker-compose.dev.yml +scripts/docker-release.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..a0bef04 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,53 @@ +# =============================== +# Stage 1: Frontend Build +# =============================== +FROM node:20-alpine AS frontend-build + +# Arbeitsverzeichnis +WORKDIR /app/frontend + +# Nur package.json & package-lock.json kopieren und Dependencies installieren +COPY frontend/package.json frontend/package-lock.json ./ +RUN npm ci + +# Restliche Frontend-Dateien kopieren +COPY frontend/ ./ + +# Frontend Build erzeugen (statische Dateien) +RUN npm run build + + +# =============================== +# Stage 2: Backend + Frontend +# =============================== +FROM node:20-alpine AS runtime + +# Arbeitsverzeichnis +WORKDIR /app/backend + +# Backend Dependencies installieren +COPY backend/package.json backend/package-lock.json ./ +RUN npm ci --only=production + +# Backend-Code kopieren +COPY backend/ ./ + +# public leeren +RUN rm -rf ./public/* + +# Inhalt von dist inklusive Unterordner direkt nach public kopieren +COPY --from=frontend-build /app/frontend/dist/. ./public/ + +# Environment +ENV NODE_ENV=production + +# Ports +# Backend intern: 4001 +# Frontend exposed: 5173 +EXPOSE 5173 + +# Node User +USER node + +# Container startet das Backend (liefert statisches Frontend) +CMD ["node", "index.js"] diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml new file mode 100644 index 0000000..4166e72 --- /dev/null +++ b/docker-compose.dev.yml @@ -0,0 +1,13 @@ +version: '3.8' +services: + app: + build: + context: . + dockerfile: Dockerfile + ports: + - "4001:4001" # Host 5173 → Container 5173 + environment: + PORTAINER_URL: "https://10.10.10.21:9443/" + PORTAINER_API_KEY: "ptr_ce3Wufxf+EKpqxc5ebcQjBkUMUoJmMpY3wGIvkgdxV0=" + ENDPOINT_ID: "1" + restart: unless-stopped diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..4b6b0c2 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,13 @@ +version: '3.8' +services: + app: + build: + context: . + dockerfile: Dockerfile + ports: + - "4000:4000" + environment: + PORT: 4000 + PORTAINER_URL: "https://your-portainer.example.com" + PORTAINER_API_KEY: "your_api_key_here" + restart: unless-stopped