Aggiorna la configurazione di deployment per utilizzare ClusterIP e aggiungi Ingress per la gestione SSL
All checks were successful
GKE Auto-Deploy / build-and-deploy (push) Successful in 36s

This commit is contained in:
2026-01-28 21:44:19 +01:00
parent ef5904f430
commit 32314842a4
8 changed files with 31 additions and 500 deletions

View File

@@ -48,8 +48,6 @@ jobs:
# --- PARTE NUOVA: TEMPLATING E APPLY ---
- name: Deploy to GKE
run: |
echo "Ecco i file presenti nella cartella:"
ls -R
gcloud container clusters get-credentials ${{ env.CLUSTER_NAME }} --zone ${{ env.CLUSTER_ZONE }}
# 1. Installiamo envsubst (se non c'è già nell'immagine, di solito c'è ma per sicurezza)

View File

@@ -1,238 +0,0 @@
# Troubleshooting 404 Error
Se ottieni un errore 404 visitando il sito, segui questi passaggi:
## 1. Esegui lo Script di Debug
Sul server, nella directory del progetto:
```bash
chmod +x debug-server.sh
./debug-server.sh
```
Questo script ti mostrerà:
- Stato del container
- Logs
- File presenti in nginx
- Configurazione rete
- Labels Traefik
## 2. Problemi Comuni e Soluzioni
### ❌ Container non in esecuzione
**Verifica:**
```bash
docker ps -a | grep vue-demo-app
```
**Soluzione:**
```bash
docker-compose up -d
```
### ❌ File mancanti in /usr/share/nginx/html/
**Verifica:**
```bash
docker exec vue-demo-app ls -la /usr/share/nginx/html/
```
**Dovrebbe mostrare:**
- index.html
- assets/ (directory)
**Soluzione se i file mancano:**
```bash
# Rebuild completo
docker-compose down
docker-compose build --no-cache
docker-compose up -d
```
### ❌ Rete web_proxy non esiste
**Verifica:**
```bash
docker network ls | grep web_proxy
```
**Soluzione:**
```bash
docker network create web_proxy
docker-compose restart
```
### ❌ Container non sulla rete corretta
**Verifica:**
```bash
docker inspect vue-demo-app --format='{{range $key, $value := .NetworkSettings.Networks}}{{$key}}{{"\n"}}{{end}}'
```
**Soluzione:**
```bash
docker network connect web_proxy vue-demo-app
docker-compose restart
```
### ❌ Variabile DOMAIN non configurata
**Verifica:**
```bash
cat .env
```
**Soluzione:**
```bash
echo "DOMAIN=tuo-dominio.com" > .env
docker-compose down
docker-compose up -d
```
### ❌ Traefik non trova il container
**Verifica labels:**
```bash
docker inspect vue-demo-app | grep -A 20 Labels
```
**Verifica logs Traefik:**
```bash
docker logs traefik | grep vue-demo
```
**Possibili problemi:**
1. Dominio nel .env non corrisponde al DNS
2. Traefik non è sulla stessa rete del container
3. Labels Traefik non corretti
**Soluzione:**
```bash
# Ricrea container con labels corretti
docker-compose down
docker-compose up -d
# Verifica che entrambi siano sulla rete web_proxy
docker network inspect web_proxy
```
### ❌ Nginx restituisce 404
**Test diretto:**
```bash
# Ottieni IP del container
CONTAINER_IP=$(docker inspect vue-demo-app --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}')
# Test diretto (dall'interno del server)
curl http://$CONTAINER_IP
```
**Se questo funziona ma il dominio no, il problema è Traefik.**
**Se anche questo restituisce 404, il problema è nginx/build.**
**Soluzione problemi nginx:**
```bash
# Verifica file
docker exec vue-demo-app cat /usr/share/nginx/html/index.html
# Verifica configurazione nginx
docker exec vue-demo-app nginx -t
# Rebuild se necessario
docker-compose build --no-cache
docker-compose up -d
```
## 3. Verifica Configurazione Traefik
Assicurati che Traefik sia configurato correttamente:
### Verifica entrypoints:
```bash
docker inspect traefik | grep -i entrypoint
```
Dovrebbe avere:
- `web` su porta 80
- `websecure` su porta 443
### Verifica cert resolver:
```bash
docker inspect traefik | grep -i letsencrypt
```
Dovrebbe avere il resolver `letsencrypt` configurato.
### Verifica rete:
```bash
docker network inspect web_proxy
```
Traefik e vue-demo-app devono essere entrambi su questa rete.
## 4. Test Manuale Completo
```bash
# 1. Verifica DNS
nslookup tuo-dominio.com
# 2. Verifica rete
docker network inspect web_proxy
# 3. Verifica container
docker ps | grep vue-demo
# 4. Test interno
docker exec vue-demo-app wget -O - http://localhost
# 5. Verifica logs
docker logs vue-demo-app
docker logs traefik | grep vue-demo
# 6. Test dal server
curl -H "Host: tuo-dominio.com" http://localhost
# 7. Test esterno
curl https://tuo-dominio.com
```
## 5. Rebuild Completo (Last Resort)
Se nulla funziona:
```bash
# Stop tutto
docker-compose down
# Rimuovi immagini vecchie
docker rmi vue-demo:latest
docker system prune -f
# Verifica .env
cat .env
# Rebuild completo
docker-compose build --no-cache
# Verifica rete
docker network ls | grep web_proxy || docker network create web_proxy
# Avvia
docker-compose up -d
# Controlla logs
docker-compose logs -f
```
## 6. Contatta Supporto
Se dopo tutti questi passaggi il problema persiste, raccogli le seguenti informazioni:
```bash
./debug-server.sh > debug-output.txt
docker-compose logs > docker-logs.txt
```
E invia i file di output per ulteriore analisi.

