# Mycelium Cloud - WordPress Example A complete, production-ready example for deploying a WordPress CMS with MariaDB database on Mycelium Cloud Kubernetes cluster. Features multi-container pod architecture, persistent storage, and comprehensive WordPress management patterns. ## ๐Ÿ“ What This Contains This directory contains everything you need to deploy a WordPress CMS system: - **wordpress.md** - This comprehensive guide - **wordpress-deployment.yaml** - Multi-container pod deployment (WordPress + MariaDB) - **wordpress-service.yaml** - LoadBalancer service configuration ## ๐Ÿš€ Quick Start (3 minutes) ```bash # 1. Deploy WordPress stack (Deployment, Service) kubectl apply -f wordpress-deployment.yaml kubectl apply -f wordpress-service.yaml # 2. Wait for pods to be ready (should show 2/2 Running) kubectl get pods -l app=wordpress # 3. Access WordPress kubectl port-forward service/wordpress-service 8080:80 & # 4. Visit WordPress setup echo "๐ŸŒ Visit: http://localhost:8080" ``` **Expected Result:** WordPress installation page will appear, ready for initial setup and configuration. ## ๐Ÿ“‹ What You'll Learn - โœ… Advanced Kubernetes patterns (multi-container pods) - โœ… WordPress deployment and configuration - โœ… MariaDB database deployment - โœ… LoadBalancer services on Mycelium Cloud - โœ… Container orchestration and health checks - โœ… WordPress initialization and setup - โœ… Database connectivity within pods - โœ… Production WordPress management ## ๐Ÿ—๏ธ Architecture This example uses a **multi-container pod pattern** following the successful Mycelium Cloud patterns: **Network Flow:** ``` kubectl port-forward โ†’ LoadBalancer Service โ†’ Pod (wordpress + mariadb) ``` **Multi-Container Architecture:** - **wordpress**: WordPress with PHP 8.3 and Apache (port 80) - **mariadb**: MariaDB 10.11 database server (port 3306) - **Local communication**: Both containers in same pod using 127.0.0.1 ## ๐Ÿ”ง Files Explanation ### wordpress-deployment.yaml ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: wordpress spec: replicas: 1 template: spec: # Follow successful Mycelium Cloud patterns affinity: nodeAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 preference: matchExpressions: - key: node-role.kubernetes.io/control-plane operator: DoesNotExist containers: # MariaDB container - name: mariadb image: mariadb:10.11 # Database setup and health checks # WordPress container - name: wordpress image: wordpress:latest # Web server with database connectivity ``` **What it does:** - Creates multi-container pod with WordPress + MariaDB - Worker node preference following successful patterns - Proper health checks and resource limits - Intra-pod database communication using 127.0.0.1 ### wordpress-service.yaml ```yaml apiVersion: v1 kind: Service metadata: name: wordpress-service spec: type: LoadBalancer ipFamilies: - IPv4 - IPv6 ipFamilyPolicy: RequireDualStack selector: app: wordpress ports: - name: wordpress port: 80 targetPort: 80 ``` **What it does:** - Creates LoadBalancer service for Mycelium Cloud - Dual-stack (IPv4 + IPv6) support - Routes traffic to multi-container pod ## ๐ŸŒ Access Methods ### Method 1: Port-Forward (Recommended) ```bash # Simple port-forward kubectl port-forward service/wordpress-service 8080:80 # Access WordPress setup curl http://localhost:8080 ``` ### Method 2: Direct Pod Access (Inside Cluster) **WordPress CLI Access:** ```bash kubectl exec -it $(kubectl get pod -l app=wordpress -o jsonpath='{.items[0].metadata.name}') -c wordpress -- /bin/bash ``` **Database Access:** ```bash # Access MariaDB kubectl exec -it $(kubectl get pod -l app=wordpress -o jsonpath='{.items[0].metadata.name}') -c mariadb -- mysql -u wordpress -p"wp123" wordpress ``` ## ๐Ÿ“Š WordPress Management ### Initial Setup 1. **Visit WordPress Setup**: http://localhost:8080 2. **Choose Language**: Select your preferred language 3. **Site Configuration**: - Site Title: "Mycelium Cloud WordPress" - Username: "admin" (or your choice) - Password: Generate secure password - Email: Your email address 4. **Complete Setup**: WordPress will create database tables and configure ### Database Operations ```bash # Access WordPress database kubectl exec -it $(kubectl get pod -l app=wordpress -o jsonpath='{.items[0].metadata.name}') -c mariadb -- \ mysql -u wordpress -p"wp123" wordpress -e "SHOW TABLES;" # Check WordPress users kubectl exec -it $(kubectl get pod -l app=wordpress -o jsonpath='{.items[0].metadata.name}') -c mariadb -- \ mysql -u wordpress -p"wp123" wordpress -e "SELECT * FROM wp_users;" ``` ## ๐Ÿ” Troubleshooting ### Check Deployment Status ```bash # Check pods status (should show 2/2 Ready) kubectl get pods -l app=wordpress # Check service details kubectl get svc wordpress-service # Check container logs kubectl logs -l app=wordpress kubectl logs -l app=wordpress -c wordpress kubectl logs -l app=wordpress -c mariadb ``` ### Common Issues #### Pod Not Starting ```bash # Check pod status and events kubectl describe pod -l app=wordpress # Check container logs kubectl logs -l app=wordpress -c wordpress --previous kubectl logs -l app=wordpress -c mariadb --previous ``` #### Database Connection Issues ```bash # Test database connectivity from WordPress container kubectl exec -it $(kubectl get pod -l app=wordpress -o jsonpath='{.items[0].metadata.name}') -c mariadb -- \ mysql -u wordpress -p"wp123" -e "SELECT 'Connection successful';" ``` #### WordPress Setup Issues ```bash # Check WordPress configuration kubectl exec -it $(kubectl get pod -l app=wordpress -o jsonpath='{.items[0].metadata.name}') -c wordpress -- \ cat /var/www/html/wp-config.php ``` ## ๐Ÿ› ๏ธ Common Operations ### Updates ```bash # Update WordPress image kubectl set image deployment/wordpress wordpress=wordpress:6.5-php8.2-apache # Restart deployment kubectl rollout restart deployment/wordpress # Check rollout status kubectl rollout status deployment/wordpress ``` ### Monitoring ```bash # View logs from both containers kubectl logs -f deployment/wordpress -c wordpress kubectl logs -f deployment/wordpress -c mariadb # Monitor resource usage kubectl top pod -l app=wordpress # Check database status kubectl exec -it $(kubectl get pod -l app=wordpress -o jsonpath='{.items[0].metadata.name}') -c mariadb -- \ mysqladmin -u wordpress -p"wp123" status ``` ## ๐Ÿงน Cleanup When you're done testing: ```bash # Delete the application and service kubectl delete -f wordpress-deployment.yaml -f wordpress-service.yaml # Wait for cleanup kubectl wait --for=delete pod -l app=wordpress --timeout=60s # Kill any port-forwards lsof -ti:8080 | xargs kill -9 2>/dev/null || true # Verify cleanup kubectl get all -l app=wordpress ``` ## ๐ŸŽฏ What This Demonstrates This example shows: - **Advanced Kubernetes patterns** - multi-container pods, health monitoring - **Production WordPress deployment** - proper configuration, database integration - **Database integration** - MariaDB setup, intra-pod communication - **Mycelium Cloud networking** - LoadBalancer services, port-forwarding - **Container orchestration** - resource management, health checks - **Development workflows** - testing, debugging, WordPress setup ## ๐Ÿ”— Next Steps Once you understand this example, try: 1. **WordPress Scaling** - Multiple WordPress instances with shared database 2. **WordPress Clustering** - Load balancing and session management 3. **WordPress Multisite** - Multiple WordPress sites on one deployment 4. **Plugin Management** - Automated plugin/theme deployment 5. **Backup Strategies** - Database and file backups 6. **Security Hardening** - SSL/TLS, security headers, access controls 7. **Performance Optimization** - Caching, CDN integration 8. **Monitoring** - WordPress performance and database monitoring ## ๐Ÿ“š More Examples Other available examples: - **hello-world/** - Basic web application deployment - **nginx-static/** - Static website hosting - **python-flask/** - Python API server - **redis-cache/** - Data caching services - **nginx-nodeport/** - NodePort scaling with workers - **nginx-load-balancer/** - LoadBalancer with replicas ## ๐Ÿ’ก Pro Tips 1. **Multi-Container Access**: Use `-c container-name` to access specific containers 2. **Database Testing**: Always test database connectivity when troubleshooting 3. **WordPress CLI**: Great for automated WordPress management 4. **Database Backup**: Always backup before major changes 5. **Resource Monitoring**: Watch memory usage, especially during WordPress operations 6. **Health Checks**: Monitor the 2/2 ready status for both containers 7. **Port Conflicts**: Use different ports (8080, 8090, etc.) if conflicts occur 8. **WordPress Themes**: Test with different themes to understand WordPress capabilities ## ๐ŸŽ‰ Success Indicators You'll know everything is working when: - โœ… `kubectl get pods` shows "2/2 Running" for wordpress pod - โœ… `kubectl get svc` shows wordpress-service with LoadBalancer type - โœ… `curl http://localhost:8080` returns WordPress installation page (HTTP 200) - โœ… No errors in `kubectl get events` - โœ… WordPress setup wizard can be accessed and completed - โœ… Database connection works from both containers **Congratulations! You've successfully deployed a production-ready WordPress CMS system on Mycelium Cloud! ๐Ÿš€** --- ## ๐Ÿ†˜ Support If you encounter issues: 1. Check the troubleshooting section above 2. Verify your kubeconfig is set correctly: `kubectl get nodes` 3. Ensure your cluster is healthy: `kubectl get pods --all-namespaces` 4. Check WordPress logs: `kubectl logs -l app=wordpress -c wordpress` 5. Check MariaDB logs: `kubectl logs -l app=wordpress -c mariadb` 6. Test WordPress functionality via browser at http://localhost:8080 For more help, visit our [documentation](../../README.md) or contact support.