Cómo instalar Laravel en Ubuntu y Linux
Cómo instalar Laravel en Ubuntu y Linux
Linux es el sistema operativo que más se parece al entorno de producción donde eventualmente vas a desplegar tu aplicación, lo que lo convierte en una excelente opción para desarrollar con Laravel. En esta guía usaremos Ubuntu 22.04, pero los pasos son prácticamente idénticos para Debian, Linux Mint y otras distribuciones basadas en Debian.
Requisitos del sistema
Laravel 11 requiere:
- PHP 8.2 o superior
- Extensiones PHP: BCMath, Ctype, cURL, DOM, Fileinfo, JSON, Mbstring, OpenSSL, PCRE, PDO, Tokenizer, XML
- Composer: el gestor de dependencias de PHP
- Servidor de base de datos: MySQL, PostgreSQL o SQLite
Paso 1: Actualizar el sistema e instalar dependencias
Siempre es buena práctica empezar con el sistema actualizado:
sudo apt update && sudo apt upgrade -y
Agregar el repositorio de PHP (Ondrej PPA)
Ubuntu 22.04 incluye PHP 8.1 por defecto, pero necesitamos PHP 8.2 o superior. Usaremos el PPA de Ondrej Sury, que es el repositorio más confiable para tener versiones modernas de PHP en Ubuntu:
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
Paso 2: Instalar PHP y sus extensiones
Ahora instala PHP 8.2 con todas las extensiones que Laravel necesita:
sudo apt install -y \
php8.2 \
php8.2-cli \
php8.2-fpm \
php8.2-mysql \
php8.2-pgsql \
php8.2-sqlite3 \
php8.2-mbstring \
php8.2-xml \
php8.2-curl \
php8.2-zip \
php8.2-bcmath \
php8.2-tokenizer \
php8.2-fileinfo \
php8.2-dom \
php8.2-gd \
unzip \
git
Verifica que PHP está correctamente instalado:
php --version
// PHP 8.2.x (cli)
Verifica que las extensiones necesarias están cargadas:
php -m | grep -E "mbstring|xml|curl|zip|bcmath|pdo"
Deberías ver las extensiones listadas en la salida.
Paso 3: Instalar Composer
Composer es el gestor de dependencias de PHP. Vamos a instalarlo globalmente para poder usarlo desde cualquier directorio:
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
sudo chmod +x /usr/local/bin/composer
Verifica la instalación:
composer --version
// Composer version 2.x.x
Actualizar Composer si ya lo tenías instalado
composer self-update
Paso 4: Crear el proyecto Laravel
Navega a tu directorio de proyectos y crea un nuevo proyecto. Si no tienes una carpeta específica, puedes usar ~/proyectos:
mkdir -p ~/proyectos
cd ~/proyectos
composer create-project laravel/laravel mi-proyecto
cd mi-proyecto
Composer descargará Laravel y todas sus dependencias. Este proceso puede tardar entre 1 y 3 minutos dependiendo de tu conexión a internet.
Paso 5: Configurar permisos
Esta es una parte crítica que muchos tutoriales omiten. Laravel necesita escribir en las carpetas storage/ y bootstrap/cache/. Si el servidor web (Nginx o Apache) no tiene permisos de escritura en estas carpetas, la aplicación fallará.
Para desarrollo local con php artisan serve, el usuario que ejecuta el comando ya tiene los permisos correctos. Pero es buena práctica configurarlos correctamente desde el principio:
// Ajusta los permisos de las carpetas que Laravel necesita escribir
chmod -R 775 storage bootstrap/cache
// Si tu usuario actual necesita ser propietario:
chown -R $USER:$USER storage bootstrap/cache
Si en producción usas Nginx con PHP-FPM, el usuario del servidor web suele ser www-data:
// En producción (no en desarrollo local):
sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache
Paso 6: Configurar el archivo .env
El archivo .env ya se creó automáticamente durante composer create-project. Ábrelo con nano o tu editor favorito:
nano .env
Las variables más importantes son:
APP_NAME="Mi Proyecto Laravel"
APP_ENV=local
APP_KEY=base64:clave_generada_automaticamente
APP_DEBUG=true
APP_URL=http://localhost:8000
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nombre_base_datos
DB_USERNAME=tu_usuario
DB_PASSWORD=tu_password
Si no tienes MySQL instalado todavía, puedes usar SQLite para empezar sin configurar nada:
DB_CONNECTION=sqlite
// Basta con dejar las otras variables DB_* sin valor o comentarlas
Con SQLite, crea el archivo de base de datos:
touch database/database.sqlite
Genera la clave de aplicación si por algún motivo no se generó:
php artisan key:generate
Paso 7: Ejecutar las migraciones (opcional)
Si tienes la base de datos configurada, ejecuta las migraciones iniciales:
php artisan migrate
Si usas MySQL, primero necesitas crear la base de datos. Puedes hacerlo desde la terminal de MySQL:
// Instalar MySQL si no lo tienes:
sudo apt install -y mysql-server
sudo mysql_secure_installation
// Crear la base de datos:
sudo mysql -u root -p
// Dentro de MySQL:
CREATE DATABASE nombre_base_datos CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'tu_usuario'@'localhost' IDENTIFIED BY 'tu_password';
GRANT ALL PRIVILEGES ON nombre_base_datos.* TO 'tu_usuario'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Paso 8: Levantar el servidor de desarrollo
php artisan serve
Abre tu navegador en http://localhost:8000 y verás la pantalla de bienvenida de Laravel.
Para que el servidor sea accesible desde otros dispositivos en tu red local (útil para pruebas en móvil):
php artisan serve --host=0.0.0.0 --port=8000
Instalar Node.js y npm (necesario para el frontend)
Laravel usa Vite para compilar assets de frontend. Para usar CSS y JavaScript necesitas Node.js:
// Instalar Node.js usando NodeSource
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
// Verificar
node --version
npm --version
Una vez instalado Node.js, instala las dependencias de frontend:
npm install
npm run dev // Para desarrollo con Hot Module Replacement
Problemas comunes en Ubuntu y Linux
Error: “Unable to locate package php8.2”
Esto ocurre cuando no agregaste el PPA de Ondrej. Ejecuta:
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
sudo apt install php8.2
Error: “composer: Permission denied”
El archivo composer.phar no tiene permisos de ejecución o no está en el PATH:
sudo chmod +x /usr/local/bin/composer
// O reinstala siguiendo el Paso 3
Error: “The stream or file could not be opened” en logs
Problema de permisos en storage/:
sudo chmod -R 775 storage bootstrap/cache
// Si usas www-data como servidor web:
sudo chown -R www-data:$USER storage bootstrap/cache
PHP no encuentra las extensiones
Después de instalar extensiones de PHP, puede que necesites reiniciar PHP-FPM o simplemente verificar que la extensión está habilitada:
php -m | grep mbstring
// Si no aparece, verifica que está instalada:
sudo apt install php8.2-mbstring
Error: “SQLSTATE[HY000] [2002] Connection refused”
MySQL no está corriendo. Inícialo con:
sudo systemctl start mysql
sudo systemctl enable mysql // Para que inicie automáticamente
Configurar un servidor web real (Nginx) para desarrollo
Aunque php artisan serve es suficiente para desarrollo básico, si quieres un setup más parecido a producción puedes instalar Nginx:
sudo apt install -y nginx
Crea un archivo de configuración para tu proyecto:
sudo nano /etc/nginx/sites-available/mi-proyecto
Con este contenido:
server {
listen 80;
server_name mi-proyecto.local;
root /home/tu-usuario/proyectos/mi-proyecto/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}
Activa el sitio:
sudo ln -s /etc/nginx/sites-available/mi-proyecto /etc/nginx/sites-enabled/
sudo nginx -t // Verificar configuración
sudo systemctl reload nginx
Agrega el dominio local a /etc/hosts:
sudo nano /etc/hosts
// Agrega esta línea:
// 127.0.0.1 mi-proyecto.local
Conclusión
Ubuntu y Linux en general son excelentes plataformas para desarrollar con Laravel. La experiencia es más fluida que en Windows porque el ecosistema de herramientas está diseñado pensando en sistemas Unix. Con PHP, Composer e instalados y los permisos correctos en storage/, tienes todo lo necesario para construir aplicaciones robustas.
El siguiente paso natural es aprender sobre migraciones, Eloquent ORM y el sistema de rutas de Laravel. ¡Buena suerte!