docker compose componenti
This commit is contained in:
10
.idea/.gitignore
generated
vendored
Normal file
10
.idea/.gitignore
generated
vendored
Normal file
@@ -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/
|
||||||
9
.idea/documentazione.iml
generated
Normal file
9
.idea/documentazione.iml
generated
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="JAVA_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
131
develop/docker-compose.yaml
Normal file
131
develop/docker-compose.yaml
Normal 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
38
develop/init-db.sh
Executable 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
31
develop/istruzioni.txt
Normal 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
43
develop/loki-config.yaml
Normal 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
32
develop/test-kafkla.sh
Normal 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!"
|
||||||
Reference in New Issue
Block a user