docker compose componenti

This commit is contained in:
2026-04-08 14:15:46 +02:00
commit 7ae4e8c792
7 changed files with 294 additions and 0 deletions

131
develop/docker-compose.yaml Normal file
View File

@@ -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:

38
develop/init-db.sh Executable file
View File

@@ -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!"

31
develop/istruzioni.txt Normal file
View File

@@ -0,0 +1,31 @@
chmod +x init-db.sh
docker compose up --detach --no-recreate <nome_del_nuovo_servizio>
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!

43
develop/loki-config.yaml Normal file
View File

@@ -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

32
develop/test-kafkla.sh Normal file
View File

@@ -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!"