{"id":37,"date":"2024-02-01T11:32:00","date_gmt":"2024-02-01T14:32:00","guid":{"rendered":"https:\/\/dumba.dev.br\/?p=37"},"modified":"2026-01-13T11:34:59","modified_gmt":"2026-01-13T14:34:59","slug":"como-configurar-wordpress-no-kubernetes","status":"publish","type":"post","link":"https:\/\/dumba.dev.br\/index.php\/2024\/02\/01\/como-configurar-wordpress-no-kubernetes\/","title":{"rendered":"Como Configurar WordPress no Kubernetes"},"content":{"rendered":"\n<p>Vai que deseja um cluster de sites \ud83d\ude00<br><br>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.<\/p>\n\n\n\n<p>Outro belo dia, eu recebo um e-mail para renova\u00e7\u00e3o do site da empresa (wordpress), passando de R$ 19,90 para R$ 24,90 por m\u00eas, 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. \ud83d\ude00<\/p>\n\n\n\n<p>Para algu\u00e9m, que pensar como eu em economizar (\u00c9 zueira t\u00e1?!?! Um cluster kubernetes pode te falir.) segue um passo a passo que fez isso funcionar. Aten\u00e7\u00e3o se for usar HTTPS.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Crie o volume do seu projeto<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">kind: PersistentVolume<br>apiVersion: v1<br>metadata:<br>  name: nome-site<br>  labels:<br>    name: label-site<br>spec:<br>  capacity:<br>    storage: 2Gi<br>  storageClassName: standard<br>  accessModes:<br>    - ReadWriteOnce<br>  gcePersistentDisk:<br>    pdName: nome-qualquer<br>    fsType: ext4<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">&nbsp;<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\">Crie as permiss\u00f5es desse volume<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">kind: PersistentVolumeClaim\napiVersion: v1\nmetadata:\n  name: nome-claim\nspec:\n  accessModes:\n    - ReadWriteOnce\n  resources:\n    requests:\n      storage: 2Gi<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">&nbsp;<\/h4>\n\n\n\n<h4 class=\"wp-block-heading\">Caso precise fazer upload de arquivos maiores crie um ConfigMap para estender o uploads.ini<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">apiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: nome-config-map\ndata:\n  uploads.ini: |-\n    file_uploads = On\n    upload_max_filesize = 256M\n    post_max_size = 256M\n    memory_limit = 64M\n    max_execution_time = 600<\/pre>\n\n\n\n<p>Atualize os par\u00e2metros para o que for da sua necessidade.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Crie o deployment.<\/h4>\n\n\n\n<pre class=\"wp-block-preformatted\">apiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: nome-site\n  labels:\n    app: nome-site\nspec:\n  selector:\n    matchLabels:\n      app: nome-site\n  replicas: 1\n  template:\n    metadata:\n      labels:\n        app: nome-site\n    spec:\n      containers:\n      - name: nome-site\n        image: wordpress:latest\n        ports:\n        - containerPort: 80\n        - containerPort: 443\n        env:\n        - name: WORDPRESS_CONFIG_EXTRA\n          value: |\n            define('FORCE_SSL_ADMIN', true);\n            $_SERVER['HTTPS']='on';\n        - name: WORDPRESS_DB_NAME\n          value: nome-banco-dados\n        - name: WORDPRESS_DB_HOST\n          valueFrom:\n            secretKeyRef:\n              name: mysqldb\n              key: mysql-host\n        - name: WORDPRESS_DB_USER\n          valueFrom:\n            secretKeyRef:\n              name: mysqldb\n              key: mysql-user\n        - name: WORDPRESS_DB_PASSWORD\n          valueFrom:\n            secretKeyRef:\n              name: mysqldb\n              key: mysql-pass\n        volumeMounts:\n            - name: nome-volume\n              mountPath: \/var\/www\/html\n            - name: config-map\n              mountPath: \/usr\/local\/etc\/php\/conf.d\/uploads.ini\n              subPath: uploads.ini\n      volumes:\n        - name: nome-volume\n          persistentVolumeClaim:\n            claimName: nome-clain\n        - name: config-map\n          configMap:\n            defaultMode: 420\n            name: nome-config-map\n        \n<\/pre>\n\n\n\n<p>Veja nesse arquivo que estou fazendo uso de secrets, configure as suas!<\/p>\n\n\n\n<p>Fa\u00e7a o apontamento dos volumes e config maps de forma correta.<\/p>\n\n\n\n<p>Nesse arquivo, tem um trecho&nbsp;<strong>WORDPRESS_CONFIG_EXTRA<\/strong>&nbsp;essa foi a parte que mais apanhei, pois o WordPress n\u00e3o mostra as imagens quando seu site utilizar uma requisi\u00e7\u00e3o HTTPS. Para isso, voc\u00ea tem que definir uma vari\u00e1vel de ambiente setando alguns valores.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>FORCE_SSL_ADMIN = true;<\/strong><\/li>\n\n\n\n<li><strong>$_SERVER[&#8216;HTTPS&#8217;]=&#8217;on&#8217;;<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Com isso seu WordPress vai funcionar lindamente no kubernetes.<\/p>\n\n\n\n<p>Lembre &#8211; se que vai ter de criar o service, ingress e o que for necess\u00e1rio para acesso externo.<\/p>\n\n\n\n<p>Espero ter ajudado a pelo menos entender um pouco mais da estrutura do Kubernetes e dos milagres que ele pode fazer.<\/p>\n\n\n\n<p>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.<\/p>\n\n\n\n<p>Se existe algo mais f\u00e1cil, compartilha ai!<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Software de qualidade \u00e9 aquele que deixa seu cliente satisfeito.<\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Vai que deseja um cluster de sites \ud83d\ude00 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, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":39,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,14],"tags":[],"class_list":["post-37","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dicas","category-loucura"],"_links":{"self":[{"href":"https:\/\/dumba.dev.br\/index.php\/wp-json\/wp\/v2\/posts\/37","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dumba.dev.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dumba.dev.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dumba.dev.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dumba.dev.br\/index.php\/wp-json\/wp\/v2\/comments?post=37"}],"version-history":[{"count":3,"href":"https:\/\/dumba.dev.br\/index.php\/wp-json\/wp\/v2\/posts\/37\/revisions"}],"predecessor-version":[{"id":42,"href":"https:\/\/dumba.dev.br\/index.php\/wp-json\/wp\/v2\/posts\/37\/revisions\/42"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dumba.dev.br\/index.php\/wp-json\/wp\/v2\/media\/39"}],"wp:attachment":[{"href":"https:\/\/dumba.dev.br\/index.php\/wp-json\/wp\/v2\/media?parent=37"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dumba.dev.br\/index.php\/wp-json\/wp\/v2\/categories?post=37"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dumba.dev.br\/index.php\/wp-json\/wp\/v2\/tags?post=37"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}