WordPress i Kubernetes
Denne guiden viser deg hvordan du legger inn WordPress på egen hånd på administrert Kubernetes hos Deploi. Dette vil gi en WordPress med redundans. Det betyr at hvis en av Deplois servere faller ned, vil WordPress automatisk bli aktivert på en annen server.
Først må du ha en MySQL database. Legg følgende i «wp-mysql-disk.yaml»:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wp-mysql-disk
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 1Gi
  storageClassName: deploi-block-storage
Kjør deretter «kubectl apply -f wp-mysql-disk.yaml».
Det neste vi trenger er innloggingsnøkler til databasen. Lag to nye passord og legg dem i filen «wp-mysql-secret.yaml» som vist under.
apiVersion: v1 kind: Secret metadata: name: wp-mysql-secret stringData: rootpassword: "54y3ie4dGGfjdewrg" password: "fg4h5h5Gfw3trFGER"
Kjør deretter «kubectl apply -f wp-mysql-secret.yaml».
Nå er vi klare til å sette opp MySQL for WordPressen vår. Legg følgende i «wp-mysql.yaml»:
apiVersion: v1
kind: Service
metadata:
  name: wp-mysql
  labels:
    app: wp-mysql
spec:
  ports:
    - port: 3306
  selector:
    app: wp-mysql
  clusterIP: None
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wp-mysql
  labels:
    app: wp-mysql
spec:
  selector:
    matchLabels:
      app: wp-mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wp-mysql
    spec:
      containers:
      - image: mysql:8
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: wp-mysql-secret
              key: rootpassword
        - name: MYSQL_DATABASE
          value: wordpress
        - name: MYSQL_USER
          value: wp-user
        - name: MYSQL_PASSWORD
          valueFrom:
            secretKeyRef:
              name: wp-mysql-secret
              key: password
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
        resources:
          limits:
            cpu: 250m
            memory: 1Gi
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: wp-mysql-disk
Kjør deretter «kubectl apply -f wp-mysql.yaml».
Neste steg er å opprette en disk for WordPress sine filer. Denne disken vil vare helt til du sletter den.
Legg følgende i filen «wp-disk.yaml»:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wp-disk
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 1Gi
  storageClassName: deploi-block-storage
Kjør deretter «kubectl apply -f wp-disk.yaml».
Nå er vi klare til å legge inn WordPress. Legg følgende i «wp.yaml»:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: frontend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: wordpress
        tier: frontend
    spec:
      containers:
      - image: wordpress:6.1.0-php8.1-apache
        name: wordpress
        env:
        - name: WORDPRESS_DB_HOST
          value: wp-mysql
        - name: WORDPRESS_DB_USER
          value: wp-user
        - name: WORDPRESS_DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: wp-mysql-secret
              key: password
        - name: WORDPRESS_DB_NAME
          value: wordpress
        ports:
        - containerPort: 80
          name: wordpress
        volumeMounts:
        - name: wordpress-persistent-storage
          mountPath: /var/www/html
        resources:
          limits:
            cpu: 1000m
            memory: 2Gi
      volumes:
      - name: wordpress-persistent-storage
        persistentVolumeClaim:
          claimName: wp-disk
Kjør deretter «kubectl apply -f wp.yaml». Du kan finne flere konfig-alternativer til denne WordPress-versjonen på nettsiden til Docker-versjonen av WordPress.
Du kan nå kjøre følgende for å se at WordPress ble startet.
kubectl get deployments wordpress
Hvis alt er som det skal, vil du se noe som ligner dette:
NAME READY UP-TO-DATE AVAILABLE AGE wordpress 1/1 1 1 5m16s
WordPress er nå installert, men ikke tilgjengelig offentlig.
Du kan bruke WordPress uten å gjøre den tilgjengelig offentlig. Kjør følgende kommando. Dette vil gjøre WordPress tilgjengelig på http://localhost:8080 i nettleseren din.
kubectl port-forward deployments/wordpress 8080:80
For å gjøre WordPress tilgjengelig offentlig må du peke inn et domene til Kubernetes. Dette gjør du i administrasjonpanelet der du har kjøpt domenet. (Har du ikke et domene kan du kjøpe dette fra Deploi). Pek domenet inn til hver av disse IP-adressene: 193.69.47.150, 193.69.47.106 og 193.69.50.36. For dette eksempelet har vi pekt inn wptest.deploi.cloud til disse adressene.
Legg følgende i «ingress.yaml», bytt til ditt domene de to stedene det står «wptest.deploi.cloud» nå. Merk at hvis du ønsker å peke flere domener inn til WordPress, f.eks. et som begynner med www, må du legge inn det også i denne filen.
apiVersion: v1
kind: Service
metadata:
  name: wordpress
spec:
  ports:
  - port: 8080
    targetPort: 80
    protocol: TCP
  selector:
    app: wordpress
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/issuer: letsencrypt-prod
  name: wptest-ingress
spec:
  ingressClassName: nginx
  rules:
  - host: wptest.deploi.cloud
    http:
      paths:
      - backend:
          service:
            name: wordpress
            port:
              number: 8080
        path: /
        pathType: Prefix
  tls:
  - hosts:
    - wptest.deploi.cloud
    secretName: wptest-eingress-cert
Kjør deretter «kubectl apply -f ingress.yaml».
Vent et par minutter for at HTTPS skal bli aktivert. Når den er aktivert kan du gå inn på domenet i nettleseren din (for vårt eksempel er det https://wptest.deploi.cloud) og følge veilederen til WordPress.
Du har nå WordPress på Kubernetes!