Implantação de PHP no Kubernetes: guia básico para iniciantes

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Implantação de PHP no Kubernetes: guia básico para iniciantes

\n\n

Kubernetes (K8s) tornou-se o padrão de facto para orquestração de contêineres. Se você é um desenvolvedor PHP, mais cedo ou mais tarde enfrentará a necessidade de implantar sua aplicação em um cluster. Neste guia, vamos analisar como transformar uma aplicação PHP comum em um serviço completo operando sob o gerenciamento do Kubernetes. Você aprenderá como preparar uma imagem Docker, escrever manifestos e executar tudo isso em um cluster local (por exemplo, Minikube).

\n\n

Usaremos a combinação clássica: PHP-FPM para processar scripts PHP e NGINX como servidor web. Isso nos permitirá alcançar alta performance e flexibilidade.

\n\n

1. Preparação da aplicação PHP e da imagem Docker

\n\n

O primeiro passo é empacotar seu código PHP em um contêiner Docker. Criaremos duas imagens: uma para PHP-FPM e outra para NGINX (ou usaremos uma imagem com supervisor, mas para iniciantes é mais simples separar).

\n\n

Crie o arquivo Dockerfile para PHP-FPM:

\n\n
FROM php:8.2-fpm-alpine\n\n# Instala extensões\nRUN docker-php-ext-install pdo_mysql mysqli opcache\n\n# Copia o código da aplicação\nCOPY . /var/www/html\n\n# Configurações do PHP\nCOPY php.ini /usr/local/etc/php/conf.d/custom.ini\n\nWORKDIR /var/www/html\n\nEXPOSE 9000\nCMD ["php-fpm"]
\n\n

Para NGINX, crie um Dockerfile separado:

\n\n
FROM nginx:alpine\n\n# Copia a configuração\nCOPY nginx.conf /etc/nginx/nginx.conf\nCOPY default.conf /etc/nginx/conf.d/default.conf\n\n# Arquivos estáticos (se houver)\nCOPY public/ /var/www/html/public/\n\nEXPOSE 80\nCMD ["nginx", "-g", "daemon off;"]
\n\n

Não se esqueça do arquivo default.conf para NGINX, que faz proxy das requisições para PHP-FPM:

\n\n
server {\n    listen 80;\n    server_name _;\n    root /var/www/html/public;\n    index index.php;\n\n    location / {\n        try_files $uri $uri/ /index.php?$args;\n    }\n\n    location ~ \\.php$ {\n        fastcgi_pass php-service:9000;  # nome do serviço no K8s\n        fastcgi_index index.php;\n        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n        include fastcgi_params;\n    }\n}
\n\n

Construa as imagens com o comando:

\n\n
docker build -t my-php-app:latest -f Dockerfile.php .\ndocker build -t my-nginx:latest -f Dockerfile.nginx .
\n\n

2. Fundamentos do Kubernetes: Pods, Deployments e Services

\n\n

Antes de escrever os manifestos, vamos entender os objetos básicos do K8s:

\n\n
    \n
  • Pod — a menor unidade de implantação, um ou mais contêineres.
  • \n
  • Deployment — gerencia réplicas de Pods, garante atualizações e reversões.
  • \n
  • Service — ponto de acesso estável para os Pods (dentro do cluster ou externamente).
  • \n
\n\n

Para nossa aplicação PHP, criaremos dois Deployments: um para PHP-FPM e outro para NGINX. Em seguida, os conectaremos através de um Service interno.

\n\n

3. Escrita dos manifestos para PHP e NGINX

\n\n

Crie o arquivo php-deployment.yaml:

\n\n
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: php-app\nspec:\n  replicas: 2\n  selector:\n    matchLabels:\n      app: php-app\n  template:\n    metadata:\n      labels:\n        app: php-app\n    spec:\n      containers:\n      - name: php-fpm\n        image: my-php-app:latest\n        ports:\n        - containerPort: 9000\n        env:\n        - name: DB_HOST\n          value: "mysql-service"  # exemplo de variável de ambiente\n        - name: DB_NAME\n          value: "mydb"\n        resources:\n          requests:\n            memory: "128Mi"\n            cpu: "250m"\n          limits:\n            memory: "256Mi"\n            cpu: "500m"\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: php-service\nspec:\n  selector:\n    app: php-app\n  ports:\n  - protocol: TCP\n    port: 9000\n    targetPort: 9000
\n\n

Agora crie

Blogs

Book Recommendations