commit c29150d0fb3cce586041c59c3790b26fa8455552 Author: capitano Date: Sat Feb 14 17:48:37 2026 +0100 first commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..d3848b7 --- /dev/null +++ b/README.md @@ -0,0 +1,171 @@ +# Minecraft Server - Biohazard Project Genesis + +Questo progetto contiene i manifest Kubernetes per distribuire un server Minecraft con il modpack **Biohazard Project Genesis** (Fallout-themed). + +## Files + +- `namespace.yaml` - Crea il namespace `minecraft` +- `pvc.yaml` - PersistentVolumeClaim per i dati del mondo (50GB) +- `init-configmap.yaml` - ConfigMap per gli script di inizializzazione +- `configmap.yaml` - Configurazione del server (server.properties) +- `statefulset.yaml` - Deployment del server Minecraft +- `service.yaml` - Servizio LoadBalancer per l'accesso esterno +- `Dockerfile` - Immagine personalizzata con modpack installato +- `server-start.sh` - Script di avvio del server +- `values.yaml` - File values per Helm (opzionale) +- `deploy.sh` - Script di deployment automatico + +## Prerequisiti + +- Kubernetes cluster con Longhorn storage (storageClassName: `longhorn-fast`) +- Docker per buildare l'immagine personalizzata +- kubectl configurato per accedere al cluster + +## Configurazione + +### Modpack Details +- **Modpack ID**: 1082278 +- **Nome**: Biohazard Project Genesis +- **Minecraft Version**: 1.20.1 +- **Modloader**: Forge +- **File ID**: da autenticare via API CurseForge + +### Resource Requirements +- **CPU**: 2 core (4 max) +- **Memory**: 8GB (4GB min, 8GB max) +- **Storage**: 50GB (longhorn-fast) +- **Players**: fino a 50 + +## Deployment + +### Metodo 1: Manualmente + +```bash +# Create namespace +kubectl apply -f namespace.yaml + +# Create PVC +kubectl apply -f pvc.yaml + +# Apply ConfigMaps +kubectl apply -f init-configmap.yaml +kubectl apply -f configmap.yaml + +# Build Docker image +docker build -t your-registry/minecraft-biohazard:latest . + +# Update image tag in statefulset.yaml + +# Deploy +kubectl apply -f statefulset.yaml +kubectl apply -f service.yaml +``` + +### Metodo 2: Con script + +```bash +chmod +x deploy.sh +./deploy.sh +``` + +## Monitoraggio + +```bash +# Check pod status +kubectl get pods -n minecraft +kubectl logs -n minecraft -f + +# Port-forward per accesso locale +kubectl port-forward -n minecraft svc/minecraft-service 25565:25565 + +# Check logs +kubectl logs -n minecraft statefulset/minecraft-server -f +``` + +## Accesso + +Dopo il deployment, ottenere l'IP del LoadBalancer: + +```bash +kubectl get svc -n minecraft minecraft-service -o jsonpath='{.status.loadBalancer.ingress[0].ip}' +``` + +Connessione in-game: `IP:25565` + +## Configurazione + +### Modificare server.properties + +Modificare il ConfigMap `minecraft-config`: + +```bash +kubectl edit configmap minecraft-config -n minecraft +``` + +Poi restartare il pod: + +```bash +kubectl rollout restart statefulset minecraft-server -n minecraft +``` + +### Aggiungere mods manualmente + +1. Copiare i mods in `/data/mods/` dentro il PVC +2. Restartare il server + +## Backup + +Il PVC `minecraft-data` contiene tutto il world data. Per backup: + +```bash +# Create snapshot +kubectl apply -f trivy-pvc.yaml # usa trivy-pvc.yaml come template + +# O montare il PVC in un pod di backup +``` + +## Troubleshooting + +### Pod in CrashLoopBackOff + +```bash +kubectl logs -n minecraft -f +kubectl describe pod -n minecraft +``` + +### Modpack non installato + +Controllare gli script in `/docker-entrypoint-initd/`: + +```bash +kubectl exec -n minecraft -- ls -la /docker-entrypoint-initd/ +``` + +### Modificare resource limits + +Modificare lo StatefulSet: + +```bash +kubectl edit statefulset minecraft-server -n minecraft +``` + +## Struttura del PVC + +Dopo il primo avvio, il PVC conterrà: + +``` +/data/ +├── server.jar +├── mods/ +├── configs/ +├── saves/ +├── logs/ +└── server.properties +``` + +## Note + +- Il server scarica il modpack da CurseForge durante il primo avvio +- È consigliato impostare `online-mode=false` per evitare problemi di autenticazione +- Per produzione, considerare l'uso di un registro Docker privato +- Il backup del PVC è fondamentale per preservare il world data