Docker Nginx + PHP

← ← ←   04/06/2022 15:48:43 | Posted by: Demostenes Albert |

Carteira Bitcoin: bc1qju3r9r07vzejdr0uazmdwgcqljt8n2vztyvkfx4gd5k0a97042wqkdwxrl


Ola senhores, hoje nesse post pretendo trazer algo muito interessante para quem como eu tem interesse em fazer com que o ambiente de dev fique o mais parecido possível com o ambiente de prod.

Para exemplificar vamos fazer dois ou mais "domínios" funcionarem no nosso nginx com docker e suas configurações, usando as aplicações php separadas. app1 e app2

Para inicio de nossas configurações vamos instalar o docker no nosso S.O.(meu caso Ubuntu), para tanto basta seguir a forma de instalação conforme o site oficial do docker.

Logo Docker

Uma vez instalado o docker vamos iniciar a nossa configuração, na pasta de destino onde você quiser usar a configuração do nginx, basta criar uma pasta no meu caso

    $ mkdir -p ~/Documentos/Dev/nginx
    $ mkdir -p ~/Documentos/Dev/nginx/docker-compose
    $ touch ~/Documentos/Dev/nginx/Dockerfile
    $ touch ~/Documentos/Dev/nginx/docker-compose.yml
    $ mkdir -p ~/Documentos/Dev/nginx/conf
  

Os comandos acima em ordem:

Em seguida eu crio os arquivos nome_do_meu_dominio.conf de configuração das aplicações

    $ touch ~/Documentos/Dev/nginx/conf/app1.conf
    $ touch ~/Documentos/Dev/nginx/conf/app2.conf
  

Navegue até o diretório nginx recem criado nesse caso:

    $ cd  ~/Documentos/Dev
  

Agora com o editor de texto de sua preferencia abra o arquivo app1.conf para edição

    $ vim ~/Documentos/Dev/nginx/conf/app1.conf
  

    server {
     listen 80;
     server_name app1.local;
     index index.php index.html;
     error_log  /var/log/nginx/error.log;
     access_log /var/log/nginx/access.log;
     root /var/www/public;
     location ~ \.php$ {
       try_files $uri =404;
       fastcgi_split_path_info ^(.+\.php)(/.+)$;
       fastcgi_pass app1:9000;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param PATH_INFO $fastcgi_path_info;
       fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
       include fastcgi_params;
     }
     location / {
      try_files $uri $uri/ /index.php?$query_string;
      gzip_static on;
     }
    }
  

Agora com o editor de texto de sua preferencia abra o arquivo app2.conf para edição

    $ vim ~/Documentos/Dev/nginx/conf/app2.conf
  

    server {
     listen 80;
     server_name app2.local;
     index index.php index.html;
     error_log  /var/log/nginx/error.log;
     access_log /var/log/nginx/access.log;
     root /var/www/public;
     location ~ \.php$ {
       try_files $uri =404;
       fastcgi_split_path_info ^(.+\.php)(/.+)$;
       fastcgi_pass app2:9000;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param PATH_INFO $fastcgi_path_info;
       fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
       include fastcgi_params;
     }
     location / {
      try_files $uri $uri/ /index.php?$query_string;
      gzip_static on;
     }
    }
  

Nesse momento vamos propriamente configurar o docker-compose

    $ vim ~/Documentos/Dev/nginx/docker-compose.yml
  

    version: "3.1"
    services:
     nginx:
      image: nginx:alpine
      container_name: nginx
      restart: unless-stopped
      ports:
       - 8000:80
      volumes:
       - ./:/var/www
       - ./conf:/etc/nginx/conf.d
      networks:
       - my_apps
     
     networks:
      my_apps:
       driver: bridge
  

Com estas configurações nos criamos 2 arquivos de configuração para o Nginx tratar com os containers PHP que trataremos no próximo arquivo lembrando que essa configuração permite escalar quantos containers PHP forem necessários apos a execução e configuração dos mesmos. Nos mapeamos também dois diretórios, o raiz ~/Documentos/Dev/nginx/ como /www/html e o ~/Documentos/Dev/nginx/conf como /etc/nginx/conf.d onde ficam os arquivos de configuração do Nginx.

Para duvidas e sugestões deixem comentários abaixo e até o próximo post.