# 🚀 VigilanzaTurni - Guida Deployment GitLab Sistema di deployment automatico con **versioning semantico** e **backup database**. --- ## 📋 Indice 1. [Configurazione Iniziale](#configurazione-iniziale) 2. [Come Fare il Deploy](#come-fare-il-deploy) 3. [Versioning Semantico](#versioning-semantico) 4. [Backup Database](#backup-database) 5. [Troubleshooting](#troubleshooting) --- ## 🔧 Configurazione Iniziale ### 1. Crea Personal Access Token su GitLab 1. Vai su **GitLab** → **Preferenze** → **Access Tokens** - URL: https://gitlab.com/-/profile/personal_access_tokens 2. Crea nuovo token con nome: `VigilanzaTurni Deploy` 3. Seleziona questi **permessi** (scopes): - ✅ `api` - Accesso completo API - ✅ `read_repository` - Lettura repository - ✅ `write_repository` - Scrittura repository 4. **Salva il token** (lo vedrai una sola volta!) ### 2. Configura git.env Crea il file `git.env` nella root del progetto: ```bash # Il file git.env è già presente come template nano git.env ``` Contenuto `git.env`: ```bash GITLAB_USER=tuo-username GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx GITLAB_REPO=https://gitlab.com/tuo-username/vigilanzaturni.git GITLAB_BRANCH=main ``` **⚠️ IMPORTANTE**: - Il file `git.env` è già in `.gitignore` - **non verrà mai committato** - Conserva il token in un posto sicuro (password manager) ### 3. Verifica Repository GitLab Assicurati che il repository esista su GitLab: ```bash # Crea repository su GitLab web UI # Oppure usa GitLab CLI ``` --- ## 🚀 Come Fare il Deploy ### Metodo Rapido (Consigliato) ```bash # Rendi eseguibile (solo prima volta) chmod +x push-gitlab.sh # Deploy patch (bug fix, piccole modifiche) ./push-gitlab.sh # Deploy minor (nuove funzionalità) ./push-gitlab.sh minor # Deploy major (breaking changes) ./push-gitlab.sh major ``` ### Metodo Completo ```bash # Usa lo script principale per maggior controllo ./deploy-to-gitlab.sh [patch|minor|major] ``` --- ## 📊 Versioning Semantico Il sistema usa **Semantic Versioning 2.0.0**: `MAJOR.MINOR.PATCH` ### Formato Versione: `X.Y.Z` | Componente | Quando Incrementare | Esempio | |------------|---------------------|---------| | **MAJOR (X)** | Breaking changes, API incompatibili | 1.5.3 → **2.0.0** | | **MINOR (Y)** | Nuove funzionalità retrocompatibili | 1.5.3 → **1.6.0** | | **PATCH (Z)** | Bug fix, piccole correzioni | 1.5.3 → **1.5.4** | ### Esempi Pratici #### PATCH (default) - Bug fix ```bash ./push-gitlab.sh # 1.0.0 → 1.0.1 ./push-gitlab.sh patch # 1.0.1 → 1.0.2 ``` **Quando usare**: - ✅ Correzione bug - ✅ Typo nel codice - ✅ Performance minori - ✅ Aggiornamento dipendenze patch #### MINOR - Nuove funzionalità ```bash ./push-gitlab.sh minor # 1.0.5 → 1.1.0 ``` **Quando usare**: - ✅ Nuova pagina/sezione - ✅ Nuova API endpoint - ✅ Feature richiesta da cliente - ✅ Miglioramento UX significativo #### MAJOR - Breaking changes ```bash ./push-gitlab.sh major # 1.5.2 → 2.0.0 ``` **Quando usare**: - ✅ Cambio architettura database - ✅ Rimozione API/endpoint - ✅ Cambio sistema autenticazione - ✅ Migrazione framework --- ## 💾 Backup Database ### Automatico ad Ogni Deploy Lo script **crea automaticamente** un backup del database: ``` database-backups/ └── vigilanzaturni_v1.0.1_20250117_143022.sql.gz └── vigilanzaturni_v1.0.2_20250117_150315.sql.gz └── vigilanzaturni_v1.1.0_20250118_091145.sql.gz ``` ### Formato Nome File ``` vigilanzaturni_v{VERSION}_{TIMESTAMP}.sql.gz ``` - **VERSION**: Versione deployment (es. 1.0.1) - **TIMESTAMP**: Data e ora (YYYYMMDD_HHMMSS) ### Retention Policy - ✅ Compressi con gzip (risparmio spazio ~90%) - ✅ Mantiene ultimi **10 backup** automaticamente - ✅ Backup più vecchi eliminati automaticamente ### Ripristino Manuale Se necessario ripristinare un backup: ```bash # 1. Decomprimi gunzip database-backups/vigilanzaturni_v1.0.1_20250117_143022.sql.gz # 2. Ripristina psql $DATABASE_URL < database-backups/vigilanzaturni_v1.0.1_20250117_143022.sql ``` --- ## 🔍 Troubleshooting ### ❌ Errore: "git.env non trovato" **Soluzione**: ```bash # Crea git.env e configura credenziali nano git.env ``` ### ❌ Errore: "Authentication failed" **Possibili cause**: 1. Token GitLab scaduto 2. Token senza permessi corretti 3. Username errato **Soluzione**: ```bash # 1. Verifica credenziali in git.env cat git.env # 2. Crea nuovo token su GitLab # https://gitlab.com/-/profile/personal_access_tokens # 3. Aggiorna GITLAB_TOKEN in git.env ``` ### ❌ Errore: "Remote repository not found" **Soluzione**: ```bash # Verifica URL repository in git.env # Deve essere: https://gitlab.com/USERNAME/REPO.git # Verifica che il repository esista su GitLab ``` ### ❌ Backup Database Fallito **Soluzione**: ```bash # Verifica DATABASE_URL echo $DATABASE_URL # Verifica pg_dump installato which pg_dump # Test manuale backup pg_dump $DATABASE_URL > test-backup.sql ``` ### ⚠️ Warning: "Push failed" **Possibili cause**: 1. Repository protetto (protected branch) 2. Permessi insufficienti 3. Conflitti git **Soluzione**: ```bash # 1. Verifica branch protection su GitLab # Settings → Repository → Protected Branches # 2. Verifica permessi token (deve essere Maintainer/Owner) # 3. Forza push (con cautela!) git push gitlab main --force ``` --- ## 📈 Workflow Consigliato ### Sviluppo Giornaliero ```bash # Ogni bug fix o piccola modifica ./push-gitlab.sh # 1.0.0 → 1.0.1 → 1.0.2 ``` ### Fine Settimana (Nuove Feature) ```bash # Dopo aver completato una feature ./push-gitlab.sh minor # 1.0.5 → 1.1.0 ``` ### Release Maggiori (Milestone) ```bash # Dopo cambiamenti architetturali importanti ./push-gitlab.sh major # 1.5.2 → 2.0.0 ``` --- ## 📝 File Generati | File | Descrizione | Committato su Git | |------|-------------|-------------------| | `git.env` | Credenziali GitLab | ❌ No (in .gitignore) | | `version.json` | Versione corrente | ✅ Sì | | `database-backups/*.sql.gz` | Backup DB | ❌ No (in .gitignore) | | `deploy-to-gitlab.sh` | Script deployment | ✅ Sì | | `push-gitlab.sh` | Helper script | ✅ Sì | --- ## 🎯 Best Practices ### ✅ DO - Fai deploy **frequenti** (patch) - Usa **minor** per nuove feature complete - Usa **major** solo per breaking changes - Testa localmente prima del deploy - Verifica backup database dopo deploy importante ### ❌ DON'T - Non committare `git.env` (già protetto) - Non saltare versioni manualmente - Non modificare `version.json` manualmente - Non eliminare backup recenti manualmente --- ## 📞 Supporto In caso di problemi: 1. Controlla version.json: `cat version.json` 2. Verifica configurazione: `cat git.env` 3. Testa connessione GitLab manualmente 4. Controlla se il repository esiste --- **Versione Documento**: 1.0.0 **Ultimo Aggiornamento**: 2025-01-17 **Compatibilità**: VigilanzaTurni v1.0.0+