Como Configurar WordPress no Kubernetes
Vai que deseja um cluster de sites 😀
Um belo dia desses, estava eu vendo as imagens docker para um estudo em particular e me deparei com a imagem do WordPress. Achei legal e me perguntei: Quem seria o maluco de subir o WordPress em um Kubernetes, para criar um site?? Ri um pouco sozinho, mas deixei isso de lado.
Outro belo dia, eu recebo um e-mail para renovação do site da empresa (wordpress), passando de R$ 19,90 para R$ 24,90 por mês, pensei: Ta caro! (Aprendi com o Primo Pobre). Posso economizar colocando isso no meu cluster Kubernetes!! Baita ideia de maluco, mas quis tentar e confesso, apanhei pra colocar esse negocio pra rodar. 😀
Para alguém, que pensar como eu em economizar (É zueira tá?!?! Um cluster kubernetes pode te falir.) segue um passo a passo que fez isso funcionar. Atenção se for usar HTTPS.
Crie o volume do seu projeto
kind: PersistentVolume
apiVersion: v1
metadata:
name: nome-site
labels:
name: label-site
spec:
capacity:
storage: 2Gi
storageClassName: standard
accessModes:
- ReadWriteOnce
gcePersistentDisk:
pdName: nome-qualquer
fsType: ext4
Crie as permissões desse volume
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nome-claim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
Caso precise fazer upload de arquivos maiores crie um ConfigMap para estender o uploads.ini
apiVersion: v1
kind: ConfigMap
metadata:
name: nome-config-map
data:
uploads.ini: |-
file_uploads = On
upload_max_filesize = 256M
post_max_size = 256M
memory_limit = 64M
max_execution_time = 600
Atualize os parâmetros para o que for da sua necessidade.
Crie o deployment.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nome-site
labels:
app: nome-site
spec:
selector:
matchLabels:
app: nome-site
replicas: 1
template:
metadata:
labels:
app: nome-site
spec:
containers:
- name: nome-site
image: wordpress:latest
ports:
- containerPort: 80
- containerPort: 443
env:
- name: WORDPRESS_CONFIG_EXTRA
value: |
define('FORCE_SSL_ADMIN', true);
$_SERVER['HTTPS']='on';
- name: WORDPRESS_DB_NAME
value: nome-banco-dados
- name: WORDPRESS_DB_HOST
valueFrom:
secretKeyRef:
name: mysqldb
key: mysql-host
- name: WORDPRESS_DB_USER
valueFrom:
secretKeyRef:
name: mysqldb
key: mysql-user
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysqldb
key: mysql-pass
volumeMounts:
- name: nome-volume
mountPath: /var/www/html
- name: config-map
mountPath: /usr/local/etc/php/conf.d/uploads.ini
subPath: uploads.ini
volumes:
- name: nome-volume
persistentVolumeClaim:
claimName: nome-clain
- name: config-map
configMap:
defaultMode: 420
name: nome-config-map
Veja nesse arquivo que estou fazendo uso de secrets, configure as suas!
Faça o apontamento dos volumes e config maps de forma correta.
Nesse arquivo, tem um trecho WORDPRESS_CONFIG_EXTRA essa foi a parte que mais apanhei, pois o WordPress não mostra as imagens quando seu site utilizar uma requisição HTTPS. Para isso, você tem que definir uma variável de ambiente setando alguns valores.
- FORCE_SSL_ADMIN = true;
- $_SERVER[‘HTTPS’]=’on’;
Com isso seu WordPress vai funcionar lindamente no kubernetes.
Lembre – se que vai ter de criar o service, ingress e o que for necessário para acesso externo.
Espero ter ajudado a pelo menos entender um pouco mais da estrutura do Kubernetes e dos milagres que ele pode fazer.
E lembrando que existe e-comerce rodando com ele e pode precisar de escala, resiliencia e tudo mais que um Kubernetes oferece. Meu pensamento foi para blog e sites. WordPress funciona e bem.
Se existe algo mais fácil, compartilha ai!
Software de qualidade é aquele que deixa seu cliente satisfeito.