Skip to main content

Wordpress

image.png

WordPress es un sistema de gestión de contenido (CMS) de código abierto que permite crear y administrar sitios web de forma sencilla, sin necesidad de saber programar. Es la plataforma más utilizada en el mundo para construir sitios web, blogs, tiendas online y portales corporativos.


🧩 Caracteristicas

WordPress te permite:

  • ✍️ Publicar contenido fácilmente (entradas, páginas, medios)

  • 🎨 Personalizar el diseño con temas (themes)

  • 🔌 Ampliar funcionalidades con plugins (formularios, SEO, e-commerce, etc.)

  • 👥 Gestionar usuarios y roles

  • 🌍 Internacionalizar tu sitio (traducciones, multilenguaje)

  • 💻 Integrarse con otras herramientas como Google Analytics, redes sociales, etc.

Manifiesto

Wordpress + MariaDB en Namespace "wordpress" + PVCs en StorageClass "ceph-rbd" + Deployment/StatefulSet + Servicios + TLS Ingress

# Namespace
apiVersion: v1
kind: Namespace
metadata:
  name: wordpress
---
# Secret para MariaDB
apiVersion: v1
kind: Secret
metadata:
  name: mariadb-secret
  namespace: wordpress
type: Opaque
stringData:
  mariadb-root-password: rootpass123 # cambia tu password
  mariadb-user: wordpress
  mariadb-password: wordpresspass123 # cambia tu password
---
# PVC para WordPress
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wordpress-data
  namespace: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: ceph-rbd
  resources:
    requests:
      storage: 5Gi
---
# PVC para MariaDB
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mariadb-data
  namespace: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: ceph-rbd
  resources:
    requests:
      storage: 5Gi
---
# MariaDB StatefulSet
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mariadb
  namespace: wordpress
spec:
  selector:
    matchLabels:
      app: mariadb
  serviceName: mariadb
  replicas: 1
  template:
    metadata:
      labels:
        app: mariadb
    spec:
      containers:
        - name: mariadb
          image: mariadb:11
          env:
            - name: MARIADB_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mariadb-secret
                  key: mariadb-root-password
            - name: MARIADB_DATABASE
              value: wordpress
            - name: MARIADB_USER
              valueFrom:
                secretKeyRef:
                  name: mariadb-secret
                  key: mariadb-user
            - name: MARIADB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mariadb-secret
                  key: mariadb-password
          ports:
            - containerPort: 3306
          volumeMounts:
            - name: mariadb-storage
              mountPath: /var/lib/mysql
  volumeClaimTemplates:
    - metadata:
        name: mariadb-storage
      spec:
        accessModes: [ "ReadWriteOnce" ]
        storageClassName: ceph-rbd
        resources:
          requests:
            storage: 5Gi
---
# MariaDB Service
apiVersion: v1
kind: Service
metadata:
  name: mariadb
  namespace: wordpress
spec:
  clusterIP: None
  ports:
    - port: 3306
      targetPort: 3306
  selector:
    app: mariadb
---
# WordPress Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
  namespace: wordpress
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wordpress
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      containers:
        - name: wordpress
          image: wordpress:latest
          ports:
            - containerPort: 80
          env:
            - name: WORDPRESS_DB_HOST
              value: mariadb.wordpress.svc.cluster.local
            - name: WORDPRESS_DB_NAME
              value: wordpress
            - name: WORDPRESS_DB_USER
              valueFrom:
                secretKeyRef:
                  name: mariadb-secret
                  key: mariadb-user
            - name: WORDPRESS_DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mariadb-secret
                  key: mariadb-password
          volumeMounts:
            - name: wordpress-storage
              mountPath: /var/www/html
      volumes:
        - name: wordpress-storage
          persistentVolumeClaim:
            claimName: wordpress-data
---
# WordPress Service
apiVersion: v1
kind: Service
metadata:
  name: wordpress
  namespace: wordpress
spec:
  selector:
    app: wordpress
  ports:
    - port: 80
      targetPort: 80
  type: ClusterIP
---
# Ingress para WordPress con TLS
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: wordpress
  namespace: wordpress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    cert-manager.io/cluster-issuer: "letsencrypt-staging" # Cambia a letsencrypt-prod en producción
spec:
  tls:
    - hosts:
        - wordpress.k8s.dominio.com  # Ajusta tu dominio
      secretName: wordpress-tls
  rules:
    - host: wordpress.k8s.dominio.com # Ajusta tu dominio
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: wordpress
                port:
                  number: 80