# MinIO Logo Display Fix ## Problem Club logos were not displaying when deployed to Kubernetes because the application was generating AWS S3 URLs instead of MinIO URLs: ``` https://hockey-apps.s3.amazonaws.com/assets/logos/HKFC_crest.png ``` ## Root Cause The Helm chart values had `storageProvider: "aws"` configured, which caused the `s3_config.py` module's `_get_public_url()` method to generate AWS S3 URLs instead of MinIO URLs. ## Solution Updated the Helm chart values files to use MinIO configuration: ### Changes Made 1. **`helm-chart/motm-app/values.yaml`** (default values): - Changed `storageProvider: "aws"` → `"minio"` - Set `endpoint: "http://minio.default.svc.cluster.local:9000"` - Set `bucket: "hockey-apps"` - Changed `useSignedUrls: true` → `false` - Changed `useSSL: true` → `false` 2. **`helm-chart/motm-app/values-production.yaml`**: - Changed `storageProvider: "aws"` → `"minio"` - Set `endpoint: "http://minio.default.svc.cluster.local:9000"` - Set `bucket: "hockey-apps"` - Changed `useSignedUrls: true` → `false` - Changed `useSSL: true` → `false` 3. **`helm-chart/motm-app/values-development.yaml`**: - Already correctly configured with MinIO ## Deployment Instructions ### Option 1: Upgrade Existing Deployment If you have an existing deployment, upgrade it with the new values: ```bash cd /home/jonny/Projects/gcp-hockey-results/motm_app/helm-chart/motm-app # For development helm upgrade motm-app . -f values-development.yaml --namespace default # For production helm upgrade motm-app . -f values-production.yaml --namespace default ``` ### Option 2: Redeploy from Scratch ```bash cd /home/jonny/Projects/gcp-hockey-results/motm_app/helm-chart/motm-app # Delete existing deployment helm uninstall motm-app --namespace default # Reinstall with correct configuration helm install motm-app . -f values-production.yaml --namespace default ``` ### Option 3: Override Values During Deployment If you don't want to modify the files, you can override during deployment: ```bash helm upgrade --install motm-app . \ --set s3.storageProvider=minio \ --set s3.endpoint="http://minio.default.svc.cluster.local:9000" \ --set s3.bucket=hockey-apps \ --set s3.useSignedUrls=false \ --set s3.useSSL=false \ --namespace default ``` ## Important Considerations ### 1. MinIO Service Name The endpoint `http://minio.default.svc.cluster.local:9000` assumes: - MinIO service is named `minio` - MinIO is deployed in the `default` namespace - MinIO is running on port `9000` If your MinIO service has a different name or is in a different namespace, update the endpoint accordingly: ``` http://..svc.cluster.local: ``` ### 2. External MinIO Access If you need to access MinIO from outside the cluster (e.g., for direct browser access or CDN), you can configure an external endpoint: ```yaml s3: storageProvider: "minio" endpoint: "https://minio.yourdomain.com" # External endpoint useSSL: true # Enable SSL for external access useSignedUrls: true # Optional: use signed URLs for security ``` ### 3. Bucket Configuration Ensure the MinIO bucket `hockey-apps` exists and has the correct permissions: ```bash # Using MinIO CLI (mc) mc alias set myminio http://minio.default.svc.cluster.local:9000 mc mb myminio/hockey-apps mc anonymous set download myminio/hockey-apps # Make bucket publicly readable ``` ### 4. Upload Logos to MinIO Ensure club logos are uploaded to the correct path in MinIO: ``` hockey-apps/assets/logos/HKFC_crest.png hockey-apps/assets/logos/ ``` ## Verification After deployment, verify the fix: 1. **Check Pod Environment Variables**: ```bash kubectl exec -it -- env | grep S3 ``` You should see: ``` S3_ENABLED=true S3_STORAGE_PROVIDER=minio S3_ENDPOINT=http://minio.default.svc.cluster.local:9000 S3_BUCKET=hockey-apps S3_USE_SIGNED_URLS=false S3_USE_SSL=false ``` 2. **Check Logo URLs**: - Visit the application in a browser - Inspect a club logo image - Verify the URL now points to MinIO, e.g.: ``` http://minio.default.svc.cluster.local:9000/hockey-apps/assets/logos/HKFC_crest.png ``` 3. **Test Logo Loading**: - Open the application - Navigate to pages displaying club logos - Confirm logos are now displaying correctly ## Rollback If you need to rollback to AWS S3: ```bash helm upgrade motm-app . \ --set s3.storageProvider=aws \ --set s3.endpoint="" \ --set s3.bucket=motm-assets \ --set s3.useSignedUrls=true \ --set s3.useSSL=true \ --namespace default ``` ## Related Files - `s3_config.py` - S3/MinIO configuration and URL generation - `helm-chart/motm-app/templates/deployment.yaml` - Environment variable injection - `helm-chart/motm-app/values.yaml` - Default configuration - `helm-chart/motm-app/values-production.yaml` - Production configuration - `helm-chart/motm-app/values-development.yaml` - Development configuration ## Technical Details The `s3_config.py` module's `_get_public_url()` method (lines 285-303) generates URLs based on the storage provider: - **AWS S3**: `https://{bucket}.s3.{region}.amazonaws.com/{key}` - **MinIO**: `{protocol}://{endpoint}/{bucket}/{key}` When `storageProvider: "minio"`, the code correctly generates MinIO URLs with the configured endpoint.