dev-ops
Examen - Distributed Telemetry Archival Platform (DTAP™)
NodeJS (Poort 4000), PostgreSQL (12.22), InfluxDB (2.7) en Nginx Frontend achter Traefik.
Stap 1: Traefik (Infrastructure)
mkdir ~/traefik && cd ~/traefikMaak de map voor de proxy
docker network create traefikMaak het publieke netwerk aan (indien nog niet bestaat)
nano docker-compose.ymlMaak de Traefik config (zie Files)
docker compose up -dStart Traefik (v3.6.7)
Stap 2: Dockerfiles
cd ~/examen-telemetry-platformGa naar de projectmap
nano api/DockerfileAPI Image: Node 20-bullseye, Poort 4000
nano frontend/DockerfileFrontend Image: Nginx 1.25
Stap 3: Applicatie Config & Data
nano .envDefinieer secrets (Postgres & Influx Credentials)
nano docker-compose.ymlDefinieer services: api, frontend, postgres, influxdb
INFLUX_TOKEN=... Tip: Zet een vast token in de Influx setup vars!
Stap 4: Starten & Verifiëren
docker compose up -d --buildStart de stack
docker compose logs -f apiCheck of API connectie maakt met beide DB's
docker compose psControleer of alles 'Up' is
Bestanden & Configuraties
api/Dockerfile
dockerfile
FROM node:20-bullseyeWORKDIR /appCOPY package*.json ./RUN npm installCOPY . .EXPOSE 4000CMD ["node", "index.js"]Backend (NodeJS)
frontend/Dockerfile
dockerfile
FROM nginx:1.25COPY . /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 Proxy Configuratie
.env (Project Root)
properties
# Postgres ConfigPOSTGRES_USER=myuser POSTGRES_PWD=mypassword POSTGRES_DB=telemetry # InfluxDB ConfigINFLUX_USER=admin INFLUX_PWD=adminpassword123 INFLUX_ORG=helios INFLUX_BUCKET=metrics INFLUX_TOKEN=my-super-secret-admin-token Secrets voor de applicatie. Zorg dat API en DB variabelen matchen.
docker-compose.yml (Project Root)
yaml
services: api: build: ./api networks: - traefik - backend labels: - "traefik.enable=true" - "traefik.http.routers.api.rule=Host(`{{domain-1}}`) && PathPrefix(`/api`)" - "traefik.http.services.api.loadbalancer.server.port=4000" - "traefik.docker.network=traefik" environment: - STORAGE_MODE=telemetry - POSTGRES_HOST=postgres - POSTGRES_DB=${POSTGRES_DB} - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PWD=${POSTGRES_PWD} - INFLUX_URL=http://influxdb:8086 - INFLUX_TOKEN=${INFLUX_TOKEN} - INFLUX_ORG=${INFLUX_ORG} - INFLUX_BUCKET=${INFLUX_BUCKET} depends_on: - postgres - influxdb frontend: build: ./frontend networks: - traefik labels: - "traefik.enable=true" - "traefik.http.routers.frontend.rule=Host(`{{domain-1}}`)" - "traefik.docker.network=traefik" postgres: image: postgres:12.22 volumes: - postgres-data:/var/lib/postgresql/data - ./postgres-init.sql:/docker-entrypoint-initdb.d/postgres-init.sql:ro networks: - backend environment: - POSTGRES_DB=${POSTGRES_DB} - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PWD} influxdb: image: influxdb:2.7 volumes: - influx-data:/var/lib/influxdb2 networks: - backend environment: - DOCKER_INFLUXDB_INIT_MODE=setup - DOCKER_INFLUXDB_INIT_USERNAME=${INFLUX_USER} - DOCKER_INFLUXDB_INIT_PASSWORD=${INFLUX_PWD} - DOCKER_INFLUXDB_INIT_ORG=${INFLUX_ORG} - DOCKER_INFLUXDB_INIT_BUCKET=${INFLUX_BUCKET} - DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=${INFLUX_TOKEN}volumes: postgres-data: influx-data:networks: traefik: external: true backend:De volledige stack configuratie. Let op InfluxDB 2.7 init variabelen.