View File

@@ -20,14 +20,43 @@ spec:
ports:
- containerPort: 80
---
# NOTA: Il servizio ora è ClusterIP (interno), non più LoadBalancer.
# Non costa nulla e non ha IP pubblico diretto.
apiVersion: v1
kind: Service
metadata:
name: ${APP_NAME}-service
spec:
type: LoadBalancer
type: ClusterIP
selector:
app: ${APP_NAME}
ports:
- port: 80
targetPort: 80
targetPort: 80
---
# LA PARTE NUOVA: INGRESS
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ${APP_NAME}-ingress
annotations:
# Queste due righe attivano la magia SSL automatica
cert-manager.io/cluster-issuer: "letsencrypt-prod"
kubernetes.io/tls-acme: "true"
spec:
ingressClassName: nginx
tls:
- hosts:
- ${APP_NAME}.demo.bytebuilder.it
secretName: ${APP_NAME}-tls
rules:
- host: ${APP_NAME}.demo.bytebuilder.it
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: ${APP_NAME}-service
port:
number: 80

View File

@@ -1,66 +0,0 @@
# Script di Manutenzione
Script utili per la gestione e manutenzione del server.
## cleanup-docker.sh
Script per liberare spazio Docker rimuovendo:
- Container fermati
- Immagini non utilizzate
- Volumi orfani
- Network non utilizzati
### Utilizzo
```bash
# Rendi eseguibile
chmod +x cleanup-docker.sh
# Esegui manualmente
./cleanup-docker.sh
```
### Automazione con Cron
Per eseguire la pulizia automaticamente ogni settimana:
```bash
# Apri crontab
crontab -e
# Aggiungi questa riga per eseguire ogni domenica alle 3:00
0 3 * * 0 /opt/vue-demo/cleanup-docker.sh >> /var/log/docker-cleanup.log 2>&1
```
## Monitoraggio Spazio
### Verifica spazio disco
```bash
df -h
```
### Verifica spazio Docker
```bash
docker system df
docker system df -v # output dettagliato
```
### Analizza dimensioni immagini
```bash
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
```
### Trova container più grandi
```bash
docker ps -s
```
## Limiti Raccomandati
Con 8GB di spazio totale:
- Sistema operativo: ~2-3GB
- Docker + Traefik: ~500MB
- Applicazioni: ~2-3GB
- Spazio libero buffer: ~2GB minimo
**Alert**: Se lo spazio libero scende sotto 1GB, esegui subito la pulizia Docker.

View File

@@ -1,34 +0,0 @@
#!/bin/bash
# Script di manutenzione per liberare spazio Docker
# Esegui periodicamente per mantenere pulito il server
echo "=== Docker Space Cleanup ==="
echo ""
echo "Spazio prima della pulizia:"
docker system df
echo ""
echo "Rimuovo container fermati..."
docker container prune -f
echo ""
echo "Rimuovo immagini non utilizzate..."
docker image prune -a -f
echo ""
echo "Rimuovo volumi non utilizzati..."
docker volume prune -f
echo ""
echo "Rimuovo network non utilizzati..."
docker network prune -f
echo ""
echo "Spazio dopo la pulizia:"
docker system df
echo ""
echo "Spazio disco totale:"
df -h /

