Configurar un proyecto para ejecutar PHP y Laravel con Docker.

Después de aprender sobre la conveniencia de Docker y algunos de los conceptos más comúnmente utilizados de Docker, hagamos un ejemplo de configurar un proyecto para ejecutar Laravel en Docker, con servicios como php, mysql y el servidor nginx.

Lo que haremos:

  • Instalar nginx, mysql, php -> Probar ejecución en el navegador con el servidor web php nginx.
  • Instalar Laravel en un directorio con Docker.
  1. Crear archivo y carpeta en tu ruta de origen:
  • Carpeta: mysql, nginx, nginx_log, php-fpm
  • Archivos: Dockerfile, docker-compose.yml

Carpeta de origen

  1. Archivo Docker
    – Obtenga el instalador nginx, php-fpm de docker-hub (de wyveo)

– Cree un archivo Dockerfile con el siguiente contenido:

FROM wyveo/nginx-php-fpm:php73
LABEL maintainer=”your favorite title”

  1. docker acoplable-compose.yml
    – Cree Docker-Compose con el siguiente contenido:

mydocker_server:                         // name of server
build: .                              // all file in current folder
dockerfile: Dockerfile                 // call Dockerfile (dockerfile same folder docker-compose file)
container_name: mydocker_frame         // name the container for the server
working_dir: /var/www/html            // working directory that holds data on the server
ports:
– “80:80”                            // default port
volumes:                                // maps all files and folders in src to the path address on the server
– ./src:/var/www/html
– ./nginx/nginx_log:/var/log/nginx
– ./php-fpm/php-fpm.log:/var/log/php-fpm.log
– ./nginx/default.conf:/etc/nginx/conf.d/app.conf

links:                                // link to mysql, so that when we build it, we will use the same images
– mysql

mysql:
image: mysql:5.6                         // version mysql
container_name: mydocker_mysql            // Name the container for mysql
ports:
– “3308:3306”                        // the default port is 3306, while 3308 is up to you
volumes:                                // maps all files and folders in mysql to the path address on the server
– ./mysql:/var/lib/mysql

environment:                            // config database information
MYSQL_DATABASE: your_db
MYSQL_USER: root
MYSQL_PASSWORD: root
MYSQL_ROOT_PASSWORD: root
SERVICE_TAGS: dev
SERVICE_NAME: mysql

4.nginx/default.conf
– Cree el archivo default.conf en la carpeta nginx. Servidor de configuración nginx:

server {
listen   80; ## listen for ipv4; this line is default and implied
# listen   [::]:80 default ipv6only=on; ## listen for ipv6

root /var/www/html/public;
index index.php index.html index.htm;

# Make site accessible from http://localhost/
server_name mydocker.local www.mydocker.local;

# Disable sendfile as per https://docs.vagrantup.com/v2/synced-folders/virtualbox.html
sendfile off;

# Security – Hide nginx version number in error pages and Server header
server_tokens off;

# Add stdout logging
error_log /dev/stdout info;
access_log /dev/stdout;

# reduce the data that needs to be sent over network
gzip on;
gzip_min_length 10240;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css text/xml application/json text/javascript application/x-javascript application/xml;
gzip_disable “MSIE [1-6]\.”;

location / {
# First attempt to serve request as file, then
# as directory, then fall back to index.php
try_files $uri $uri/ /index.php?$query_string $uri/index.html;
}

# redirect server error pages to the static page /50x.html
#
error_page   500 502 503 504  /50x.html;
location = /50x.html {
root   /var/www/html/public;
}

# pass the PHP scripts to FastCGI server listening on socket
#
location ~ \.php$ {
try_files $uri $uri/ /index.php?$query_string;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}

location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
expires           5d;
}

# deny access to . files, for security
#
location ~ /\. {
log_not_found off;
deny all;
}
}

nombre_servidor mydocker.local www.mydocker.local;

-> necesitas configurarlo en /etc/hosts:

– MacOS y Linux: sudo nano /etc/hosts

– Windows: Abra con el Bloc de notas el siguiente archivo: c:\Windows\System32\Drivers\etc\hosts. Puede hacer clic derecho y seleccionar Ejecutar como administrador.

  1. Prueba en el navegador
    Después de completar el paso anterior, ejecute el siguiente comando para compilar y ejecutar el contenedor

docker-compose build && docker-compose up -d

Creas el archivo index.php en src: php_info();

ejecute la URL: mydocker.local en el navegador

  1. Instale la aplicación laravel usando la ventana acoplable.
    mkdir src/públic
    cd src/públic

composer create-project laravel/laravel .

Archivo fuente después de instalar Laravel
Resultado en el navegador

¡Hecho!

Consulte el enlace: https://gitlab.com/donv/simple-laravel-docker

Deja un comentario