Importante
Este artículo está obsoleto y puede contener información desactualizada. Por favor, consulta la documentación más reciente para obtener la información actualizada.
Laravel es un marco PHP gratuito, de código abierto y más popular que le permite desarrollar aplicaciones web escalables y flexibles fácilmente. Es un marco PHP simple, flexible y liviano, y tiene una sintaxis legible para desarrollar aplicaciones modernas y potentes desde cero.
Laravel es la mejor opción para usted si está buscando diseñar una aplicación de próxima generación.
En este tutorial, te mostramos cómo acoplar una aplicación web utilizando el marco Laravel y Nginx como servidor web en el servidor Ubuntu 18.04.
Prerequisitos
• Un servidor corriendo con Ubuntu 18.04 con un mínimo de 2 GB de RAM.
• Una contraseña de root configurada en tu servidor cloud.
Empezamos
Antes de empezar, te recomendamos que actualices tu sistema a la última versión. Puedes hacerlo ejecutando el siguiente comando:
# apt-get update && apt-get upgrade -y
Una vez que tu sistema se haya actualizado, reinícialo para aplicar los cambios.
Después, tendrás que instalar algunos paquetes requeridos en tu sistema. Puedes instalarlos todos ejecutando el siguiente comando:
# apt-get install apt-transport-https ca-certificates curl software-properties-common -y
Una vez que todos los paquetes estén instalados, puedes proceder al siguiente paso.
Instala Docker y Docker Compose
A continuación, tendrás que instalar Docker y Docker Compose en tu servidor. Por defecto, la última versión de Docker no está disponible en el repositorio por defecto de Ubuntu 18.04, por lo que tendrás que añadir el repositorio para este fin.
Primero, descarga y añade la llave GPG utilizando el siguiente comando:
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
Después, añade el repositorio Docker con el siguiente comando:
# add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
Una vez que esté añadido el repositorio, actualiza tu sistema e instala Docker y Docker Compose ejecutando el siguiente comando:
# apt-get update -y
# apt install docker-ce -y
# apt-get install docker-compose -y
Una vez que la instalación se haya completado, puedes comprobar el estado del servicio de Docker con el siguiente comando:
# systemctl status docker
Descarga Laravel e Instala Dependencias
A continuación, tendrás que descargar el framework de Laravel e instalar las dependencias requeridas con la imagen de Docker PHP composer.
Primero, descarga la última versión de Laravel con el siguiente comando:
# git clone https://github.com/laravel/laravel.git laravel
A continuación, instala las dependencias requeridas con el siguiente comando:
# cd laravel
# docker run --rm -v $(pwd):/app composer install
Deberías ver el siguiente resultado:
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
El comando más arriba crearé un contenedor temporal y copiará los contenidos de tu directorio ~/laravel en el contenedor.
Dockerizando Laravel
A continuación, necesitarás crear un nuevo archivo docker-compose.yml y un archivo Docker para tu proyecto Laravel.
Primero, crea un archivo docker-compose dentro de tu directorio ~/laravel:
# nano ~/laravel/docker-compose.yml
Añade las siguientes líneas:
version: '3'
services:
#PHP Service
app:
build:
context: .
dockerfile: Dockerfile
image: php:7.2-fpm-buster
container_name: app
restart: unless-stopped
tty: true
environment:
SERVICE_NAME: app
SERVICE_TAGS: dev
working_dir: /var/www
volumes:
- ./:/var/www
- ./php/local.ini:/usr/local/etc/php/conf.d/local.ini
networks:
- app-network
#Nginx Service
webserver:
image: nginx:alpine
container_name: webserver
restart: unless-stopped
tty: true
ports:
- "80:80"
- "443:443"
volumes:
- ./:/var/www
- ./nginx/conf.d/:/etc/nginx/conf.d/
networks:
- app-network
#MySQL Service
db:
image: mysql:5.7.22
container_name: db
restart: unless-stopped
tty: true
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: laravel
MYSQL_ROOT_PASSWORD: password
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- dbdata:/var/lib/mysql/
- ./mysql/my.cnf:/etc/mysql/my.cnf
networks:
- app-network
#Docker Networks
networks:
app-network:
driver: bridge
#Volumes
volumes:
dbdata:
driver: local
Guarda y cierra el archivo cuando hayas terminado.
Después, crea un archivo Docker para crear y personalizar imágenes con todo el software requerido por tu aplicación dentro del directorio ~/laravel:
# nano ~/laravel/Dockerfile
Añade las siguientes líneas:
FROM php:7.2-fpm-buster
# Copy composer.lock and composer.json
COPY composer.lock composer.json /var/www/
# Set working directory
WORKDIR /var/www
# Install dependencies
RUN apt-get update && apt-get install -y \
build-essential \
mysql-client \
libpng-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
locales \
zip \
jpegoptim optipng pngquant gifsicle \
vim \
unzip \
git \
nano \
curl
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Install extensions
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/
RUN docker-php-ext-install gd
# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Add user for laravel application
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www
# Copy existing application directory contents
COPY . /var/www
# Copy existing application directory permissions
COPY --chown=www:www . /var/www
# Change current user to www
USER www
# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm"]
Guarda y cierra el archivo cuando hayas terminado.
Configura PHP, MySQL y Nginx para Laravel
A continuación, necesitarás crear un directorio php dentro de tu directorio ~/laravel y crear el local.ini dentro del directorio ~/laravel/php:
# mkdir ~/laravel/php
# nano ~/laravel/php/local.ini
Añade las siguientes líneas:
# upload_max_filesize=40M
# post_max_size=40M
Guarda y cierra el archivo cuando hayas terminado.
Después necesitarás crear el directorio nginx/conf.d dentro de tu directorio ~/laravel y crear un archivo app.conf para la configuración de Nginx:
# mkdir -p ~/laravel/nginx/conf.d
# nano ~/laravel/nginx/conf.d/app.conf
Añade las siguientes líneas:
server {
listen 80;
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 app: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;
}
}
Guarda y cierra el archivo cuando hayas terminado.
Después, crea el directorio MySQL dentro de tu directorio ~/laravel y crea el archivo my.cnf con los ajustes requeridos:
# mkdir ~/laravel/mysql
# nano ~/laravel/mysql/my.cnf
Añade las siguientes líneas:
[mysqld]
general_log = 1
general_log_file = /var/lib/mysql/general.log
Despliega Laravel con Nginx y MySQL Services
A este punto hemos definido todos los servicios en el archivo docker-compose y creado un archivo de configuración para cada servicio. Después, crea una copia del archivo por defecto .env.example con el siguiente comando:
# cp .env.example .env
Ahora ejecuta el siguiente comando para descargar todas las imágenes requeridas y construir servicios de contenedor basados en la configuración 'docker-compose.yml' con el siguiente comando:
# docker-compose up -d
Una vez que el proceso esté completo, puedes comprobar los contenedores activos con el siguiente comando:
# docker ps
Deberías ver el siguiente resultado:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f5a749a605dc digitalocean.com/php "docker-php-entrypoi…" About a minute ago Up About a minute 9000/tcp app
79eae5da35c6 mysql:5.7.22 "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp db
b8181f7a7a54 nginx:alpine "nginx -g 'daemon of…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp webserver
Configura el Contenedor de Laravel
Después, necesitarás modificar el archivo .env con la app contenedor para Laravel.
Puedes editar fácilmente cualquier archivo dentro del contenedor con el comando "docker-compose exec". Primero, abre el archivo .env dentro de la app contenedor con el siguiente comando:
# docker-compose exec app nano .env
Cambia las siguientes líneas:
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laraveldb
DB_USERNAME=laraveluser
DB_PASSWORD=password
Guarda y cierra el archivo. Ahora genera la llave de aplicación de Laravel y limpia la cache con el siguiente comando:
# docker-compose exec app php artisan key:generate
# docker-compose exec app php artisan config:cache
Después, migra la base de datos utilizando el siguiente comando:
docker-compose exec app php artisan migrate
Accede a la Interfaz Web de Laravel
A este punto, has dockerizado Laravel con Nginx y MySQL. Ahora, abre tu navegador web y escribe la URL http://TU-servidor-ip. Serás redirigido al panel de control de Laravel por defecto:
¡Felicidades! Has dockerizado una aplicación web utilizando el framework de Laravel y Nginx como servidor web en un servidor cloud Ubuntu 18.04.