build image

This commit is contained in:
2025-11-29 19:51:15 +01:00
parent c688eefe0b
commit a4b7d3c738
177 changed files with 2018 additions and 23366 deletions

165
scripts/setup-registry-client.sh Executable file
View File

@@ -0,0 +1,165 @@
#!/bin/bash
# setup-registry-client.sh
# Script per configurare un client Docker per accedere a un registry con certificato self-signed
set -e
REGISTRY_IP=${1:-"192.168.1.204"}
REGISTRY_PORT=${2:-5000}
CERT_SOURCE=${3}
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
print_success() { echo -e "${GREEN}$1${NC}"; }
print_error() { echo -e "${RED}$1${NC}"; }
print_info() { echo -e "${BLUE} $1${NC}"; }
print_warning() { echo -e "${YELLOW}$1${NC}"; }
if [ "$#" -lt 1 ]; then
echo "Uso: $0 <registry_ip> [port] [cert_file]"
echo ""
echo "Parametri:"
echo " registry_ip - IP del registry (es: 192.168.1.204)"
echo " port - Porta del registry (default: 5000)"
echo " cert_file - File certificato (opzionale, verrà scaricato se non specificato)"
echo ""
echo "Esempi:"
echo " $0 192.168.1.204"
echo " $0 192.168.1.204 5000"
echo " $0 192.168.1.204 5000 /path/to/domain.crt"
exit 1
fi
REGISTRY_URL="$REGISTRY_IP:$REGISTRY_PORT"
DOCKER_CERTS_DIR="/etc/docker/certs.d/$REGISTRY_URL"
print_info "Configurazione client Docker per registry: $REGISTRY_URL"
echo ""
# Verifica se Docker è installato
if ! command -v docker &> /dev/null; then
print_error "Docker non trovato. Installalo prima di continuare."
exit 1
fi
# Crea directory per i certificati Docker
print_info "Creazione directory certificati Docker..."
sudo mkdir -p "$DOCKER_CERTS_DIR"
print_success "Directory creata: $DOCKER_CERTS_DIR"
# Scarica o copia il certificato
if [ -z "$CERT_SOURCE" ]; then
print_info "Scaricamento certificato dal registry..."
# Tenta di scaricare il certificato usando openssl
if timeout 5 openssl s_client -showcerts -connect "$REGISTRY_URL" </dev/null 2>/dev/null | \
openssl x509 -outform PEM > /tmp/registry-cert.pem 2>/dev/null; then
sudo mv /tmp/registry-cert.pem "$DOCKER_CERTS_DIR/ca.crt"
print_success "Certificato scaricato con successo"
else
print_error "Impossibile scaricare il certificato automaticamente"
print_warning "Opzioni:"
print_info " 1. Copia manualmente il certificato dal registry:"
print_info " scp root@$REGISTRY_IP:/opt/docker-registry/certs/domain.crt /tmp/registry.crt"
print_info " sudo cp /tmp/registry.crt $DOCKER_CERTS_DIR/ca.crt"
print_info ""
print_info " 2. Riavvia questo script specificando il file certificato:"
print_info " $0 $REGISTRY_IP $REGISTRY_PORT /path/to/cert.crt"
exit 1
fi
else
if [ ! -f "$CERT_SOURCE" ]; then
print_error "File certificato non trovato: $CERT_SOURCE"
exit 1
fi
print_info "Copia certificato da: $CERT_SOURCE"
sudo cp "$CERT_SOURCE" "$DOCKER_CERTS_DIR/ca.crt"
print_success "Certificato copiato"
fi
# Verifica permessi
sudo chmod 644 "$DOCKER_CERTS_DIR/ca.crt"
# Verifica certificato
print_info "Verifica certificato installato..."
if sudo openssl x509 -in "$DOCKER_CERTS_DIR/ca.crt" -text -noout > /dev/null 2>&1; then
print_success "Certificato valido"
print_info "Dettagli certificato:"
sudo openssl x509 -in "$DOCKER_CERTS_DIR/ca.crt" -noout -subject -issuer -dates
# Mostra SANs se presenti
if sudo openssl x509 -in "$DOCKER_CERTS_DIR/ca.crt" -text -noout | grep -q "Subject Alternative Name"; then
print_info "Subject Alternative Names:"
sudo openssl x509 -in "$DOCKER_CERTS_DIR/ca.crt" -text -noout | grep -A 3 "Subject Alternative Name"
else
print_warning "Certificato non ha Subject Alternative Names (SANs)"
print_warning "Considera di rigenerare il certificato con: ./scripts/generate-registry-cert.sh"
fi
else
print_error "Certificato non valido"
exit 1
fi
# Riavvia Docker
print_info "Riavvio Docker daemon..."
sudo systemctl restart docker
sleep 3
if sudo systemctl is-active --quiet docker; then
print_success "Docker riavviato con successo"
else
print_error "Errore nel riavvio di Docker"
exit 1
fi
# Test connessione al registry
echo ""
print_info "Test connessione al registry..."
# Test HTTPS
if timeout 5 openssl s_client -connect "$REGISTRY_URL" -CAfile "$DOCKER_CERTS_DIR/ca.crt" </dev/null 2>&1 | grep -q "Verify return code: 0"; then
print_success "Connessione HTTPS con verifica certificato: OK"
elif timeout 5 openssl s_client -connect "$REGISTRY_URL" </dev/null 2>&1 | grep -q "CONNECTED"; then
print_warning "Connessione HTTPS: OK ma verifica certificato fallita"
print_info "Il certificato potrebbe essere self-signed o avere SANs non corretti"
else
print_error "Impossibile connettersi al registry"
fi
# Test Docker login
echo ""
print_info "Per testare Docker con il registry, esegui:"
echo " docker pull $REGISTRY_URL/orchestrator-app:latest"
echo ""
print_info "Se il registry richiede autenticazione:"
echo " docker login $REGISTRY_URL"
echo ""
# Opzionale: installa anche nel sistema
read -p "Vuoi installare il certificato anche nel sistema per curl/wget? (y/N) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
print_info "Installazione certificato nel sistema..."
sudo cp "$DOCKER_CERTS_DIR/ca.crt" /usr/local/share/ca-certificates/registry-$REGISTRY_IP.crt
sudo update-ca-certificates
print_success "Certificato installato nel sistema"
# Test con curl
if curl -I "https://$REGISTRY_URL/v2/" 2>&1 | grep -q "200 OK"; then
print_success "Test curl: OK"
else
print_warning "Test curl fallito (normale se registry richiede autenticazione)"
fi
fi
echo ""
print_success "Setup client completato!"
print_info "Il Docker daemon ora può accedere a: $REGISTRY_URL"