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
ycommunity
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.