commit 66d8b868a7571c20f5721f6b0d5d4eacd3691c26 Author: francesco Date: Fri Feb 13 12:47:48 2026 +0100 Upload files to "/" diff --git a/install_docker.sh b/install_docker.sh new file mode 100644 index 0000000..3c6446d --- /dev/null +++ b/install_docker.sh @@ -0,0 +1,186 @@ +#!/bin/bash + +############################################## +# Docker Installation Script for Ubuntu +# Installa la versione ufficiale più recente +# di Docker Engine su Ubuntu Linux +############################################## + +set -e # Esce se un comando fallisce + +# Colori per l'output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +# Funzione per stampare messaggi +print_header() { + echo -e "\n${GREEN}=== $1 ===${NC}\n" +} + +print_info() { + echo -e "${GREEN}✓${NC} $1" +} + +print_error() { + echo -e "${RED}✗${NC} $1" +} + +print_warning() { + echo -e "${YELLOW}⚠${NC} $1" +} + +# Installazione facoltativa di Portainer +install_portainer() { + local repo_url="https://git.pyconetwork.it/francesco/portainer.git" + local target_dir="/opt/portainer" + + print_header "Installazione di Portainer (opzionale)" + + if ! command -v git &> /dev/null; then + print_warning "git non trovato. Installazione in corso" + apt-get install -y git + print_info "git installato" + fi + + if [ -d "$target_dir/.git" ]; then + print_warning "Repository gia presente in $target_dir. Aggiorno" + git -C "$target_dir" pull + else + rm -rf "$target_dir" + git clone "$repo_url" "$target_dir" + fi + + if [ -f "$target_dir/docker-compose.yml" ] || [ -f "$target_dir/compose.yaml" ]; then + print_info "Avvio dei servizi con Docker Compose" + docker compose -f "$target_dir/docker-compose.yml" up -d 2>/dev/null || \ + docker compose -f "$target_dir/compose.yaml" up -d + print_info "Portainer avviato" + return + fi + + if [ -f "$target_dir/install.sh" ]; then + print_info "Esecuzione dello script di installazione del repository" + bash "$target_dir/install.sh" + print_info "Installazione completata" + return + fi + + print_warning "Nessun file di avvio trovato (docker-compose.yml/compose.yaml/install.sh)" + print_warning "Controlla il repository in $target_dir per i passi manuali" +} + +# Verifica che lo script sia eseguito con privilegi sudo +if [[ $EUID -ne 0 ]]; then + print_error "Questo script deve essere eseguito con sudo" + echo "Usa: sudo bash install_docker.sh" + exit 1 +fi + +# Verifica che il sistema sia Ubuntu/Debian +if ! command -v lsb_release &> /dev/null; then + print_error "lsb_release non trovato. Assicurati di usare Ubuntu o Debian" + exit 1 +fi + +OS_VERSION=$(lsb_release -cs) +print_header "Installazione di Docker su Ubuntu ($OS_VERSION)" + +# Step 1: Aggiornamento dei repository e installazione dipendenze +print_header "Step 1: Aggiornamento del sistema e installazione dipendenze" +apt-get update +apt-get install -y apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release +print_info "Dipendenze installate" + +# Step 2: Aggiunta della GPG key di Docker +print_header "Step 2: Aggiunta della GPG key ufficiale di Docker" +mkdir -p /etc/apt/keyrings +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg +chmod a+r /etc/apt/keyrings/docker.gpg +print_info "GPG key aggiunta" + +# Step 3: Aggiunta del repository di Docker +print_header "Step 3: Configurazione del repository di Docker" +echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null +apt-get update +print_info "Repository di Docker aggiunto" + +# Step 4: Installazione di Docker +print_header "Step 4: Installazione di Docker Engine, CLI e containerd" +apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin +print_info "Docker installato con successo" + +# Step 5: Avvio e abilitazione del servizio Docker +print_header "Step 5: Configurazione del servizio Docker" +systemctl start docker +systemctl enable docker +print_info "Servizio Docker avviato e abilitato al boot" + +# Step 6: Configurazione permessi per l'utente corrente +print_header "Step 6: Configurazione permessi per l'utente Docker" + +# Se lo script è stato eseguito con sudo da un utente normale +if [ ! -z "$SUDO_USER" ]; then + usermod -aG docker "$SUDO_USER" + print_info "Utente $SUDO_USER aggiunto al gruppo docker" + print_warning "Effettua il logout e login per attivare i permessi del gruppo docker" +else + print_warning "Lo script è stato eseguito come root. Per usare Docker senza sudo:" + print_warning " 1. Crea un utente non-root" + print_warning " 2. Esegui: sudo usermod -aG docker " + print_warning " 3. Effettua il logout/login" +fi + +# Step 7: Verifica dell'installazione +print_header "Step 7: Verifica dell'installazione" + +# Versione di Docker +DOCKER_VERSION=$(docker --version) +print_info "Docker version: $DOCKER_VERSION" + +# Verifica che il servizio sia attivo +if systemctl is-active --quiet docker; then + print_info "Servizio Docker: ATTIVO" +else + print_error "Servizio Docker: INATTIVO" + exit 1 +fi + +# Test con hello-world +print_header "Esecuzione del test con l'immagine hello-world" +if [ ! -z "$SUDO_USER" ]; then + sudo -u "$SUDO_USER" docker run --rm hello-world > /dev/null 2>&1 +else + docker run --rm hello-world > /dev/null 2>&1 +fi + +if [ $? -eq 0 ]; then + print_info "Test hello-world completato con successo" +else + print_warning "Il test hello-world ha riscontrato problemi" +fi + +# Step 8: Installazione facoltativa di Portainer +read -r -p "Vuoi installare Portainer? [y/N]: " INSTALL_PORTAINER +case "$INSTALL_PORTAINER" in + y|Y|yes|YES) + install_portainer + ;; + *) + print_info "Installazione di Portainer saltata" + ;; +esac + +# Riepilogo finale +print_header "Installazione completata!" +echo -e "${GREEN}Docker è pronto per l'uso${NC}" +echo "" +echo "Comandi utili:" +echo " docker --version # Mostra la versione di Docker" +echo " docker ps # Elenca i container attivi" +echo " docker images # Elenca le immagini disponibili" +echo " docker run # Esegui una nuova immagine" +echo " docker compose --version # Mostra la versione di Docker Compose" +echo "" +print_info "Documentazione: https://docs.docker.com"