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!