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.

352 lines
7.1 KiB
Markdown

# Instalacion - 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
```bash
git clone <url-del-repo> direccion_de_admision_2026
cd direccion_de_admision_2026
```
---
## Paso 2: Levantar MySQL con Docker
```bash
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:
```bash
docker exec admision_2026_db mysql -uroot -proot -e "SELECT 'MySQL OK'"
```
---
## Paso 3: Importar la base de datos
```bash
docker exec -i admision_2026_db mysql -uroot -proot admision_2026 < admision_2026_200.sql
```
Verificar tablas importadas:
```bash
docker exec admision_2026_db mysql -uroot -proot admision_2026 -e "SHOW TABLES;"
```
Debe mostrar 32 tablas (users, postulantes, areas, cursos, examenes, procesos_admision, etc.)
---
## Paso 4: Configurar el Backend (Laravel)
```bash
cd back
```
### 4.1 Instalar dependencias
```bash
composer install
```
### 4.2 Configurar variables de entorno
```bash
copy .env.example .env
```
Editar `back/.env` y cambiar la password de la BD:
```
DB_PASSWORD=root
```
### 4.3 Generar clave de aplicacion
```bash
php artisan key:generate
```
### 4.4 Crear enlace de storage (para imagenes)
```bash
php artisan storage:link
```
---
## Paso 5: Configurar el Frontend (Vue 3)
```bash
cd front
```
### 5.1 Instalar dependencias
```bash
npm install
```
### 5.2 Configurar variables de entorno
```bash
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
```bash
docker compose up -d
```
### 2. Backend (Terminal 1)
```bash
cd back
php artisan serve
```
Estara disponible en: **http://localhost:8000**
### 3. Frontend (Terminal 2)
```bash
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_2026_200.sql`) ya incluye todas las tablas y datos necesarios, no se necesita `php artisan migrate`
- 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`)
---
# Deploy en Produccion (Docker)
Todo el proyecto se dockeriza para correr en un VPS con Linux. Se usan 4 contenedores: **nginx** (reverse proxy), **backend** (PHP-FPM), **frontend** (Vue SPA + nginx) y **mysql**.
## Requisitos del servidor
| Herramienta | Version minima |
|---|---|
| Docker | 20+ |
| Docker Compose | 2+ |
| RAM | 2 GB minimo |
| Disco | 10 GB minimo |
---
## Paso 1: Clonar el repositorio en el servidor
```bash
git clone <url-del-repo> direccion_de_admision_2026
cd direccion_de_admision_2026
```
---
## Paso 2: Configurar variables de entorno
```bash
cp .env.prod.example .env.prod
```
Editar `.env.prod` y configurar **obligatoriamente**:
```
APP_KEY= # Generar con: php artisan key:generate --show (o tras el build)
APP_URL=https://tu-dominio.com
DB_PASSWORD=UNA_PASSWORD_SEGURA
SESSION_DOMAIN=tu-dominio.com
SANCTUM_STATEFUL_DOMAINS=tu-dominio.com
VITE_API_URL=/api
```
Configurar tambien el correo SMTP si se usa envio de emails.
---
## Paso 3: Importar la base de datos (primera vez)
Construir y levantar solo MySQL primero:
```bash
docker compose -f docker-compose.prod.yml up -d mysql
```
Esperar a que MySQL este listo y luego importar el dump:
```bash
docker exec -i admision_prod_db mysql -uroot -pTU_PASSWORD admision_2026 < admision_2026_200.sql
```
Verificar:
```bash
docker exec admision_prod_db mysql -uroot -pTU_PASSWORD admision_2026 -e "SHOW TABLES;"
```
---
## Paso 4: Construir y levantar todos los servicios
```bash
docker compose -f docker-compose.prod.yml build
docker compose -f docker-compose.prod.yml up -d
```
Verificar que los 4 contenedores esten corriendo:
```bash
docker compose -f docker-compose.prod.yml ps
```
---
## Paso 5: Generar APP_KEY (primera vez)
```bash
docker exec admision_prod_backend php artisan key:generate --show
```
Copiar la clave generada al archivo `.env.prod` en `APP_KEY=` y reiniciar:
```bash
docker compose -f docker-compose.prod.yml restart backend
```
---
## Paso 6: Crear enlace de storage
```bash
docker exec admision_prod_backend php artisan storage:link
```
---
## Verificar el deploy
- Abrir `http://tu-dominio.com` -> debe cargar el frontend Vue
- Abrir `http://tu-dominio.com/api/...` -> debe responder la API Laravel
---
## Comandos utiles
```bash
# Ver logs de todos los servicios
docker compose -f docker-compose.prod.yml logs -f
# Ver logs de un servicio especifico
docker compose -f docker-compose.prod.yml logs -f backend
# Reiniciar todo
docker compose -f docker-compose.prod.yml restart
# Detener todo
docker compose -f docker-compose.prod.yml down
# Reconstruir tras cambios de codigo
git pull
docker compose -f docker-compose.prod.yml build
docker compose -f docker-compose.prod.yml up -d
# Ejecutar comandos artisan
docker exec admision_prod_backend php artisan migrate --force
docker exec admision_prod_backend php artisan cache:clear
```
---
## Arquitectura de contenedores
```
Puerto 80
|
[nginx] (reverse proxy)
/ \
/api/* / \ /*
/ \
[backend] [frontend]
PHP-FPM nginx+SPA
:9000 :80
|
[mysql]
:3306
```
---
## Notas de produccion
- Los datos de MySQL se persisten en un volumen Docker (`mysql_data`)
- El storage de Laravel se persiste en un volumen Docker (`backend_storage`)
- Para HTTPS, configurar un reverse proxy externo (Nginx/Caddy en el host) o usar Cloudflare
- El archivo `.env.prod` **nunca** debe subirse al repositorio