Desplegament de la aplicación de Laravel con GitLab y Docker

Instalación de Dependencias

1. Instalación de Node.js, NPM, Curl y un editor de texto

Para desplegar nuestra aplicación, primero necesitamos instalar las dependencias necesarias: Node.js, NPM, Curl y algun Editor de texto para los archivos.

Node.js i NPM: Node.js és un entorno de ejecución para JavaScript que nos permite ejecutar nuestro codigo JavaScript en el servidor. NPM és el gestor de paquetes de Node, que lo usaremos para instalar i gestionar dependencias de JavaScript.

Curl: Curl es una herramienta de linia de comandas para transferir datos desde o hacia un servidor. En nuestro caso es necesario para descargar Composer y otras herramientas necesarias para configurar el entorno

Editor de texto: En nuestro caso usamos Vim, que es un editor de texto que se ejecuta en el terminal i es bueno para editar de forma rápida ficheros de configuración. Lo usamos para editar los ficheros como el docker-compose.yml, o el .env, entre otros.

Comandas de instalación:

apk add --no-cache nodejs npm curl vim

2. Configuración de los repositorios de Alpine

Alpine Linux utiliza un sistema de paquetes ligero llamado apk. Para asegurarnos de tener acceso a versiones específicas y actualizadas de los paquetes (como PHP 8.2), es recomendable especificar repositorios concretos de Alpine.

Comando:

RUN echo "https://dl-cdn.alpinelinux.org/alpine/v3.21/main" > /etc/apk/repositories && \
    echo "https://dl-cdn.alpinelinux.org/alpine/v3.21/community" >> /etc/apk/repositories

¿Por qué se hace esto?

  • Alpine, por defecto, puede apuntar a repositorios muy básicos o versiones antiguas.
  • Especificar v3.21 garantiza que podamos instalar PHP 8.2 y otros paquetes recientes.
  • Los repositorios main y community ofrecen una gama completa de paquetes que no están en el repositorio base.

3. Instalación de paquetes esenciales del sistema y PHP

Instalamos todos los paquetes necesarios para que Laravel pueda funcionar correctamente en el contenedor:

RUN apk update && \
    apk add --no-cache zip unzip curl sqlite supervisor bash coreutils shadow \
    php82-fpm php82-pdo php82-pdo_mysql php82-mbstring php82-tokenizer php82-xml \
    php82-openssl php82-json php82-fileinfo php82-curl php82-session

¿Qué se está instalando y por qué?

  • zip, unzip, curl: herramientas básicas para manejo de archivos y descargas.
  • sqlite: base de datos ligera útil para entornos de desarrollo.
  • supervisor: gestor de procesos para workers de Laravel.
  • bash, coreutils, shadow: comandos esenciales del sistema.
  • Paquetes de php82-*: extensiones que Laravel necesita para operar, como conexión a bases de datos, manejo de cadenas, sesiones, archivos, etc.
  • php82-fpm: el servidor PHP que será gestionado por NGINX mediante FastCGI.

4. Instalación de Composer

Composer es el gestor de dependencias PHP. Se instala de forma manual para asegurar que esté disponible en todo el contenedor.

RUN curl -sS https://getcomposer.org/installer | php && \
    mv composer.phar /usr/local/bin/composer

Esto descarga el instalador oficial y mueve el binario a una ruta accesible globalmente.


Instalación de Laravel en el entorno Docker

5. Instalador Global de Laravel

composer global require laravel/installer

Esto permite usar el comando laravel directamente para crear nuevos proyectos.


6. Creación del proyecto de Laravel

cd /laravel
laravel laraview
cd laraview

Creamos un nuevo proyecto llamado laraview en el directorio /laravel.


7. Instalación de Laravel Breeze

Laravel Breeze es un "starter kit" ligero para autenticación.

composer require laravel/breeze --dev
php artisan breeze:install

Instala vistas y rutas básicas de login, registro básicas para poder empezar a probar el proyecto.


8. Permisos y usuarios para el servicio web

addgroup -S www-data
adduser -S -G www-data www-data

chmod -R 775 /laravel/pablo-app/storage /laravel/pablo-app/bootstrap/cache
chown -R www-data:www-data /laravel/pablo-app/storage /laravel/pablo-app/bootstrap/cache

Esto asegura que los directorios de almacenamiento y caché tengan los permisos adecuados para ser usados por el servidor web.


9. Configuración de las variables del entorno

nano .env

El archivo .env contiene la configuración sensible del proyecto: acceso a la base de datos, claves de aplicación.


10. Migraciones de la Base de Datos

php artisan migrate

Esto ejecuta las migraciones para crear todas las tablas necesarias definidas por Laravel y los paquetes instalados.

Verificación manual:

mariadb -u root
USE laravel_db;
SHOW TABLES;

11. Compilación de recursos Frontend

Laravel usa Vite para compilar CSS y JavaScript:

npm install && npm run build

Instala las dependencias de Node.js y compila los assets para producción.


12. Optimización y limpieza de cachés

composer dump-autoload
php artisan config:clear
php artisan cache:clear

Estos comandos aseguran que Laravel recargue todas las configuraciones y rutas correctamente, eliminando cachés antiguos.


13. Ejecución del servidor Laravel

php artisan serve
curl http://localhost:8000

Lanza el servidor embebido para desarrollo. Se puede probar el acceso localmente con curl.


Con esta guía, ya tenemos un entorno Laravel completamente funcional sobre Docker, con PHP-FPM, NGINX (por separado), y soporte para autenticación, base de datos y frontend compilado.