View File

@@ -1,24 +0,0 @@
#!/bin/bash
echo "=== QUICK DEBUG ==="
echo ""
echo "1. Logs del container:"
docker logs vue-demo-app --tail 50
echo ""
echo "2. Processi in esecuzione nel container:"
docker exec vue-demo-app ps aux
echo ""
echo "3. File presenti in nginx:"
docker exec vue-demo-app ls -la /usr/share/nginx/html/
echo ""
echo "4. Porta 80 in ascolto?"
docker exec vue-demo-app netstat -tlnp 2>/dev/null || docker exec vue-demo-app ss -tlnp 2>/dev/null || echo "netstat/ss non disponibile"
echo ""
echo "5. Test configurazione nginx:"
docker exec vue-demo-app nginx -t
echo ""

View File

@@ -1,68 +0,0 @@
# Esempio Configurazione Traefik
Questa directory contiene un esempio di configurazione Traefik per il server di produzione.
## Setup Iniziale
1. Crea la directory sul server:
```bash
mkdir -p /opt/traefik/letsencrypt
cd /opt/traefik
```
2. Copia il file docker-compose.yml in questa directory
3. Modifica l'email per Let's Encrypt:
```bash
nano docker-compose.yml
# Modifica: tua-email@example.com
```
4. Crea la rete Docker:
```bash
docker network create traefik-network
```
5. Avvia Traefik:
```bash
docker-compose up -d
```
6. Verifica che sia attivo:
```bash
docker ps
docker logs traefik
```
## Note di Sicurezza
- **Dashboard**: La configurazione include il dashboard Traefik con autenticazione basic
- Per generare una nuova password per il dashboard:
```bash
# Installa htpasswd se necessario: apt-get install apache2-utils
htpasswd -nb admin tuapassword
```
- In produzione, considera di rimuovere completamente il dashboard o limitarlo a IP specifici
## Configurazione Domini
Dopo aver avviato Traefik, i tuoi container con le labels corrette saranno automaticamente esposti con:
- Certificati SSL Let's Encrypt
- Redirect automatico HTTP → HTTPS
- Routing basato sul dominio
## Troubleshooting
### Certificati non vengono generati
- Verifica che la porta 80 sia accessibile pubblicamente
- Controlla i logs: `docker logs traefik`
- Verifica che il dominio punti all'IP del server
- Assicurati che il file `acme.json` abbia i permessi corretti:
```bash
chmod 600 letsencrypt/acme.json
```
### Container non raggiungibili
- Verifica che il container sia sulla rete `traefik-network`
- Controlla i logs di Traefik per errori
- Verifica le labels del container con: `docker inspect nome-container`

View File

@@ -1,66 +0,0 @@
# Esempio di configurazione Traefik
# Da usare come riferimento per configurare Traefik sul server di produzione
version: '3.8'
services:
traefik:
image: traefik:v2.10
container_name: traefik
restart: unless-stopped
security_opt:
- no-new-privileges:true
command:
# Dashboard
- "--api.dashboard=true"
# Provider Docker
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--providers.docker.network=traefik-network"
# Entrypoints
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
# Redirect HTTP to HTTPS
- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
- "--entrypoints.web.http.redirections.entryPoint.scheme=https"
# Let's Encrypt
- "--certificatesresolvers.letsencrypt.acme.email=tua-email@example.com"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
- "--certificatesresolvers.letsencrypt.acme.httpchallenge=true"
- "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
# Logs
- "--log.level=INFO"
- "--accesslog=true"
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./letsencrypt:/letsencrypt
networks:
- traefik-network
labels:
# Dashboard (opzionale, rimuovi in produzione se non necessario)
- "traefik.enable=true"
- "traefik.http.routers.dashboard.rule=Host(`traefik.tuodominio.com`)"
- "traefik.http.routers.dashboard.entrypoints=websecure"
- "traefik.http.routers.dashboard.tls=true"
- "traefik.http.routers.dashboard.tls.certresolver=letsencrypt"
- "traefik.http.routers.dashboard.service=api@internal"
# Autenticazione basic per dashboard
# Username: admin, Password: changeme (genera il tuo con: htpasswd -nb admin password)
- "traefik.http.routers.dashboard.middlewares=dashboard-auth"
- "traefik.http.middlewares.dashboard-auth.basicauth.users=admin:$$apr1$$8EVjn/nj$$GiLUZqcbueTFeD23SuB6x0"
networks:
traefik-network:
external: true