You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

7.0 KiB

Instalacion Local (Desarrollo) - Direccion de Admision 2026

Requisitos previos

Herramienta Version minima Uso
Laragon - PHP + Composer (servidor local)
PHP 8.4+ Backend Laravel (Thread Safe, VS17 x64)
Composer 2.x Dependencias PHP
Node.js 18+ Frontend Vue
npm 9+ Dependencias JS
Docker 20+ Solo para MySQL
Docker Compose 2+ Solo para MySQL

Descargar PHP 8.4 para Laragon

Si Laragon no trae PHP 8.4, descargarlo manualmente:

  1. Descargar desde https://windows.php.net/download/ el archivo VS17 x64 Thread Safe (zip)
  2. Extraer en C:\laragon\bin\php\php-8.4.xx-Win32-vs17-x64\
  3. En Laragon: clic derecho > PHP > seleccionar la version 8.4
  4. Instalar Visual C++ 2022 si no lo tienes: https://aka.ms/vs/17/release/vc_redist.x64.exe
  5. Agregar al PATH: clic derecho en Laragon > Tools > Path > Add Laragon to Path

Paso 1: Clonar el repositorio

git clone <url-del-repo> direccion_de_admision_2026
cd direccion_de_admision_2026

Paso 2: Levantar MySQL con Docker

docker compose up -d

Esto levanta un contenedor MySQL 8.0 con:

  • Host: 127.0.0.1
  • Puerto: 3306
  • Usuario: root
  • Password: root
  • Base de datos: admision_2026

Verificar que funcione:

docker exec admision_2026_db mysql -uroot -proot -e "SELECT 'MySQL OK'"

Paso 3: Importar la base de datos

docker exec -i admision_2026_db mysql -uroot -proot admision_2026 < admision_2006-vI.sql

Verificar tablas importadas:

docker exec admision_2026_db mysql -uroot -proot admision_2026 -e "SHOW TABLES;"

Debe mostrar 34 tablas base (users, postulantes, areas, cursos, examenes, procesos_admision, etc.). Las tablas comunicados y comunicado_imagenes se crean en el paso 4.5 via migraciones.

Nota: El dump incluye la estructura de todas las tablas y los registros en migrations. Aun así, siempre que hagas git pull debes correr php artisan migrate — el dump cubre las tablas base, pero las migraciones nuevas que se agreguen al repo después del dump no estarán en él.


Paso 4: Configurar el Backend (Laravel)

cd back

4.1 Instalar dependencias

composer install

4.2 Configurar variables de entorno

copy .env.example .env

Editar back/.env y configurar:

DB_PASSWORD=root

4.3 Generar clave de aplicacion

php artisan key:generate

4.4 Crear enlace de storage (para imagenes)

php artisan storage:link

4.5 Correr migraciones nuevas

php artisan migrate

El dump cubre las tablas base. Este comando aplica cualquier migración nueva que se haya agregado al repo después de que el dump fue generado. Si no hay migraciones pendientes, el comando termina sin hacer nada — es seguro correrlo siempre.

Si el comando falla con un error tipo Table 'users' already exists, significa que el dump no incluye los registros en la tabla migrations. Solución — correr esto primero y luego volver a migrar:

php artisan tinker --execute="
DB::table('migrations')->insertOrIgnore([
  ['migration' => '0001_01_01_000000_create_users_table', 'batch' => 1],
  ['migration' => '0001_01_01_000001_create_cache_table', 'batch' => 1],
  ['migration' => '0001_01_01_000002_create_jobs_table', 'batch' => 1],
  ['migration' => '2026_01_27_132900_create_personal_access_tokens_table', 'batch' => 1],
  ['migration' => '2026_01_27_133609_create_permission_tables', 'batch' => 1],
]);
echo 'done';
"
php artisan migrate

4.6 Ejecutar seeders

php artisan db:seed --class=RoleSeeder

Esto crea los roles: usuario, administrador, superadmin.

4.7 Asignar rol a tu usuario

Si ya tienes un usuario creado (por registro o por el dump SQL), asignarle un rol desde tinker:

php artisan tinker
$user = \App\Models\User::where('email', 'tu@email.com')->first();
$user->assignRole('superadmin');
exit

Importante: Sin un rol asignado, el login devuelve 200 pero no redirige al dashboard.


Paso 5: Configurar el Frontend (Vue 3)

cd front

5.1 Instalar dependencias

npm install

5.2 Configurar variables de entorno

copy .env.example .env

El archivo debe contener:

VITE_API_URL=http://127.0.0.1:8000/api

Levantar el proyecto

Necesitas 3 cosas corriendo al mismo tiempo:

1. MySQL (Docker) - si no esta corriendo

docker compose up -d

2. Backend (Terminal 1)

cd back
php artisan serve

Estara disponible en: http://localhost:8000

3. Frontend (Terminal 2)

cd front
npm run dev

Estara disponible en: http://localhost:5173


Stack tecnologico

Capa Tecnologia
Backend Laravel 12 + PHP 8.4
Frontend Vue 3 + Vite 7 + Ant Design Vue + Pinia
Base de datos MySQL 8.0 (Docker)
Autenticacion Laravel Sanctum (Bearer tokens)
Permisos Spatie Laravel Permission
QR SimpleSoftwareIO QRCode

Notas importantes

  • No modificar composer.lock a menos que todos los del equipo acuerden (requiere PHP 8.4+)
  • El dump SQL (admision_2006-vI.sql) es la fuente de verdad de la base de datos. Siempre se trabaja a partir de él — nunca desde php artisan migrate:fresh o similar.
  • Cada vez que se agrega una feature con nueva migración: el desarrollador corre php artisan migrate en local, luego exporta solo la tabla nueva del dump y la añade al dump maestro para que el equipo pueda importarla.
  • Si el puerto 3306 esta ocupado (por otro MySQL local), detener ese servicio primero o cambiar el puerto en docker-compose.yml
  • Los archivos .env no se suben al repositorio (estan en .gitignore)

Workflow cuando hay una migración nueva en el repo

Cuando haces git pull y hay una migración nueva (alguien agregó una feature con nueva tabla):

Paso 1: verificar el estado

php artisan migrate:status

Caso A: solo aparece 1 migración como Pending

Eso es lo normal. Solo corre:

php artisan migrate

Listo.

Caso B: aparecen TODAS las migraciones como Pending

Esto pasa cuando instalaste desde el dump SQL y nunca corriste php artisan migrate antes. La tabla migrations está incompleta y Laravel cree que todo está pendiente — si corres migrate directamente fallará con Table 'users' already exists.

Solución: registrar las migraciones base manualmente y luego migrar.

php artisan tinker --execute="
DB::table('migrations')->insertOrIgnore([
  ['migration' => '0001_01_01_000000_create_users_table', 'batch' => 1],
  ['migration' => '0001_01_01_000001_create_cache_table', 'batch' => 1],
  ['migration' => '0001_01_01_000002_create_jobs_table', 'batch' => 1],
  ['migration' => '2026_01_27_132900_create_personal_access_tokens_table', 'batch' => 1],
  ['migration' => '2026_01_27_133609_create_permission_tables', 'batch' => 1],
]);
echo 'done';
"
php artisan migrate

Ahora sí solo correrá la migración nueva que falta.