Laravel - Guía de Configuración, Permisos y Primeros Pasos
Desarrollo

Laravel - Guía de Configuración, Permisos y Primeros Pasos

15 Apr, 2023 • 5 min de lectura

Laravel es un framework potente, pero configurar el entorno de desarrollo (especialmente en Linux y Docker) puede presentar desafíos con permisos y configuraciones iniciales. Esta guía recopila soluciones a problemas comunes y pasos esenciales para iniciar un proyecto.

Gestión de Permisos en Linux

Uno de los problemas más frecuentes al desarrollar en Linux es el conflicto de permisos entre tu usuario local y el servidor web (generalmente www-data).

¿Cómo evitar errores de permisos al editar ficheros?

Si recibes errores como “Insufficient permissions” al guardar cambios en VSCode o problemas con el propietario de los archivos, sigue estos pasos:

  1. Añadir tu usuario al grupo www-data Para que tu usuario principal tenga los mismos permisos que el servidor web, agrégalo al grupo de Apache/Nginx:
    sudo usermod -aG www-data $USER
    

    (Nota: adduser también funciona, pero usermod es más estándar para modificar usuarios existentes).

  2. Corregir propietarios actuales Si ya tienes archivos creados con root (por haber usado sudo code), restaura la propiedad al grupo correcto:
    sudo chown -R $USER:www-data /var/www/html/tu-proyecto
    
  3. Configurar permisos de escritura Asegúrate de que el grupo tenga permisos de escritura en los directorios clave (como storage y bootstrap/cache):
    sudo chmod -R 775 storage bootstrap/cache
    

Errores Comunes de Permisos

  • Problema: Editas un archivo con sudo code . y el servidor web devuelve error 500.
    • Causa: El archivo ahora pertenece a root y el servidor no puede leerlo.
    • Solución: Nunca uses sudo para ejecutar tu editor de código. Configura los permisos del grupo como se indicó arriba.
  • Problema: “The stream or file laravel.log could not be opened in append mode: Permission denied”
    • Solución: Asegúrate de que la carpeta de logs tenga permisos de escritura para el grupo:
      sudo chmod -R 775 storage/logs
      

Creación de un Nuevo Proyecto Laravel

Pasos básicos para levantar una aplicación desde cero:

  1. Base de Datos: Crea una base de datos vacía en MySQL/MariaDB.
  2. Instalación:
    laravel new nombre-app
    
  3. Configuración de Entorno:
    • Copia .env.example a .env.
    • Configura las credenciales de base de datos (DB_DATABASE, DB_USERNAME, etc.).
  4. Migraciones: Genera las tablas base.
    php artisan migrate
    
  5. Desarrollo MVC:
    • Modelos: Representación de tus tablas.
    • Controladores: Lógica de negocio.
    • Vistas/Rutas: Interfaz y puntos de entrada (routes/web.php o routes/api.php).

Crear una API REST en Laravel

Pasos para exponer tu backend a clientes externos (React, Vue, Mobile):

  1. Definir Rutas: Usa routes/api.php para definir tus endpoints. Las rutas aquí tienen prefijo /api y middleware de limitación de tráfico por defecto.
  2. Crear Controladores API:
    php artisan make:controller Api/ProductController --api
    
  3. Respuesta JSON: Retorna respuestas estructuradas.
    public function index() {
        return response()->json(Product::all());
    }
    
  4. Seguridad (Sanctum/Passport): Configura autenticación para proteger los endpoints sensibles.

Seeders: Usuarios por Defecto

Para inicializar tu base de datos con un usuario administrador o datos de prueba:

  1. Edita database/seeders/DatabaseSeeder.php.
  2. Usa el modelo User para crear el registro:

    use App\Models\User;
    use Illuminate\Support\Facades\Hash;
        
    public function run()
    {
        User::create([
            'name' => 'Admin Usuario',
            'email' => '[email protected]',
            'password' => Hash::make('password_segura'),
        ]);
    }
    
  3. Ejecuta el seeder:
    php artisan db:seed
    

Troubleshooting Docker y Permisos

Si usas Docker, los permisos pueden ser más complejos por la diferencia de IDs de usuario entre el host y el contenedor.

Error: “Permission denied” en logs con Docker

Si laravel.log da error al escribir dentro del contenedor:

  1. En tu Dockerfile: Asegúrate de cambiar el propietario de las carpetas críticas al usuario interno de la imagen (usualmente www-data).
    COPY . /var/www/html
    RUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache
    
  2. Reconstruir contenedores:
    docker-compose down
    docker-compose up -d --build
    
  3. Verificación: Entra al contenedor y verifica los propietarios:
    docker-compose exec app ls -la storage/logs