Skip to content

Latest commit

 

History

History
423 lines (331 loc) · 16.9 KB

File metadata and controls

423 lines (331 loc) · 16.9 KB

🗺️ Project Roadmap

Stato avanzamento del progetto Nextcloud su Oracle Cloud Infrastructure.

Ultimo aggiornamento: Marzo 2025


✅ FASE 1: INFRASTRUCTURE SETUP - COMPLETATA

Infrastruttura Base

  • Creazione istanza OCI A1.Flex (4 vCPU, 24GB RAM, 100GB storage)
  • Configurazione Security Lists OCI (porte 22, 80, 443, 8080)
  • Setup SSH con chiavi e script di connessione
  • Configurazione dominio personalizzato (migrato da DuckDNS a dominio custom)

Sistema e Sicurezza Base

  • Update sistema Ubuntu 24.04 LTS
  • Installazione pacchetti essenziali
  • Configurazione UFW firewall
  • Setup Fail2ban per protezione SSH
  • Configurazione unattended-upgrades

Docker Stack

  • Installazione Docker Engine + Docker Compose
  • Configurazione user non-root per Docker
  • Setup Caddy reverse proxy
  • Configurazione Let's Encrypt SSL automatico
  • Deploy Nextcloud AIO con tutti i servizi

Nextcloud Configuration

  • Installazione Nextcloud Hub 25 Autumn
  • Configurazione componenti opzionali:
    • Collabora Online (Office editing)
    • Imaginary (image processing)
    • Notify Push (performance)
    • Talk (rimosso - non necessario)
    • Whiteboard (rimosso - non necessario)

Data Migration

  • Creazione utente admin personalizzato
  • Import contatti (rubrica.vcf)
  • Import calendari (10 calendari .ics)
  • Import tasks/attività

Documentation & Version Control

  • Documentazione completa step-by-step (6 guide)
  • README professionale con architettura
  • Script di deployment e utility
  • Repository pubblicato su GitHub

✅ FASE 2: HARDENING & PRODUCTION READINESS - COMPLETATA

Security Hardening

  • Eliminazione account admin default
  • Verifica completa configurazione sicurezza
    • Test SSL/TLS headers (HSTS, X-Frame-Options, X-Content-Type-Options)
    • Audit firewall rules (UFW + OCI Security Lists)
    • Check Fail2ban logs (5 IP bannati, 492 tentativi bloccati)
  • Configurazione 2FA (TOTP)
  • Setup App Passwords per dispositivi

Backup & Disaster Recovery

  • Verifica backup automatici abilitati (Borg daily 04:00 UTC)
  • Test backup manuale (primo backup 2.6MB)
  • Script download backup locale (download-backup.sh)
  • Script export dati leggibili (export-data.sh - calendari .ics, contatti .vcf)
  • Script backup settimanale automatico (weekly-backup.sh)
  • Setup cron automation (setup-cron.sh - domenica 22:00) ✅ CONFIGURATO
  • Cron job attivo (verifica: crontab -l)
  • Documentazione procedura disaster recovery (docs/06-BACKUP-RESTORE.md)
  • Test restore completo da backup - Opzionale
  • Test disaster recovery completo - Opzionale

Testing & Validation

  • Test sincronizzazione dispositivi (iPad, iPhone) - Pianificato domani
  • Test desktop client (Fedora) - In corso
  • Verifica consumo risorse: ~1GB RAM di 24GB (ottimizzato!)
  • Test funzionalità core (Calendar, Contacts, Files)
  • Test app Collabora/Office

Documentation

  • Guida backup & restore completa (docs/06-BACKUP-RESTORE.md)
  • Scripts documentation (scripts/README.md)
  • Troubleshooting guide integrata
  • README principale aggiornato con backup strategy

✅ FASE 3: AUTOMATION & IaC - COMPLETATA

