dev-ops
Voorbeeldexamen - ChatBox
MongoDB (4.4), Node API (poort 3000) en Nginx Frontend.
Stap 1: Traefik (Infrastructure)
mkdir ~/traefik && cd ~/traefikMaak de map voor de proxy
docker network create traefikMaak het publieke netwerk
nano docker-compose.ymlMaak de config (zie Files)
docker compose up -dStart Traefik (v3.6.7)
Stap 2: Dockerfiles
cd chatAPIGa naar de backend map
nano DockerfileMaak API image (Node 20, Poort 3000)
cd ../frontendGa naar de frontend map
nano DockerfileMaak Frontend image (Nginx)
Stap 3: Applicatie Config
cd ..Ga terug naar de root van het project
nano docker-compose.ymlMaak de stack aan (zie Files)
MONGO_URL=mongodb Let op: Service naam moet 'mongodb' zijn!
Stap 4: Starten
docker compose up -d --buildStart de ChatBox
docker compose logs -f apiDebug database connectie
Bestanden & Configuraties
chatAPI/Dockerfile
dockerfile
FROM node:20-bullseyeWORKDIR /appCOPY package*.json ./RUN npm installCOPY . .EXPOSE 3000CMD ["node", "index.js"]Backend (Let op: Poort 3000)
frontend/Dockerfile
dockerfile
FROM nginxCOPY . /usr/share/nginx/htmlFrontend (Nginx)
~/traefik/docker-compose.yml
yaml
services: traefik: image: traefik:v3.6.7 command: - "--api.insecure=true" - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--entrypoints.web.address=:80" ports: - "80:80" - "8080:8080" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro networks: - traefik labels: - "traefik.enable=true" - "traefik.http.routers.dashboard.rule=Host(`{{domain-2}}`)" - "traefik.http.routers.dashboard.service=api@internal"networks: traefik: external: trueTraefik v3 configuratie
docker-compose.yml (Project Root)
yaml
services: chatapi: build: ./chatAPI networks: - traefik - backend labels: - "traefik.enable=true" - "traefik.http.routers.backend.rule=Host(`{{domain-1}}`) && PathPrefix(`/api`)" - "traefik.http.services.backend.loadbalancer.server.port=3000" - "traefik.docker.network=traefik" environment: - MONGO_USER=${MONGO_USER} - MONGO_PWD=${MONGO_PWD} - MONGO_URL=${MONGO_URL} frontend: build: ./frontend networks: - traefik labels: - "traefik.enable=true" - "traefik.http.routers.frontend.rule=Host(`{{domain-1}}`)" - "traefik.docker.network=traefik" mongodb: image: mongo:4.4 volumes: - mongo-data:/data/db - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro networks: - backend environment: - MONGO_INITDB_ROOT_USERNAME=${MONGO_USER} - MONGO_INITDB_ROOT_PASSWORD=${MONGO_PWD}volumes: mongo-data:networks: traefik: external: true backend:De applicatie stack. Let op service naam 'mongodb', environment variables en Mongo versie 4.4.
.env (Project Root)
yaml
MONGO_USER=admin MONGO_PWD=S3cret MONGO_URL=mongodb De applicatie .env.