Skip to main content

Drupal

image.png

Drupal es un sistema de gestión de contenidos (CMS) libre y de código abierto, escrito en PHP, que permite crear y administrar sitios web de forma flexible, potente y segura.


🧩 Características

Característica Descripción
🧱 Modular Está basado en módulos que puedes habilitar o deshabilitar según tus necesidades.
🎨 Flexible Puedes crear desde blogs simples hasta portales corporativos complejos o intranets.
🔐 Seguro Drupal tiene una comunidad activa y un equipo de seguridad que publica parches regularmente.
🌐 Multilingüe Soporta múltiples idiomas de forma nativa.
🧑‍💻 Para desarrolladores Muy personalizable mediante módulos, plantillas y código personalizado.

🧰 Usos

  • Sitios web corporativos

  • Intranets o extranets

  • Sitios educativos o gubernamentales

  • Portales de noticias o medios

  • Tiendas en línea (con módulos adicionales como Drupal Commerce)

Manifiesto

  • Un Deployment de Drupal

  • Un Deployment de MariaDB

  • PVCs para persistencia

  • Ingress NGINX con TLS

  • ceph-rbd como StorageClass

# Namespace
apiVersion: v1
kind: Namespace
metadata:
  name: drupal
---
# Secret para la base de datos
apiVersion: v1
kind: Secret
metadata:
  name: drupal-db-secret
  namespace: drupal
type: Opaque
stringData:
  MYSQL_ROOT_PASSWORD: rootpass
  MYSQL_DATABASE: drupal
  MYSQL_USER: drupal
  MYSQL_PASSWORD: drupalpass
---
# PVC para Drupal
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: drupal-pvc
  namespace: drupal
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: ceph-rbd
  resources:
    requests:
      storage: 5Gi
---
# PVC para MariaDB
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mariadb-pvc
  namespace: drupal
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: ceph-rbd
  resources:
    requests:
      storage: 5Gi
---
# Deployment de MariaDB
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mariadb
  namespace: drupal
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mariadb
  template:
    metadata:
      labels:
        app: mariadb
    spec:
      containers:
        - name: mariadb
          image: mariadb:10.6
          envFrom:
            - secretRef:
                name: drupal-db-secret
          ports:
            - containerPort: 3306
          volumeMounts:
            - name: mariadb-storage
              mountPath: /var/lib/mysql
      volumes:
        - name: mariadb-storage
          persistentVolumeClaim:
            claimName: mariadb-pvc
---
# Service para MariaDB
apiVersion: v1
kind: Service
metadata:
  name: mariadb
  namespace: drupal
spec:
  selector:
    app: mariadb
  ports:
    - port: 3306
      targetPort: 3306
  clusterIP: None  # Opcional, para servicio sin balanceo entre pods
---
# Deployment de Drupal
apiVersion: apps/v1
kind: Deployment
metadata:
  name: drupal
  namespace: drupal
spec:
  replicas: 1
  selector:
    matchLabels:
      app: drupal
  template:
    metadata:
      labels:
        app: drupal
    spec:
      containers:
        - name: drupal
          image: drupal:latest
          ports:
            - containerPort: 80
          env:
            - name: DRUPAL_DB_HOST
              value: mariadb.drupal.svc.cluster.local
            - name: DRUPAL_DB_NAME
              valueFrom:
                secretKeyRef:
                  name: drupal-db-secret
                  key: MYSQL_DATABASE
            - name: DRUPAL_DB_USER
              valueFrom:
                secretKeyRef:
                  name: drupal-db-secret
                  key: MYSQL_USER
            - name: DRUPAL_DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: drupal-db-secret
                  key: MYSQL_PASSWORD
          volumeMounts:
            - name: drupal-storage
              mountPath: /var/www/html
      volumes:
        - name: drupal-storage
          persistentVolumeClaim:
            claimName: drupal-pvc
---
# Service para Drupal
apiVersion: v1
kind: Service
metadata:
  name: drupal
  namespace: drupal
spec:
  selector:
    app: drupal
  ports:
    - port: 80
      targetPort: 80
---
# Ingress para Drupal
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: drupal
  namespace: drupal
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    cert-manager.io/cluster-issuer: "letsencrypt-staging"
spec:
  tls:
    - hosts:
        - drupal.k8s.ictiberia.com
      secretName: drupal-tls
  rules:
    - host: drupal.k8s.ictiberia.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: drupal
                port:
                  number: 80