Terraform Infrastructure as Code

  • Setup Terraform OCI provider (terraform/provider.tf)
  • Configurazione variabili (terraform/variables.tf)
  • Modulo creazione VCN e networking (terraform/network.tf)
    • VCN, Internet Gateway, Route Table
    • Public Subnet
    • Security Lists (SSH, HTTP, HTTPS, 8080, 8443)
  • Modulo creazione compute instance (terraform/compute.tf)
    • Ubuntu 24.04 ARM (A1.Flex)
    • Cloud-init bootstrap script
    • Configurazione shape (4 OCPU, 24GB RAM)
  • Modulo storage con persistent volume (terraform/storage.tf)
    • Block Volume separato (150GB per backup Borg)
    • prevent_destroy = true per protezione backup
    • Volume attachment automatico
    • Architettura corretta: Persistent volume SOLO per backup, dati in volumi Docker standard
  • Output e informazioni (terraform/outputs.tf)
    • Instance info, IPs, URLs
    • SSH command, cost estimate
  • Cloud-init automation completa (terraform/cloud-init.yaml)
    • Docker installation
    • Persistent storage mount per backup
    • UFW + Fail2ban setup
    • DNS configuration
    • Nextcloud AIO + Caddy auto-deploy
    • GitHub repository auto-clone - Configuration sempre aggiornata
    • Monitoring stack auto-deploy (Prometheus + Grafana + Exporters)
  • Multi-environment setup (test.tfvars, prod.tfvars)
  • Testing completo su TEST environment
  • Deploy e test su PROD environment
  • Validazione destroy/apply cycle - Backup persistenti ✅
  • Test disaster recovery completo (3 cicli destroy/apply testati)
    • DNS propagation verificata
    • SSL certificate renewal testato (Let's Encrypt staging)
    • Data persistence confermata (block volume protected)
  • Documentazione Terraform (terraform/README.md, docs/08-TERRAFORM-STRATEGY.md)
    • Disaster Recovery procedures documentate
    • Workflow operativi (git pull vs destroy/apply)
    • Troubleshooting completo (SSL rate limit, DNS, cloud-init)

Configuration Management

  • Automatizzazione installazione Docker - FATTO via cloud-init.yaml
  • Automatizzazione deploy Nextcloud stack - FATTO via cloud-init.yaml
  • Automatizzazione firewall + security - FATTO (UFW + Fail2ban via cloud-init)
  • Automatizzazione DNS update - FATTO via cloud-init
  • Ansible playbook per system setup - Non necessario (cloud-init è sufficiente)
  • Idempotency testing - Opzionale

CI/CD Pipeline ✅ COMPLETATA

  • GitHub Actions workflow per Terraform (ci.yml)
    • Staged pipeline con 5 stage sequenziali
    • Fast feedback (< 5 min per PR)
    • Parallelizzazione intelligente (security + docker in parallelo)
  • Terraform validation su PR
    • Format check (terraform fmt)
    • Init + Validate
    • tfsec security scanning
    • Trivy IaC vulnerability scanning
  • Terraform apply su merge - Non implementato by design (deploy manuale)
  • Automated testing completo
    • YAML linting (yamllint)
    • Docker Compose validation
    • Markdown linting (markdownlint-cli2)
    • Shell script linting (shellcheck)
    • Secret detection (gitleaks)
    • Custom security checks (privileged containers, socket permissions)
  • Pre-commit hooks (.pre-commit-config.yaml)
    • Setup script (scripts/setup-precommit.sh)
    • Auto-format Terraform, Markdown
    • Auto-lint YAML, Shell scripts
    • Secret detection locale
  • Scheduled security scans
    • Deep security scan (weekly Monday 9:00 UTC)
    • Docker image vulnerability scan (weekly Wednesday 3:00 UTC)
    • SARIF upload to GitHub Security tab
  • PR automation
    • Auto-labeling by file paths
    • Size labeling (XS/S/M/L/XL)
    • Conventional commits validation (informational)
    • Branch protection rules documented
  • Documentation CI/CD (docs/09-CICD-MONITORING.md)
    • Pipeline architecture diagrams
    • Workflow structure explanation
    • Troubleshooting guide
    • Best practices

✅ FASE 3.5: MEDIA SERVICES & PRIVATE ACCESS - COMPLETATA

Media Services (Marzo 2025)

  • Komga - Manga/comics reader integrato con file Nextcloud
    • Lettura diretta dalla libreria Nextcloud (read-only mount)
    • Accesso sicuro via Tailscale Serve (HTTPS)
    • Compatibile con app mobile (Yokai su Android/e-ink)
  • Jellyfin - Media server per video
    • Streaming video dalla libreria Nextcloud (read-only mount)
    • Accesso sicuro via Tailscale Serve (HTTPS)

Migrazione Sicurezza Servizi Privati

  • Migrazione da DuckDNS a dominio personalizzato
  • Tailscale Serve per servizi privati (Komga, Jellyfin, Grafana)
    • Servizi bound a localhost only (127.0.0.1)
    • HTTPS automatico via Tailscale Serve
    • Nessun sottodominio pubblico necessario
    • Caddy gestisce solo Nextcloud (unico servizio pubblico)
  • Valutate e scartate alternative: basicauth (loop login), IP filtering in Docker (bridge IP issue), accesso diretto Tailscale IP (no SSL)

✅ FASE 4: MONITORING & OBSERVABILITY - COMPLETATA

Monitoring Stack ✅ COMPLETATO

  • Prometheus setup per metriche (docker/monitoring/prometheus.yml)
    • 30 giorni retention
    • Scrape interval 15s
    • Job configuration per tutti i servizi
  • Grafana dashboard (docker/docker-compose.yml)
    • Auto-provisioned Prometheus datasource
    • SSL reverse proxy via Caddy (monitoring.your-domain.example.com)
    • Password protection configurata
  • Node Exporter - System metrics
    • CPU, RAM, disk, network
    • Filesystem monitoring
    • System load metrics
  • cAdvisor - Docker container metrics
    • Container resource usage
    • Per-container CPU/memory/network
    • Docker events tracking
  • Caddy metrics endpoint (:2019/metrics)
    • HTTP request metrics
    • SSL certificate expiry
    • Response times
  • Monitoring network isolation - Secure by default
    • Prometheus, Grafana, exporters su rete monitoring
    • Localhost-only bindings (solo Grafana esposta via HTTPS)
  • Auto-deployment via cloud-init - Monitoring sempre presente

Dashboard & Visualization ✅ COMPLETATO

  • Grafana accessibile via Tailscale Serve (https://tailscale-hostname:3000)
  • Import dashboard ID 179 (Docker Container & Host Metrics)
  • Import dashboard ID 11074 (Node Exporter Full)
  • Custom dashboard per Nextcloud-specific metrics
  • Dashboard per Caddy reverse proxy metrics

Alerting & Notifications 📋 PIANIFICATO

  • Alert manager configuration
  • Critical alerts:
    • Disk space < 20%
    • Memory usage > 90%
    • Container down/restarting
    • SSL certificate expiry < 7 days
  • Notification channels (email, webhook)

Advanced Observability 🔮 FUTURO

  • Log aggregation (Loki + Promtail)
  • Distributed tracing (opzionale)
  • Application Performance Monitoring

🔮 FASE 5: ADVANCED FEATURES - FUTURO

High Availability & Scalability

  • Multi-region backup strategy
  • Database replication (futuro)
  • Load balancing considerations
  • CDN integration (opzionale)

Additional Services

  • Vaultwarden (password manager)
  • Portainer (Docker GUI management)
  • Uptime Kuma (uptime monitoring)
  • Watchtower (auto-updates container)

Advanced Security

  • Intrusion detection (OSSEC/Wazuh)
  • Web Application Firewall
  • Regular security audits
  • Penetration testing

📊 Metriche di Successo

MVP (Minimum Viable Product) ✅

  • Nextcloud accessibile e funzionante
  • SSL/HTTPS configurato
  • Dati migrati correttamente
  • Backup funzionanti

Production Ready ✅ COMPLETATO

  • Security hardening completo
  • Backup testati e funzionanti (dual system: Borg + exports)
  • Documentazione completa
  • Monitoring base attivo - Prometheus + Grafana deployati

Portfolio Ready ✅ COMPLETATO

  • Terraform struttura completa (IaC pattern production-grade)
  • Terraform testato su deployment reale (test + prod environments)
  • CI/CD pipeline attiva (GitHub Actions con 3 workflows)
  • Monitoring stack deployato - Prometheus + Grafana + Exporters
  • Disaster Recovery testato - 3 cicli destroy/apply completati
  • Monitoring dashboards configurati - In corso
  • Demo/screenshots - Opzionale

Production Grade (Lungo termine)

  • HA setup
  • Disaster recovery testato - Funzionante (3 test cycles)
  • Monitoring completo con alerting e dashboards
  • Security audit completato

🎯 Next Immediate Actions

✅ Completato

  1. Monitoring stack deployato - Prometheus + Grafana + Node Exporter + cAdvisor
  2. Cloud-init con GitHub clone - Configuration auto-update da repo
  3. Disaster recovery testato - 3 cicli destroy/apply completati con successo
  4. Documentazione workflow operativi - git pull vs destroy/apply
  5. SSL production certificates - Let's Encrypt production attivi
  6. Grafana password configurata - Login protetto
  7. Komga + Jellyfin - Media services con accesso Tailscale Serve
  8. Migrazione DuckDNS → dominio personalizzato
  9. README aggiornato - Documentazione completa per portfolio

Prossimi Step

  1. Monitoring Alerting

    • Configurare Alertmanager
    • Alert critici (disk space, memory, containers down)
    • Notification channels (email/webhook)
  2. Portfolio Finalization

    • Screenshot monitoring dashboards
    • Blog post/writeup (opzionale)

Note Operative

Accesso Servizi Privati (via Tailscale Serve):

  • Komga: https://tailscale-hostname:25600
  • Jellyfin: https://tailscale-hostname:8096
  • Grafana: https://tailscale-hostname:3000
  • Prometheus: http://localhost:9090 (SSH tunnel: ssh -L 9090:localhost:9090 ubuntu@IP)

📝 Note & Decisions

Scelte architetturali

  • Caddy vs Nginx/Traefik: Scelto Caddy per SSL automatico e semplicità
  • AIO vs Manual Setup: AIO per gestione semplificata e best practices integrate
  • PostgreSQL vs MySQL: PostgreSQL incluso in AIO, migliori performance
  • Dominio personalizzato: Flessibile, professionale, compatibile Let's Encrypt
  • Tailscale Serve vs sottodomini pubblici: Servizi privati (Komga, Jellyfin, Grafana) non esposti su internet. Tailscale Serve fornisce HTTPS senza bisogno di DNS pubblici o certificati extra
  • BasicAuth scartato: Causa loop di login con Komga e Jellyfin (auth interna in conflitto)
  • IP filtering in Docker scartato: Caddy in Docker vede Docker bridge IP, non l'IP Tailscale del client

Container rimossi e perché

  • Talk: Funzionalità multi-utente non necessaria per uso singolo
  • Whiteboard: Collaborazione non necessaria
  • ClamAV: Troppo pesante (1GB RAM), antivirus non essenziale

Lezioni apprese

  • SKIP_DOMAIN_VALIDATION=true causa problemi → Usare Caddy come reverse proxy
  • Importare calendario e tasks insieme, non separatamente
  • OCI Security Lists devono essere configurate PRIMA del deploy
  • Backup testing è critico prima di considerare il sistema production-ready
  • Dual backup strategy (Borg + exports) offre disaster recovery completo + portabilità
  • Script bash con set -e possono terminare prematuramente in loop → usare set -u o error handling
  • curl in while loop consuma stdin → usare array o redirect < /dev/null

Terraform & Infrastructure as Code (Nov 2025)

  • ❌ ERRORE CRITICO: Configurare Docker data-root sul volume persistente causa corruzione degli overlay2 layers al destroy/apply
  • ✅ ARCHITETTURA CORRETTA: Volume persistente SOLO per backup Borg, Docker volumes in /var/lib/docker/volumes (su boot volume)
  • Pattern "Pets vs Cattle": Compute = Cattle (effimero, ricreabile), Data = Pet (persistente, nei backup)
  • Nextcloud AIO richiede volumi Docker standard - non modificare posizione con data-root
  • Destroy/Apply workflow: Istanza fresh → Setup AIO manuale → Restore da backup Borg
  • Questo è by design: disaster recovery richiede restore manuale, ma destroy/apply non dovrebbe essere frequente in production
  • prevent_destroy sul volume dati previene cancellazione accidentale dei backup
  • Cloud-init può auto-deployare container ma NON può restorare dati (richiede AIO interface)

CI/CD & GitHub Actions (Nov 2025)

  • Staged Pipeline: Struttura con stage sequenziali (validation → security/docker parallel → summary) offre feedback rapido e chiaro
  • Fail Fast: Validation stage prima (< 2 min) evita di eseguire security scan costosi su codice malformato
  • SARIF Upload Permissions: Workflow che caricano su GitHub Security tab richiedono security-events: write permission
  • Markdown Linting Exclusions: .terraform/ provider dependencies vanno esclusi con pattern */\.terraform/* (doppio asterisco per nested paths)
  • Pre-commit Hooks: Testare localmente prima del commit riduce drasticamente i cicli di feedback CI/CD
  • Terraform Security: tfsec trova security issues che Terraform validate non rileva (es. public IP, security group rules)
  • Separazione CI/Scheduled: CI workflow con output table per feedback immediato, scheduled workflows con SARIF per tracking lungo termine
  • Testing Locale Prima: find . -name "*.md" -not -path "*/\.terraform/*" | xargs markdownlint-cli2 per evitare commit inutili
  • Git History Pulita: Testare sempre localmente prima di pushare - commit multipli di fix sporcano la repo

Ultimo aggiornamento: Marzo 2025