commit 7ae4e8c792e8329e39b81c03bc552414da130898 Author: mauro-defilippo Date: Wed Apr 8 14:15:46 2026 +0200 docker compose componenti diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..ab1f416 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/documentazione.iml b/.idea/documentazione.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/documentazione.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/develop/docker-compose.yaml b/develop/docker-compose.yaml new file mode 100644 index 0000000..2e6e7e9 --- /dev/null +++ b/develop/docker-compose.yaml @@ -0,0 +1,131 @@ +networks: + default: + driver: bridge + ipam: + driver: default + config: + - subnet: 172.19.0.0/16 + +services: + loki: + image: grafana/loki:2.9.4 + container_name: loki + ports: + - "3100:3100" + command: -config.file=/etc/loki/local-config.yaml + volumes: + - ./loki-config.yaml:/etc/loki/local-config.yaml:ro + - loki-data:/loki + networks: + default: + ipv4_address: 172.19.0.2 + + grafana: + image: grafana/grafana:11.0.0 + container_name: grafana + ports: + - "3000:3000" + environment: + - GF_SECURITY_ADMIN_USER=admin + - GF_SECURITY_ADMIN_PASSWORD=admin + volumes: + - grafana-data:/var/lib/grafana + networks: + default: + ipv4_address: 172.19.0.3 + depends_on: + - loki + + pgsql: + image: postgres:17 +# restart: unless-stopped + container_name: postgresql + volumes: + - postgresql-data:/var/lib/postgresql/data + - ./init-db.sh:/docker-entrypoint-initdb.d/init-db.sh:ro + networks: + default: + ipv4_address: 172.19.0.4 + ports: + - target: 5432 + published: 5432 + protocol: tcp + mode: host + environment: + - POSTGRES_PASSWORD=Creative26! + +# 9002 porta per la comunicazione tra container +# 9003 porta per la connessione fuori da docker +# 9004 porta quorumdei controller kraft + kafka: + image: apache/kafka:4.2.0 + container_name: kafka + networks: + default: + ipv4_address: 172.19.0.5 + ports: + - "9092:9092" + environment: +# Rimosso il prefisso _CFG_ + - KAFKA_NODE_ID=1 + - KAFKA_PROCESS_ROLES=broker,controller + - KAFKA_CONTROLLER_LISTENER_NAMES=CONTROLLER + - KAFKA_LISTENERS=PLAINTEXT://:9092,EXTERNAL://:9094,CONTROLLER://:9093 + - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,EXTERNAL://localhost:9094 + - KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,EXTERNAL:PLAINTEXT + - KAFKA_CONTROLLER_QUORUM_VOTERS=1@kafka:9093 + # Variabile fondamentale per l'immagine Apache in modalita KRaft + - KAFKA_INTER_BROKER_LISTENER_NAME=PLAINTEXT + +# localhost:9001 interfaccia per esplorare topic e consumer + kafdrop: + image: obsidiandynamics/kafdrop:4.2.0 + container_name: kafdrop + ports: + - "9001:9001" + environment: + - KAFKA_BROKERCONNECT=kafka:9092 + - SERVER_PORT=9001 + depends_on: + - kafka + networks: + default: + ipv4_address: 172.19.0.6 + + #keycloak - in prod comand: start + keycloak: + image: quay.io/keycloak/keycloak:26.5.6 + container_name: keycloak + environment: + KC_BOOTSTRAP_ADMIN_USERNAME: admin + KC_BOOTSTRAP_ADMIN_PASSWORD: Creative26! + +# utilizza utenza di root + KC_DB: postgres + KC_DB_URL: jdbc:postgresql://pgsql:5432/keycloak + KC_DB_USERNAME: postgres + KC_DB_PASSWORD: Creative26! + + KC_HOSTNAME: localhost + KC_HOSTNAME_PORT: 8080 + KC_HOSTNAME_STRICT: 'false' + KC_HOSTNAME_STRICT_HTTPS: 'false' + + #KC_FEATURES: scripts non utilizzato piu + KC_LOG_LEVEL: info + KC_METRICS_ENABLED: 'true' + KC_HEALTH_ENABLED: 'true' + command: start-dev + ports: + - '8080:8080' + depends_on: + - pgsql + networks: + default: + ipv4_address: 172.19.0.7 + + +volumes: + loki-data: + grafana-data: + postgresql-data: \ No newline at end of file diff --git a/develop/init-db.sh b/develop/init-db.sh new file mode 100755 index 0000000..51fb50a --- /dev/null +++ b/develop/init-db.sh @@ -0,0 +1,38 @@ +#!/bin/bash +set -e + +# Funzione per creare un database e un utente limitato +# Argomenti: NOME_DB, NOME_UTENTE, PASSWORD_UTENTE +create_limited_user_and_db() { + local database=$1 + local user=$2 + local password=$3 + + echo " Configurazione database: $database per l'utente: $user" + + psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "postgres" <<-EOSQL + CREATE DATABASE $database; + CREATE USER $user WITH PASSWORD '$password'; + \c $database + REVOKE ALL ON SCHEMA public FROM PUBLIC; + GRANT USAGE ON SCHEMA public TO $user; + GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO $user; + GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO $user; + ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO $user; + ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE, SELECT ON SEQUENCES TO $user; +EOSQL +} + +echo "Inizio inizializzazione database multipli..." + +# 1. Database per Keycloak (L'utente admin ha già i permessi perché proprietario del DB principale) +# Non serve crearlo qui se è già definito in POSTGRES_DB nel docker-compose, +# ma assicuriamoci che esista. +echo "Verifica database Keycloak..." + +# 2. Creazione Microservizi con permessi LIMITATI (Sola gestione DATI, no struttura) +# Formato: nome_db, nome_utente, password +create_limited_user_and_db "negozi" "user_negozi" "Anker26!" +create_limited_user_and_db "keycloak" "user_keycloak" "Anker26!" + +echo "Inizializzazione completata con successo!" \ No newline at end of file diff --git a/develop/istruzioni.txt b/develop/istruzioni.txt new file mode 100644 index 0000000..3dd7e34 --- /dev/null +++ b/develop/istruzioni.txt @@ -0,0 +1,31 @@ + + +chmod +x init-db.sh + +docker compose up --detach --no-recreate + +docker logs -f keycloak + +docker-compose up -d keycloak + +Per cancellare tutto in un colpo solo (container, reti, volumi e immagini): +docker compose down -v --rmi all --remove-orphans + +docker compose up -d +docker-compose up -d --no-deps keycloak + +Cosa fa questo comando? + • up -d: Rileva i cambiamenti nel file docker-compose.yml, ricrea il container solo se necessario e lo avvia in background. + • --no-deps: Impedisce a Docker di riavviare anche i servizi da cui Keycloak dipende (come pgsql), velocizzando l'operazione. + • keycloak: Specifica di agire solo sul servizio Keycloak. + + +Obiettivo Comando +Controllare lo stato docker compose ps +Vedere i log (anche se in background) docker compose logs -f +Spegnere tuttodocker compose down +Riavviare i servizidocker compose restart + + +Creative26! +Anker26! \ No newline at end of file diff --git a/develop/loki-config.yaml b/develop/loki-config.yaml new file mode 100644 index 0000000..22fe44a --- /dev/null +++ b/develop/loki-config.yaml @@ -0,0 +1,43 @@ +auth_enabled: false + +server: + http_listen_port: 3100 + +ingester: + lifecycler: + ring: + kvstore: + store: inmemory + replication_factor: 1 + chunk_idle_period: 5m + chunk_retain_period: 30s + wal: + dir: /loki/wal + max_transfer_retries: 0 + +schema_config: + configs: + - from: 2025-08-08 + store: tsdb + object_store: filesystem + schema: v13 + index: + prefix: index_ + period: 24h + +storage_config: + tsdb_shipper: + active_index_directory: /loki/tsdb-index + cache_location: /loki/tsdb-cache + shared_store: filesystem + + filesystem: + directory: /loki/chunks + +limits_config: + allow_structured_metadata: true + retention_period: 168h # 7 giorni, puoi aumentare se vuoi + +compactor: + working_directory: /loki/compactor + shared_store: filesystem \ No newline at end of file diff --git a/develop/test-kafkla.sh b/develop/test-kafkla.sh new file mode 100644 index 0000000..8b4eda8 --- /dev/null +++ b/develop/test-kafkla.sh @@ -0,0 +1,32 @@ +#!/bin/bash +set -e + +TOPIC_NAME="test-topic" +MESSAGE="Hello Kafka without Zookeeper!" + +echo "🚀 Avvio Kafka in background..." +docker-compose up -d + +echo "⏳ Attendo 10 secondi che Kafka sia pronto..." +sleep 10 + +echo "📌 Creo il topic '$TOPIC_NAME'..." +docker exec kafka kafka-topics.sh \ + --bootstrap-server localhost:9092 \ + --create --topic "$TOPIC_NAME" \ + --partitions 1 --replication-factor 1 + +echo "📋 Lista dei topic disponibili:" +docker exec kafka kafka-topics.sh \ + --bootstrap-server localhost:9092 --list + +echo "✉️ Invio un messaggio al topic..." +echo "$MESSAGE" | docker exec -i kafka kafka-console-producer.sh \ + --broker-list localhost:9092 --topic "$TOPIC_NAME" + +echo "📥 Lettura del messaggio dal topic:" +docker exec kafka kafka-console-consumer.sh \ + --bootstrap-server localhost:9092 \ + --topic "$TOPIC_NAME" --from-beginning --timeout-ms 5000 + +echo "✅ Test completato!"