307 lines
8.0 KiB
Markdown
307 lines
8.0 KiB
Markdown
# Guida per Studenti - Corso Laboratori Cloud
|
|
|
|
Benvenuto nel Corso Laboratori Cloud. Questa guida ti spiega come usare al meglio il corso di simulazione pratica dei servizi cloud con Docker locale.
|
|
|
|
## Cosa e questo corso?
|
|
|
|
Questo corso ti insegna i concetti fondamentali del cloud computing (IAM, Networking, Compute, Storage, Database) attraverso laboratori pratici. Invece di usare account cloud costosi, usiamo Docker sul tuo computer per simulare i servizi AWS/Azure/GCP.
|
|
|
|
Ogni laboratorio ti guida passo-passo nella creazione di infrastrutture locali che si comportano come 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** (usa `docker compose`, non `docker-compose`)
|
|
- **Strumenti di rete**: netcat, curl, iproute2
|
|
|
|
### Installazione VM e Docker
|
|
|
|
1. **Installa una VM con Debian 13** (o versione recente)
|
|
2. **Installa Docker nella VM:**
|
|
|
|
```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 i cambiamenti
|
|
```
|
|
|
|
### Verifica dell'ambiente
|
|
|
|
1. Apri un terminale nella tua VM Debian
|
|
2. Clona la repository:
|
|
|
|
```bash
|
|
git clone https://gitea.lab.home.lucasacchi.net/lucasacchi/laboratori-cloud
|
|
cd laboratori-cloud
|
|
```
|
|
|
|
3. Verifica che tutto funzioni:
|
|
|
|
```bash
|
|
./scripts/check-env.sh
|
|
```
|
|
|
|
Se tutti i controlli passano, sei pronto.
|
|
|
|
## Come seguire il corso
|
|
|
|
### 1. Struttura del corso
|
|
|
|
Il corso ha **5 laboratori progressivi**:
|
|
|
|
- **Lab 01: IAM & Sicurezza** - Utenti, permessi, sicurezza container
|
|
- **Lab 02: Network & VPC** - Reti isolate, simulazione VPC/Subnets
|
|
- **Lab 03: Compute & EC2** - Limiti risorse, healthchecks, simulazione EC2
|
|
- **Lab 04: Storage & S3** - Volumi, MinIO come S3 locale
|
|
- **Lab 05: Database & RDS** - Database persistente, simulazione RDS
|
|
|
|
### 2. Come fare un laboratorio
|
|
|
|
Ogni laboratorio ha la stessa struttura:
|
|
|
|
```text
|
|
labs/lab-XX-nome/
|
|
|-- README.md # Punto di ingresso del lab
|
|
|-- tutorial/ # Guida passo-passo (leggi prima questo)
|
|
|-- how-to-guides/ # Procedure specifiche per task particolari
|
|
|-- reference/ # Documentazione tecnica completa
|
|
|-- explanation/ # Spiegazione dei paralleli cloud/locale
|
|
|-- docker-compose.yml # Configurazione infrastruttura
|
|
`-- tests/
|
|
`-- 99-final-verification.sh
|
|
```
|
|
|
|
**Ordine consigliato:**
|
|
|
|
1. Leggi `README.md` del lab
|
|
2. Segui l'`Ordine Consigliato` indicato nel README
|
|
3. Esegui i comandi nel tuo terminale
|
|
4. Quando arrivi alla fine, verifica con lo script finale
|
|
|
|
### 3. Workflow tipico per un laboratorio
|
|
|
|
1. **Vai nella cartella del lab:**
|
|
|
|
```bash
|
|
cd labs/lab-01-iam
|
|
```
|
|
|
|
2. **Leggi prima `README.md` del lab:**
|
|
- Ti dice in che ordine leggere i tutorial
|
|
- Ti dice quando avviare `docker compose`
|
|
- Ti dice se serve anche `--build`
|
|
|
|
3. **Leggi il tutorial** (inizia da `01-*.md`):
|
|
- Segui ogni passo attentamente
|
|
- Non saltare sezioni
|
|
- Pratica ogni comando nel tuo terminale
|
|
|
|
4. **Avvia i servizi solo quando README o tutorial te lo chiedono:**
|
|
- In molti lab basta `docker compose up -d`
|
|
- In alcuni casi puo essere richiesto `docker compose up -d --build`
|
|
- In `lab-01-iam` il compose serve soprattutto nella parte finale
|
|
|
|
5. **Prima di iniziare un nuovo lab, 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 aiuta a evitare conflitti di porte tra lab consecutivi.
|
|
|
|
6. **Verifica il completamento dalla root del lab:**
|
|
|
|
```bash
|
|
bash tests/99-final-verification.sh
|
|
```
|
|
|
|
7. **Se tutto e OK**, passa al laboratorio successivo
|
|
|
|
## Come verificare che stai facendo bene
|
|
|
|
### Script di verifica finale
|
|
|
|
Ogni laboratorio ha uno script `99-final-verification.sh` che controlla:
|
|
|
|
- Configurazioni corrette
|
|
- Requisiti di sicurezza del lab
|
|
- Funzionalita dei servizi
|
|
- Compliance con i requisiti tecnici
|
|
|
|
**Esegui sempre questo script alla fine di ogni laboratorio, dalla cartella del lab.**
|
|
|
|
### Cosa fare se la verifica fallisce
|
|
|
|
1. Leggi il messaggio di errore
|
|
2. Controlla l'output per capire cosa non va
|
|
3. Riguarda il tutorial per il passo problematico
|
|
4. Riprova la configurazione
|
|
5. Se hai ancora problemi, consulta:
|
|
- **How-to guides** per procedure specifiche
|
|
- **Troubleshooting** nel tutorial
|
|
- **Reference** per sintassi tecnica
|
|
|
|
## Sicurezza e best practices
|
|
|
|
Questo corso segue principi di sicurezza rigorosi:
|
|
|
|
- **Processi di servizio non privilegiati**: dove previsto, il processo principale del servizio non deve girare come root
|
|
- **Isolamento rete**: reti private non esposte sull'host
|
|
- **Limiti risorse**: ogni container ha limiti CPU/memoria
|
|
- **Persistenza**: i dati sopravvivono ai riavvii
|
|
|
|
Nota pratica: una shell aperta con `docker exec` puo mostrarti un utente diverso dal processo principale del servizio. Se il tutorial ti fa controllare l'utente effettivo del servizio, segui sempre il metodo documentato nel lab.
|
|
|
|
**Rispetta sempre questi principi nei tuoi progetti reali.**
|
|
|
|
## Pulizia tra laboratori
|
|
|
|
Per evitare conflitti tra laboratori:
|
|
|
|
```bash
|
|
# Dalla root del progetto
|
|
./scripts/prepare-lab.sh --dry-run
|
|
./scripts/prepare-lab.sh
|
|
```
|
|
|
|
Questo e il comando consigliato tra un lab e l'altro. Agisce solo sulle risorse create dal corso.
|
|
|
|
Se invece vuoi una pulizia totale del tuo ambiente Docker locale:
|
|
|
|
```bash
|
|
./scripts/reset-env.sh --dry-run
|
|
./scripts/reset-env.sh
|
|
```
|
|
|
|
Attenzione: `reset-env.sh` agisce su **tutto l'ambiente Docker locale**, non solo sui container del corso.
|
|
|
|
## Strumenti utili
|
|
|
|
### Comandi Docker essenziali
|
|
|
|
```bash
|
|
# Lista container attivi
|
|
docker ps
|
|
|
|
# Lista tutti i container (anche fermi)
|
|
docker ps -a
|
|
|
|
# Vedi logs di un container
|
|
docker logs <nome-container>
|
|
|
|
# Entra in un container (debug)
|
|
docker exec -it <nome-container> sh
|
|
|
|
# Lista reti
|
|
docker network ls
|
|
|
|
# Lista volumi
|
|
docker volume ls
|
|
|
|
# Statistiche risorse
|
|
docker stats
|
|
```
|
|
|
|
### Comandi Docker Compose
|
|
|
|
```bash
|
|
# Avvia tutti i servizi
|
|
docker compose up -d
|
|
|
|
# Ferma tutti i servizi
|
|
docker compose down
|
|
|
|
# Vedi stato servizi
|
|
docker compose ps
|
|
|
|
# Logs di tutti i servizi
|
|
docker compose logs
|
|
|
|
# Ricostruisci e riavvia (solo se il README del lab lo richiede)
|
|
docker compose up -d --build
|
|
```
|
|
|
|
## Risoluzione problemi comuni
|
|
|
|
### "Permission denied" su Docker
|
|
|
|
```bash
|
|
# Aggiungi utente al gruppo docker
|
|
sudo usermod -aG docker $USER
|
|
# Fai logout e login, oppure:
|
|
newgrp docker
|
|
```
|
|
|
|
### "Command not found: docker compose"
|
|
|
|
Hai la versione vecchia. Installa Docker Compose V2:
|
|
- Su Linux: Docker Engine >= 24.0 include Compose V2
|
|
- Su macOS/Windows: Docker Desktop >= 4.0
|
|
|
|
### Container non si avvia
|
|
|
|
```bash
|
|
# Controlla logs
|
|
docker compose logs
|
|
|
|
# Controlla risorse
|
|
docker stats
|
|
|
|
# Verifica porte in uso
|
|
docker ps
|
|
```
|
|
|
|
### "No space left on device"
|
|
|
|
Docker occupa troppo spazio. Pulisci:
|
|
|
|
```bash
|
|
# Rimuovi container fermi
|
|
docker container prune
|
|
|
|
# Rimuovi immagini non usate
|
|
docker image prune
|
|
|
|
# Rimuovi volumi orfani
|
|
docker volume prune
|
|
|
|
# Pulizia mirata dei laboratori cloud
|
|
./scripts/prepare-lab.sh --dry-run
|
|
./scripts/prepare-lab.sh
|
|
|
|
# Reset completo ambiente (attenzione: rimuove tutti i volumi Docker)
|
|
./scripts/reset-env.sh --dry-run
|
|
./scripts/reset-env.sh
|
|
```
|
|
|
|
## Come imparare al meglio
|
|
|
|
1. **Non copiare-incollare**: scrivi ogni comando a mano
|
|
2. **Comprendi prima di eseguire**: leggi perche fai ogni passo
|
|
3. **Sperimenta**: modifica parametri e vedi cosa succede
|
|
4. **Documenta**: prendi appunti sui comandi importanti
|
|
5. **Collega al cloud**: pensa sempre "questo in AWS sarebbe..."
|
|
|
|
## Supporto
|
|
|
|
- **Documentazione**: ogni lab ha guide complete
|
|
- **Script di verifica**: ti dicono esattamente cosa e sbagliato
|
|
- **Troubleshooting**: sezioni dedicate in ogni tutorial
|
|
- **Reference**: sintassi completa e parametri
|
|
|
|
## Prossimi passi dopo il corso
|
|
|
|
Una volta completati tutti i 5 laboratori:
|
|
|
|
- Avrai una comprensione pratica del cloud computing
|
|
- Saprai configurare infrastrutture sicure e scalabili
|
|
- Potrai applicare questi concetti nei tuoi progetti reali
|
|
- Sarai pronto per certificazioni cloud (AWS, Azure, GCP)
|
|
|
|
**Buon apprendimento!**
|