Files
laboratori-cloud/README.md
T
2026-04-10 15:09:37 +00:00

246 lines
8.9 KiB
Markdown

# Laboratori Cloud - Corso Soluzioni Cloud
Simulazione pratica di servizi cloud usando Docker locale.
Questo corso ti insegna i concetti fondamentali del cloud (IAM, Network, Compute, Storage, Database)
attraverso laboratori pratici che usano Docker per simulare servizi AWS/Azure/GCP.
## Perché questo corso?
I servizi cloud sono potenti, ma imparare su account reali può essere costoso e intimidatorio.
Questo corso usa Docker per simulare i componenti core della cloud infrastructure direttamente sul tuo computer.
Ogni laboratorio costruisce un parallelismo diretto tra i container locali e i servizi cloud reali.
## Prerequisiti
Prima di iniziare, assicurati di avere:
- **VM Linux Debian** (es. Debian 13) con Docker Engine >= 24.0 installato
- **Docker Compose V2** (comando `docker compose`, non `docker-compose`)
- **Utility di rete**: netcat, curl, iproute2
### Risorse Minime Consigliate
- RAM: 16 GB (funziona con 8 GB, ma alcuni lab potrebbero essere lenti)
- CPU: 4 core
- Spazio disco: 20 GB liberi
### Installazione VM Debian e Docker
**VM Linux Debian:**
- Installa una VM con Debian 13 (o versione recente)
- Assicurati di avere accesso sudo
**Installazione Docker:**
```bash
wget -O install-docker.sh https://get.docker.com/
chmod +x ./install-docker.sh
./install-docker.sh
sudo usermod -aG docker $USER
# Fai logout e login per applicare il gruppo
```
## Quick Start
1. Clona questa repository:
```bash
git clone https://gitea.lab.home.lucasacchi.net/lucasacchi/laboratori-cloud
cd laboratori-cloud
```
2. Verifica il tuo ambiente:
```bash
./scripts/check-env.sh
```
3. Leggi la **Guida per Studenti** per capire come utilizzare il corso:
```bash
cat STUDENT-GUIDE.md
```
4. Se tutti i check passano, sei pronto per iniziare il primo laboratorio!
## Preparazione Lab
Prima di iniziare un nuovo laboratorio, prepara l'ambiente del corso:
```bash
./scripts/prepare-lab.sh --dry-run
./scripts/prepare-lab.sh
```
Questo script pulisce solo le risorse create dai laboratori cloud e riduce i conflitti di porte, reti e container tra un lab e l'altro.
## Laboratori
Il corso è composto da 5 laboratori progressivi:
### 1. IAM & Sicurezza ✅ COMPLETATO
Configura utenti Linux, permessi Docker socket, capisci i paralleli IAM.
- Crea utenti con permessi limitati
- Configura accesso al Docker socket
- Container non-root per sicurezza
- Parallelismo: Utenti Linux -> IAM Users, Gruppi -> IAM Roles
**Documentazione:** [Tutorial](labs/lab-01-iam/tutorial/) | [How-to](labs/lab-01-iam/how-to-guides/) | [Reference](labs/lab-01-iam/reference/) | [Explanation](labs/lab-01-iam/explanation/)
### 2. Network & VPC ✅ COMPLETATO
Crea reti Docker isolate che simulano VPC e Subnets cloud.
- Reti bridge isolate con subnet personalizzate (10.0.1.0/24, 10.0.2.0/24)
- Regole di isolamento tra container (ping test)
- Reti private con flag `--internal` (simulano private subnet)
- Parallelismo: Docker Networks -> VPC, `--internal` -> Private Subnet, `--subnet` -> CIDR blocks
**Documentazione:** [Tutorial](labs/lab-02-network/tutorial/) | [How-to](labs/lab-02-network/how-to-guides/) | [Reference](labs/lab-02-network/reference/) | [Explanation](labs/lab-02-network/explanation/)
### 3. Compute & EC2 ✅ COMPLETATO
Deploy container con limiti CPU/memoria e healthchecks.
- Configura limiti di risorse (cpus, mem_limit)
- Implementa healthcheck personalizzati
- Parallelismo: Container -> EC2, Resource limits -> Instance types
**Documentazione:** [Tutorial](labs/lab-03-compute/tutorial/) | [How-to](labs/lab-03-compute/how-to-guides/) | [Reference](labs/lab-03-compute/reference/) | [Explanation](labs/lab-03-compute/explanation/)
### 4. Storage & S3 ✅ COMPLETATO
Configura Docker Volumes e MinIO per storage S3-compatible.
- Volumes named e bind mounts
- MinIO come S3 locale
- Parallelismo: Docker Volumes -> EBS, MinIO -> S3
- **Test:** verifica finale disponibile nel lab (`bash tests/99-final-verification.sh`)
**Documentazione:** [Tutorial](labs/lab-04-storage/tutorial/) | [How-to](labs/lab-04-storage/how-to-guides/) | [Reference](labs/lab-04-storage/reference/) | [Explanation](labs/lab-04-storage/explanation/)
### 5. Database & RDS ✅ COMPLETATO
Deploy PostgreSQL in rete privata con persistenza dati.
- Container database in rete isolata
- Backup e restore dei dati
- Parallelismo: PostgreSQL container -> RDS, Volume -> Snapshot
- **Test:** verifica finale disponibile nel lab (`bash tests/99-final-verification.sh`)
**Documentazione:** [Tutorial](labs/lab-05-database/tutorial/) | [How-to](labs/lab-05-database/how-to-guides/) | [Reference](labs/lab-05-database/reference/) | [Explanation](labs/lab-05-database/explanation/)
## Struttura Repository
```
laboratori-cloud/
├── STUDENT-GUIDE.md # Guida completa per studenti
├── labs/ # Laboratori (1 per modulo cloud)
│ ├── lab-01-iam/ # IAM & Sicurezza
│ ├── lab-02-network/ # Network & VPC
│ ├── lab-03-compute/ # Compute & EC2
│ ├── lab-04-storage/ # Storage & S3
│ └── lab-05-database/ # Database & RDS
├── how-to-guides/ # Guide procedurali specifiche
├── reference/ # Specifiche tecniche e reference
└── scripts/ # Script di verifica e utilità
```
## Git Workflow
Questo repository segue [Conventional Commits](https://www.conventionalcommits.org/).
Esempi di commit che troverai:
- `feat(lab-01): add user configuration script`
- `test(lab-02): add network isolation test`
- `docs(lab-03): add explanation for healthchecks`
Ogni laboratorio è sviluppato su un branch isolato (es. `lab-01-iam`) e
mergeggiato su `main` solo quando completo e testato.
## Framework Diátaxis
Ogni laboratorio include 4 tipi di documento per supportare diversi stili di apprendimento:
1. **Tutorial** - Guida passo-passo incrementale
2. **How-to Guides** - Procedure specifiche e task-focused
3. **Reference** - Specifiche tecniche e parametri
4. **Explanation** - Concetti e parallelismi cloud/locale
## Troubleshooting
### Docker non parte
- Verifica che il demone Docker sia in esecuzione: `docker ps`
- Riavvia Docker: `sudo systemctl restart docker` (Linux)
### Script check-env.sh fallisce
- Verifica la versione di Docker: `docker --version` (deve essere >= 24.0)
- Verifica Compose V2: `docker compose version` (non `docker-compose`)
- Assicurati di essere nel gruppo docker: `groups $USER`
### Permesso negato su Docker socket
```bash
sudo usermod -aG docker $USER
# Fai logout e login oppure
newgrp docker
```
### Container non parte o crasha subito
- Controlla i log: `docker logs <container-name>`
- Verifica le risorse disponibili: `docker stats`
- Controlla le porte in uso: `docker ps`
### Reset completo ambiente
Per pulire solo le risorse del corso tra un lab e l'altro:
```bash
./scripts/prepare-lab.sh --dry-run
./scripts/prepare-lab.sh
```
Per pulire invece tutto l'ambiente Docker locale:
```bash
./scripts/reset-env.sh --dry-run
./scripts/reset-env.sh
```
`prepare-lab.sh` e il comando consigliato per gli studenti.
`reset-env.sh` e piu distruttivo: ferma tutti i container e rimuove tutte le reti e i volumi Docker creati dall'utente.
## Safety First
Questo corso segue principi di sicurezza rigorosi:
1. **Minimo Privilegio**: dove previsto, il processo principale del servizio non deve girare come root
2. **Isolamento di Rete**: Le reti private non espongono porte sull'host
3. **Limiti di Risorse**: Ogni container ha limiti CPU e memoria configurati
4. **Persistenza**: I dati sopravvivono al riavvio dei container
## Roadmap
### Progresso Complessivo: 5 laboratori core completati
| Phase | Stato | Descrizione |
|-------|------|------------|
| Phase 1 | ✅ COMPLETATA | Setup & Git Foundation |
| Phase 2 | ✅ COMPLETATA | Lab 01 - IAM & Sicurezza |
| Phase 3 | ✅ COMPLETATA | Lab 02 - Network & VPC |
| Phase 4 | ✅ COMPLETATA | Lab 03 - Compute & EC2 |
| Phase 5 | ✅ COMPLETATA | Lab 04 - Storage & S3 |
| Phase 6 | ✅ COMPLETATA | Lab 05 - Database & RDS |
| Phase 7 | ✅ COMPLETATA | Integration & Testing |
| Phase 8-10 | ✅ COMPLETATE | Repository Structure, Troubleshooting, Final Validation |
**Tutti i 5 laboratori core sono completi e testati!**
## License
**PROPRIETARY LICENSE - Tutti i diritti riservati**
Copyright © 2024 Luca Sacchi Ricciardi
**Autore:** Luca Sacchi Ricciardi
**Email:** luca@lucasacchi.net
**Website:** https://www.lucasacchi.net
Questo progetto è concesso sotto licenza proprietaria per uso esclusivamente didattico e formativo PERSONALE.
**È vietato utilizzare questo materiale per erogare corsi di formazione o come materiale consegnato in relazione a corsi di formazione senza autorizzazione scritta dell'autore.**
Vedi file [LICENSE](LICENSE) per dettagli completi.
**Foro Competente:** Per qualsiasi controversia derivante da questo software, il foro competente esclusivo è il tribunale di Milano, Italia.
## Supporto
Questo repository e il materiale del corso sono mantenuti dall'autore.