-Aggiunta configurazione tramite dockerfile per windows e linux
-Aggiunte github actions per la compilazione dei container e l'esposizione
This commit is contained in:
@@ -0,0 +1,304 @@
|
||||
# 🔓 Configurazione Container Pubblico - Guida Step-by-Step
|
||||
|
||||
## Obiettivo
|
||||
Rendere il container Docker pull-able **senza credenziali** da chiunque.
|
||||
|
||||
## ⚠️ Considerazioni Importanti
|
||||
|
||||
### Pro e Contro
|
||||
|
||||
#### ✅ Vantaggi Container Pubblico
|
||||
- Nessuna autenticazione richiesta per pull
|
||||
- Facile distribuzione per utenti finali
|
||||
- Ideale per progetti open source
|
||||
- Riduce friction nell'adozione
|
||||
- Nessun token management per utenti
|
||||
|
||||
#### ⚠️ Svantaggi Container Pubblico
|
||||
- Il codice compilato è accessibile pubblicamente
|
||||
- Chiunque può scaricare e analizzare l'immagine
|
||||
- Nessun controllo su chi usa il container
|
||||
- Potenziale esposizione di configurazioni hardcoded
|
||||
|
||||
## 🔒 Alternative al Container Pubblico
|
||||
|
||||
Se la privacy è importante, considera invece:
|
||||
|
||||
### Opzione 1: Container Privato + GitHub Team Access
|
||||
```yaml
|
||||
Configurazione:
|
||||
1. Container rimane privato
|
||||
2. Aggiungi membri team con permessi read
|
||||
3. Team members usano loro GitHub PAT per pull
|
||||
|
||||
Vantaggi:
|
||||
- Controllo accessi granulare
|
||||
- Audit trail degli accessi
|
||||
- Solo team autorizzato può scaricare
|
||||
```
|
||||
|
||||
### Opzione 2: Container Privato + Deploy Keys
|
||||
```yaml
|
||||
Configurazione:
|
||||
1. Container rimane privato
|
||||
2. Crea bot account per CI/CD
|
||||
3. Bot account ha read-only access al package
|
||||
4. Deploy keys distribuite solo a server autorizzati
|
||||
|
||||
Vantaggi:
|
||||
- Nessun accesso umano diretto
|
||||
- Token rotativi per sicurezza
|
||||
- Adatto per production deployments
|
||||
```
|
||||
|
||||
### Opzione 3: Azure Container Registry / AWS ECR (Privati)
|
||||
```yaml
|
||||
Configurazione:
|
||||
1. Push su registry privato Azure/AWS
|
||||
2. Usa managed identities per pull
|
||||
3. Nessuna credenziale hardcoded
|
||||
|
||||
Vantaggi:
|
||||
- Integrazione nativa cloud
|
||||
- Nessun costo GitHub Package storage
|
||||
- Policy avanzate di retention
|
||||
```
|
||||
|
||||
## 📋 Se Decidi per Container Pubblico
|
||||
|
||||
### Step 1: Verifica Prima Build Completata
|
||||
|
||||
```bash
|
||||
# 1. Fai push del codice su GitHub
|
||||
git add .
|
||||
git commit -m "Add Docker support and CI/CD"
|
||||
git push origin main
|
||||
|
||||
# 2. Vai su GitHub Actions
|
||||
# https://github.com/[USERNAME]/Data-Coupler/actions
|
||||
|
||||
# 3. Attendi completamento workflow "Build and Push Docker Images"
|
||||
# Deve mostrare ✅ verde su tutti i job
|
||||
```
|
||||
|
||||
### Step 2: Trova il Package
|
||||
|
||||
```
|
||||
1. Vai al tuo repository GitHub
|
||||
URL: https://github.com/[USERNAME]/Data-Coupler
|
||||
|
||||
2. Click sulla tab "Packages" (lato destro)
|
||||
Oppure: https://github.com/[USERNAME]?tab=packages
|
||||
|
||||
3. Dovresti vedere il package "data-coupler"
|
||||
Se non lo vedi, verifica che la build sia completata con successo
|
||||
```
|
||||
|
||||
### Step 3: Cambia Visibilità a Pubblico
|
||||
|
||||
```
|
||||
1. Click sul package "data-coupler"
|
||||
|
||||
2. Click su "Package settings" (icona ingranaggio in alto a destra)
|
||||
|
||||
3. Scroll fino alla sezione "Danger Zone" (in fondo alla pagina)
|
||||
|
||||
4. Trova "Change package visibility"
|
||||
|
||||
5. Click sul pulsante "Change visibility"
|
||||
|
||||
6. Nella dialog che appare:
|
||||
- Seleziona "Public"
|
||||
- Leggi il warning
|
||||
- Digita il nome completo del repository: [USERNAME]/Data-Coupler
|
||||
- Click "I understand the consequences, change package visibility"
|
||||
|
||||
7. Conferma con la tua password se richiesto
|
||||
```
|
||||
|
||||
### Step 4: Verifica Configurazione Pubblica
|
||||
|
||||
```
|
||||
1. Logout da GitHub (o usa finestra incognito)
|
||||
|
||||
2. Vai a: https://github.com/[USERNAME]/Data-Coupler/pkgs/container/data-coupler
|
||||
|
||||
3. Dovresti vedere:
|
||||
- Badge "Public" vicino al nome
|
||||
- Pull command senza autenticazione:
|
||||
docker pull ghcr.io/[username]/data-coupler:latest
|
||||
|
||||
4. La sezione "Installation" mostra come fare pull senza credenziali
|
||||
```
|
||||
|
||||
### Step 5: Test Pull Senza Autenticazione
|
||||
|
||||
```bash
|
||||
# 1. Logout da GitHub Container Registry (se sei loggato)
|
||||
docker logout ghcr.io
|
||||
|
||||
# 2. Pull senza credenziali
|
||||
docker pull ghcr.io/[username]/data-coupler:latest
|
||||
|
||||
# Se funziona, vedrai:
|
||||
# latest: Pulling from [username]/data-coupler
|
||||
# [hash]: Pull complete
|
||||
# ...
|
||||
# Status: Downloaded newer image for ghcr.io/[username]/data-coupler:latest
|
||||
|
||||
# 3. Test run
|
||||
docker run -d -p 7550:7550 --name data-coupler-test \
|
||||
ghcr.io/[username]/data-coupler:latest
|
||||
|
||||
# 4. Verifica funzionamento
|
||||
sleep 10
|
||||
curl http://localhost:7550/health
|
||||
# Output: {"status":"healthy","timestamp":"..."}
|
||||
|
||||
# 5. Cleanup
|
||||
docker stop data-coupler-test
|
||||
docker rm data-coupler-test
|
||||
```
|
||||
|
||||
## 🔧 Configurazione GitHub Actions per Pubblico
|
||||
|
||||
Le GitHub Actions sono già configurate correttamente per container pubblici. Non servono modifiche.
|
||||
|
||||
**Configurazione Attuale** (`.github/workflows/docker-build.yml`):
|
||||
```yaml
|
||||
- name: Log in to GitHub Container Registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }} # ✅ Usa token automatico
|
||||
```
|
||||
|
||||
Il `GITHUB_TOKEN` ha già i permessi necessari se:
|
||||
1. ✅ Workflow permissions = "Read and write"
|
||||
2. ✅ Package è pubblico
|
||||
|
||||
## 📝 Aggiorna Documentazione
|
||||
|
||||
Dopo aver reso pubblico il container, aggiorna i riferimenti:
|
||||
|
||||
### File da Aggiornare
|
||||
|
||||
1. **README.md**
|
||||
```markdown
|
||||
## Quick Start
|
||||
|
||||
\`\`\`bash
|
||||
# Pull e run (nessuna autenticazione richiesta)
|
||||
docker run -d -p 7550:7550 ghcr.io/[username]/data-coupler:latest
|
||||
\`\`\`
|
||||
```
|
||||
|
||||
2. **DOCKER_DEPLOYMENT.md**
|
||||
Assicurati che la sezione "Pull senza autenticazione" sia prominente.
|
||||
|
||||
3. **GITHUB_ACTIONS_SETUP.md**
|
||||
Aggiungi nota che il container è configurato come pubblico.
|
||||
|
||||
## 🔄 Come Tornare Privato
|
||||
|
||||
Se cambi idea:
|
||||
|
||||
```
|
||||
1. Package settings → Danger Zone → Change visibility
|
||||
2. Seleziona "Private"
|
||||
3. Conferma
|
||||
|
||||
Da quel momento in poi, il pull richiederà autenticazione:
|
||||
docker login ghcr.io -u USERNAME
|
||||
Password: [GitHub PAT]
|
||||
```
|
||||
|
||||
## 📊 Monitoraggio Container Pubblico
|
||||
|
||||
### Statistiche Disponibili
|
||||
|
||||
Nel package settings puoi vedere:
|
||||
- **📈 Download count**: Quante volte è stato scaricato
|
||||
- **📦 Storage used**: Spazio occupato su GitHub
|
||||
- **🏷️ Tags**: Tutte le versioni disponibili
|
||||
- **📅 Activity**: Storia degli aggiornamenti
|
||||
|
||||
### Costi
|
||||
|
||||
**GitHub Container Registry:**
|
||||
- ✅ Container pubblici: Storage **GRATUITO** illimitato
|
||||
- ✅ Pull pubblici: Bandwidth **GRATUITO** illimitato
|
||||
- ⚠️ Container privati: 500MB storage gratuito, poi $0.008/GB/mese
|
||||
|
||||
## 🚨 Security Best Practices (Anche per Container Pubblici)
|
||||
|
||||
### 1. Non Hardcodare Secrets
|
||||
```dockerfile
|
||||
❌ MAI:
|
||||
ENV API_KEY="hardcoded-secret-key"
|
||||
ENV PASSWORD="admin123"
|
||||
|
||||
✅ SEMPRE:
|
||||
ENV API_KEY="" # Impostato a runtime con -e
|
||||
```
|
||||
|
||||
### 2. Multi-Stage Build (Già Implementato)
|
||||
```dockerfile
|
||||
✅ Il Dockerfile usa multi-stage:
|
||||
FROM sdk AS build # Immagine grande con compilatori
|
||||
FROM aspnet AS final # Solo runtime, immagine piccola
|
||||
# Risultato: codice sorgente NON incluso nell'immagine finale
|
||||
```
|
||||
|
||||
### 3. Scan delle Vulnerabilità
|
||||
```bash
|
||||
# Usa Trivy per scan sicurezza
|
||||
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
|
||||
aquasec/trivy image ghcr.io/[username]/data-coupler:latest
|
||||
|
||||
# Oppure integra in GitHub Actions (future enhancement)
|
||||
```
|
||||
|
||||
### 4. Firma delle Immagini
|
||||
```yaml
|
||||
# GitHub Actions già genera attestazioni (configurato)
|
||||
- name: Generate artifact attestation
|
||||
uses: actions/attest-build-provenance@v1
|
||||
# Crea firma crittografica verificabile
|
||||
```
|
||||
|
||||
## ✅ Checklist Finale
|
||||
|
||||
Prima di rendere pubblico, verifica:
|
||||
|
||||
- [ ] Build GitHub Actions completata con successo
|
||||
- [ ] Nessun secret hardcodato nei Dockerfile
|
||||
- [ ] Database path configurato correttamente per volumes
|
||||
- [ ] Health endpoint funziona
|
||||
- [ ] Test pull e run eseguiti con successo
|
||||
- [ ] Documentazione aggiornata con nuovo registry URL
|
||||
- [ ] Team informato del cambio di visibilità
|
||||
|
||||
## 📞 Rollback Plan
|
||||
|
||||
Se qualcosa va storto:
|
||||
|
||||
```bash
|
||||
# 1. Torna privato immediatamente
|
||||
# Package settings → Private
|
||||
|
||||
# 2. Se serve, elimina tag specifico
|
||||
docker rmi ghcr.io/[username]/data-coupler:problematic-tag
|
||||
|
||||
# 3. Re-build e re-push
|
||||
git revert [commit-hash]
|
||||
git push origin main
|
||||
# GitHub Actions ri-builda automaticamente
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Data Creazione**: 16 Gennaio 2026
|
||||
**Versione Guida**: 1.0
|
||||
**Raccomandazione**: ✅ Pubblico per Open Source | ⚠️ Privato per Enterprise
|
||||
Reference in New Issue
Block a user