Hoy vamos a ver como instalar Laravel partiendo de la imagen creada en Crear contenedor Docker con CentOS7/Nginx/MariaDB y MultiPHP que vimos hace un par de semanas. A partir de esa imagen vamos a instalar y configurar  un nuevo proyecto en Laravel dando de alta un host virtual en Nginx.

Script para creación de Contenedores

Una de las ventajas de docker es el poder crear, usar y descartar los contenedores facilmente, si queremos facilitar aun mas podemos usar el siguiente script, podes ejecutar lo siguiente

sudo touch /usr/sbin/newdock
sudo chmod +x /usr/sbin/newdock
sudo nano /usr/sbin/newdock

Luego guardamos el siguiente contenido en el archivo newdock

#!/bin/bash

mkdir -p $2/{html,mysql,backup,disk,nginx}

docker run -it --privileged --hostname="server" -e "container=docker" --cap-add SYS_ADMIN \
--tmpfs /run -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
-p 22:22 -p 80:80 -p 3306:3306 \
-v "$2/html:/var/www/html" \
-v "$2/nginx:/etc/nginx/conf.d" \
-v "$2/mysql/:/var/lib/mysql" \
-v "$2/backup/:/backup" \
-v "$2/disk/:/mnt/disk" \
--name $1 "alvarodeleon/centos7-nginx-multiphp" "/usr/sbin/init"

Preparando el contenedor Docker

Usando el script anterior, ejecutamos:

sudo newdock ContenedorDocker /ruta/ProyectoLaravel

Ingresamos con el usuario root y password docker y primero ejecutamos mysql_repair

Instalado Laravel

#Configuramos la versión 7.0 de PHP
setphp 70

#Luego hacemos
cd /var/www/html

#A través de composer creamos el proyecto que 
#para este ejemplo llamaremos ProyectoLaravel
composer create-project --prefer-dist laravel/laravel ProyectoLaravel

Modificando el archivo Host de nuestra PC

Ahora podemos configurar un dominio por ejemplo laravel.lan para poder ingresar desde nuestro navegador, para eso podemos modificar el archivo /etc/hosts de nuestro PC si utilizamos Linux y agregamos la siguiente línea

127.0.0.1 laravel.lan www.laravel.lan

Obiamente podemos colocar el nombre que queramos, no solo laravel.lan.

Si tienen Windows pueden seguir esta guía Cómo usar el archivo hosts de nuestro sistema operativo

Configurando Ngnix y PHP

Aquí vamos a configurar Nginx y a especificar una versión de PHP

Para eso debemos ir en nuestra PC a /ruta/ProyectoLaravel/nginx/ o a la ruta que le hayamos dado por supuesto, también podemos ir al directorio /etc/nginx/conf.d desde dentro de nuestro docker y allí guardamos con el siguiente contenido un archivo llamado laravel.lan.conf o con cualquier nombre siempre y cuando termine con .conf

En el archivo solo debemos corregir el dominio y el nombre del proyecto.

server {

        listen 80;
        listen [::]:80;

        server_name laravel.lan;

        root /var/www/html/ProyectoLaravel/public;
        index index.php index.html index.htm index.nginx-debian.html;

        location / {
		try_files $uri $uri/ /index.php$is_args$args;
        }

        location ~ \.php$ {
            try_files $uri  =404;

#PHP 5.4
#fastcgi_pass 127.0.0.1:9054;
 
#PHP 5.5
#fastcgi_pass 127.0.0.1:9055;
 
#PHP 5.6
#fastcgi_pass 127.0.0.1:9056;
 
#PHP 7.0
fastcgi_pass 127.0.0.1:9070;
 
#PHP 7.1
#fastcgi_pass 127.0.0.1:9071;
 
#PHP 7.2
#fastcgi_pass 127.0.0.1:9072;
 
#PHP 7.3 
#fastcgi_pass 127.0.0.1:9073;

            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
            fastcgi_buffer_size 128k;
            fastcgi_buffers 256 4k;
            fastcgi_busy_buffers_size 256k;
            fastcgi_temp_file_write_size 256k;

            fastcgi_param PHP_VALUE "
                        memory_limit=512M;
                        upload_max_filesize=5M;
                        display_errors=On;
                        error_reporting=E_ALL;
                        max_execution_time=3600;
            ";
        }



         location ~ /\.ht {
                 deny all;
        }
}

Luego de esto desde dentro de docker ejecutamos para asegurarnos que no tengamos problemas de lectura entre docker y nuestra PC

chmod 777 -R /etc/nginx/conf.d/
chmod 777 -R /var/www/html/
service nginx restart

Ingresando a www.laravel.lan

Nos debería aparecer la siguiente pantalla aunque también nos pueden aparecer errores que te ayudare a resolver en el siguiente punto

Problemas frecuentes

Lo mas probable es que deban ejecutar lo siguiente

touch /var/www/html/ProyectoLaravel/storage/logs/laravel.log
chmod 777 /var/www/html/ProyectoLaravel/storage/logs/laravel.log
mkdir -p /var/www/html/ProyectoLaravel/storage/framework/views/
chmod 777 /var/www/html/ProyectoLaravel/storage/framework/views/

 

Igualmente deben asegurarse que existan los siguientes directorios

bootstrap/cache/
storage/framework
storage/framework/views
storage/framework/sessions
storage/framework/cache

Si crean alguno luego denle permisos 777 igual que en el paso anterior.

Igualmente pueden haber más razones para que de error y si al ingresar en nuestro navegador obtenemos un error 500 pueden revisar este excelente artículo sobre Error 500 en Laravel escrito por Sabrina, una guru en Laravel de primer nivel.

Ella tiene la terrible mala suerte de ser persona a la que molesto siempre con alguna que otra consulta, que por cierto está inaugurando su nuevo blog sabrinadls.com que pueden visitar.

Si tienes alguna duda deja tu consulta en los comentarios.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *