anúncios

sábado, 6 de fevereiro de 2021

Configurando ambiente de desenvolvimento PHP 8 com Nginx no Docker

O objetivo deste howto é explicar os procedimentos de configuração do ambiente de desenvolvimento PHP 8 com JIT habilitado, composer, Nginx, Adminer e SGBD MySQL 8 no Docker.

A premissa é ter Docker e Docker-Compose instalados, caso ainda não tenha, verifique Instalando Docker e Docker-Compose no Linux ou Instalando Docker e Docker-Compose no Windows 10

$ cd $HOME
$ mkdir -p ambiente-php8-nginx-mysql-docker && cd ambiente-php8-nginx-mysql-docker
$ mkdir -p php8-fpm php8-fpm/config nginx src db

Os diretórios src, db são volumes mapeados entre o HOST e CONTAINER

O diretório ambiente-php8-nginx-mysql-docker/src é onde estará os fontes do projeto no HOST que irá mapear no diretório /var/www/html no CONTAINER

O diretório ambiente-php8-nginx-mysql-docker/db é onde está os arquivos do banco de dados no HOST que irá mapear no diretório /var/lib/mysql no CONTAINER

Se não tiver o volume db ao encerrar, o banco de dados irá para o espaço, pois o container é volátel.

Criar o Dockerfile para o PHP

php8-fpm/Dockerfile

FROM php:8.0.1-fpm-buster
RUN docker-php-ext-install pdo pdo_mysql bcmath opcache
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
EXPOSE 9000
ENTRYPOINT ["php-fpm"]

Criar os arquivos de configuração do PHP

Habilitar o JIT

php8-fpm/config/jit.ini

opcache.enable = 1
opcache.jit_buffer_size = 100M
opcache.jit = 1235
opcache.jit_debug = 0

Configurar o timezone, use conforme o seu fuso horário da sua região

php8-fpm/config/timezone.ini

date.timezone = "America/Sao_Paulo"

Criar o arquivo default.conf do Nginx no diretório ambiente-php8-nginx-mysql-docker/nginx/config

server {
  listen 80;
  index index.php index.html;
  root /var/www/html;
  server_name localhost;

  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(./+)$;
    fastcgi_pass php-fpm:9000;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
  }

  location / {
    try_files $uri $uri/ /index.php?$query_string;
    gzip_static on;
  }
}

Criar o arquivo docker-compose.yml na raiz do diretório ambiente-php8-nginx-mysql-docker

OBS: Esteja atento a indentação do arquivo docker-compose.yml para o correto funcionamento na hora que for executar.

docker-compose.yml

version: '3'
services:
  php-fpm:
    build: ./php8-fpm
    container_name: php8-fpm
    volumes:
      - ./src:/var/www/html
      - ./php8-fpm/config/jit.ini:/usr/local/etc/php/conf.d/jit.ini
      - ./php8-fpm/config/timezone.ini:/usr/local/etc/php/conf.d/timezone.ini
  nginx:
    image: nginx:1.19.6
    restart: always
    ports:
      - "8000:80"
    volumes:
      - "./src:/var/www/html"
      - "./nginx/default:/etc/nginx/conf.d/default.conf"
    depends_on:
      - php-fpm

  db:
    image: mysql:8.0
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - "./db:/var/lib/mysql"

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080


Executar o build e execução do ambiente na raiz do diretório ambiente-php8-nginx-mysql-docker

OBS: Antes de executar, verifique se as portas 8000 (Nginx), 9000 (FPM), 8080 (Adminer) e 3306 (MySQL) estão disponíveis na sua máquina.

$ docker-compose up -d

Aguarde e após estiver OK, crie um arquivo ambiente-php8-nginx-mysql-docker/src/info.php

<?php
  phpinfo();

Acesse no browser http://localhost:8000/info.php e para gerenciar bancos de dados http://localhost:8080

Usos gerais no container no ambiente

Para verificar logs do container php8-fpm

$ docker logs php8-fpm  

Para acessar o container similar o acesso SSH

$ docker exec -it php8-fpm bash

Para instalar alguma lib/framework via composer no container php8-fpm

Acesse o diretório ambiente-php8-nginx-mysql-docker/src e execute para iniciar um novo projeto com framework Laravel

$ docker exec -it php8-fpm composer create-project laravel/laravel

Referências

Ambiente PHP 8 com Nginx no Docker

Feito!

Nenhum comentário:

Postar um comentário